Add fundamental type and pspec for GVariant

Make G_TYPE_VARIANT a fundamental type instead of boxed, and add
g_variant_{set,get,dup}_variant.

Add GParamSpecVariant.

Bug #610863.
This commit is contained in:
Christian Persch
2010-06-17 18:03:51 +02:00
parent f2ae621777
commit 4708b8ecc3
14 changed files with 461 additions and 35 deletions

View File

@@ -219,6 +219,15 @@ test_collection (void)
error = collect (&value, G_TYPE_BOXED);
g_assert (error == NULL);
g_assert (g_value_get_gtype (&value) == G_TYPE_BOXED);
g_value_unset (&value);
g_value_init (&value, G_TYPE_VARIANT);
error = collect (&value, g_variant_new_uint32 (42));
g_assert (error == NULL);
g_assert (g_variant_is_of_type (g_value_get_variant (&value), G_VARIANT_TYPE ("u")));
g_assert_cmpuint (g_variant_get_uint32 (g_value_get_variant (&value)), ==, 42);
g_value_unset (&value);
}
static void
@@ -357,18 +366,33 @@ test_copying (void)
g_assert (error == NULL);
g_assert (c == G_TYPE_BOXED);
}
{
GVariant *c = NULL;
g_value_unset (&value);
g_value_init (&value, G_TYPE_VARIANT);
g_value_set_variant (&value, g_variant_new_uint32 (42));
error = lcopy (&value, &c);
g_assert (error == NULL);
g_assert (c != NULL);
g_assert (g_variant_is_of_type (c, G_VARIANT_TYPE ("u")));
g_assert_cmpuint (g_variant_get_uint32 (c), ==, 42);
g_variant_unref (c);
}
}
int
main (int argc, char *argv[])
{
g_type_init ();
test_enum_transformation ();
test_gtype_value ();
test_collection ();
test_copying ();
g_test_init (&argc, &argv, NULL);
g_type_init ();
return 0;
g_test_add_func ("/gvalue/enum-transformation", test_enum_transformation);
g_test_add_func ("/gvalue/gtype", test_gtype_value);
g_test_add_func ("/gvalue/collection", test_collection);
g_test_add_func ("/gvalue/copying", test_copying);
return g_test_run ();
}

View File

@@ -206,15 +206,47 @@ test_param_spec_gtype (void)
g_assert (!modified && g_value_get_gtype (&value) == G_TYPE_PARAM_INT);
}
static void
test_param_spec_variant (void)
{
GParamSpec *pspec;
GValue value = { 0, };
gboolean modified;
pspec = g_param_spec_variant ("variant", "nick", "blurb",
G_VARIANT_TYPE ("i"),
g_variant_new_int32 (42),
G_PARAM_READWRITE);
g_value_init (&value, G_TYPE_VARIANT);
g_value_set_variant (&value, g_variant_new_int32 (42));
g_assert (g_param_value_defaults (pspec, &value));
modified = g_param_value_validate (pspec, &value);
g_assert (!modified);
g_value_reset (&value);
g_value_set_variant (&value, g_variant_new_uint32 (41));
modified = g_param_value_validate (pspec, &value);
g_assert (modified);
g_assert_cmpint (g_variant_get_int32 (g_value_get_variant (&value)), ==, 42);
g_value_unset (&value);
g_param_spec_unref (pspec);
}
int
main (int argc, char *argv[])
{
g_type_init ();
test_param_spec_char ();
test_param_spec_string ();
test_param_spec_override ();
test_param_spec_gtype ();
g_test_init (&argc, &argv, NULL);
g_type_init ();
return 0;
g_test_add_func ("/paramspec/char", test_param_spec_char);
g_test_add_func ("/paramspec/string", test_param_spec_string);
g_test_add_func ("/paramspec/override", test_param_spec_override);
g_test_add_func ("/paramspec/gtype", test_param_spec_gtype);
g_test_add_func ("/paramspec/variant", test_param_spec_variant);
return g_test_run ();
}