From 2f2de9f5802bb722c86951398ca3ff501c990282 Mon Sep 17 00:00:00 2001 From: Yannick Guesnet Date: Wed, 16 Mar 2011 10:56:28 +0100 Subject: Variant: Added Variant::get(). * glib/src/variant.[ccg|hg]: Added Variant::get(). * tests/glibmm_variant/main.cc: Add some tests. This is useful because Variant can be manipulate as other variants of type Variant. This allow, for example, to define variants of type Variant >. --- tests/glibmm_variant/main.cc | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests') diff --git a/tests/glibmm_variant/main.cc b/tests/glibmm_variant/main.cc index 1f463e43..e84dd751 100644 --- a/tests/glibmm_variant/main.cc +++ b/tests/glibmm_variant/main.cc @@ -157,4 +157,41 @@ static void test_dynamic_cast() catch (const std::bad_cast& e) { } + + // A variant of type a{sv} + typedef std::map type_map_sv; + typedef Glib::Variant type_dict_sv; + g_assert((type_dict_sv::variant_type().get_string()) == "a{sv}"); + + type_dict_sv var_map; + type_map_sv map; + Glib::Variant var_string = + Glib::Variant::create("test variant"); + map["test key"] = var_string; + var_map = type_dict_sv::create(map); + g_assert(var_map.get_type_string() == "a{sv}"); + + Glib::VariantBase& ref_var_base = var_map; + type_dict_sv var_map_cast = Glib::VariantBase::cast_dynamic(ref_var_base); + + try + { + Glib::Variant > var_wrong_map = + Glib::VariantBase::cast_dynamic > >(ref_var_base); + g_assert_not_reached(); + } + catch(const std::bad_cast& e) + { + } + + type_map_sv get_map = var_map_cast.get(); + var_string = Glib::VariantBase::cast_dynamic >(get_map["test key"]); + g_assert(var_string.get() == "test variant"); + + // A variant of type v + Glib::Variant< Glib::VariantBase > var_v = Glib::Variant< Glib::VariantBase >::create(var_string); + g_assert(var_v.get_type_string() == "v"); + Glib::Variant< Glib::ustring > var_s2 = + Glib::VariantBase::cast_dynamic >(var_v.get()); + g_assert(var_s2.get() == "test variant"); } -- cgit v1.2.1