mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-01 11:36:51 +02:00
Improve GVariant test coverage
This commit is contained in:
parent
ec0d6d7812
commit
baceea9582
@ -3741,6 +3741,23 @@ test_parses (void)
|
|||||||
g_free (printed);
|
g_free (printed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* escapes */
|
||||||
|
{
|
||||||
|
const gchar orig[] = " \342\200\254 \360\220\210\240 \a \b \f \n \r \t \v ";
|
||||||
|
GVariant *value;
|
||||||
|
gchar *printed;
|
||||||
|
|
||||||
|
value = g_variant_new_string (orig);
|
||||||
|
printed = g_variant_print (value, FALSE);
|
||||||
|
g_variant_unref (value);
|
||||||
|
|
||||||
|
g_assert_cmpstr (printed, ==, "' \\u202c \\U00010220 \\a \\b \\f \\n \\r \\t \\v '");
|
||||||
|
value = g_variant_parse (NULL, printed, NULL, NULL, NULL);
|
||||||
|
g_assert_cmpstr (g_variant_get_string (value, NULL), ==, orig);
|
||||||
|
g_variant_unref (value);
|
||||||
|
g_free (printed);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
/* inf/nan strings are C99 features which Visual C++ does not support */
|
/* inf/nan strings are C99 features which Visual C++ does not support */
|
||||||
/* inf/nan mini test */
|
/* inf/nan mini test */
|
||||||
@ -4108,29 +4125,163 @@ test_lookup (void)
|
|||||||
g_variant_unref (dict);
|
g_variant_unref (dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GVariant *
|
||||||
|
untrusted (GVariant *a)
|
||||||
|
{
|
||||||
|
GVariant *b;
|
||||||
|
const GVariantType *type;
|
||||||
|
GBytes *bytes;
|
||||||
|
|
||||||
|
type = g_variant_get_type (a);
|
||||||
|
bytes = g_variant_get_data_as_bytes (a);
|
||||||
|
b = g_variant_new_from_bytes (type, bytes, FALSE);
|
||||||
|
g_bytes_unref (bytes);
|
||||||
|
g_variant_unref (a);
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_compare (void)
|
test_compare (void)
|
||||||
{
|
{
|
||||||
GVariant *a;
|
GVariant *a;
|
||||||
GVariant *b;
|
GVariant *b;
|
||||||
|
|
||||||
a = g_variant_new_byte (5);
|
a = untrusted (g_variant_new_byte (5));
|
||||||
b = g_variant_new_byte (6);
|
b = g_variant_new_byte (6);
|
||||||
g_assert (g_variant_compare (a, b) < 0);
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
g_variant_unref (a);
|
g_variant_unref (a);
|
||||||
g_variant_unref (b);
|
g_variant_unref (b);
|
||||||
a = g_variant_new_string ("abc");
|
a = untrusted (g_variant_new_int16 (G_MININT16));
|
||||||
|
b = g_variant_new_int16 (G_MAXINT16);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint16 (0));
|
||||||
|
b = g_variant_new_uint16 (G_MAXUINT16);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_int32 (G_MININT32));
|
||||||
|
b = g_variant_new_int32 (G_MAXINT32);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint32 (0));
|
||||||
|
b = g_variant_new_uint32 (G_MAXUINT32);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_int64 (G_MININT64));
|
||||||
|
b = g_variant_new_int64 (G_MAXINT64);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint64 (0));
|
||||||
|
b = g_variant_new_uint64 (G_MAXUINT64);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_double (G_MINDOUBLE));
|
||||||
|
b = g_variant_new_double (G_MAXDOUBLE);
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_string ("abc"));
|
||||||
b = g_variant_new_string ("abd");
|
b = g_variant_new_string ("abd");
|
||||||
g_assert (g_variant_compare (a, b) < 0);
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
g_variant_unref (a);
|
g_variant_unref (a);
|
||||||
g_variant_unref (b);
|
g_variant_unref (b);
|
||||||
a = g_variant_new_boolean (FALSE);
|
a = untrusted (g_variant_new_object_path ("/abc"));
|
||||||
|
b = g_variant_new_object_path ("/abd");
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_signature ("g"));
|
||||||
|
b = g_variant_new_signature ("o");
|
||||||
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_boolean (FALSE));
|
||||||
b = g_variant_new_boolean (TRUE);
|
b = g_variant_new_boolean (TRUE);
|
||||||
g_assert (g_variant_compare (a, b) < 0);
|
g_assert (g_variant_compare (a, b) < 0);
|
||||||
g_variant_unref (a);
|
g_variant_unref (a);
|
||||||
g_variant_unref (b);
|
g_variant_unref (b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_equal (void)
|
||||||
|
{
|
||||||
|
GVariant *a;
|
||||||
|
GVariant *b;
|
||||||
|
|
||||||
|
a = untrusted (g_variant_new_byte (5));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_int16 (G_MININT16));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint16 (0));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_int32 (G_MININT32));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint32 (0));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_int64 (G_MININT64));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_uint64 (0));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_double (G_MINDOUBLE));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_string ("abc"));
|
||||||
|
g_assert (g_variant_equal (a, a));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_object_path ("/abc"));
|
||||||
|
g_assert (g_variant_equal (a, a));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
a = untrusted (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_signature ("g"));
|
||||||
|
g_assert (g_variant_equal (a, a));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
a = untrusted (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
a = untrusted (g_variant_new_boolean (FALSE));
|
||||||
|
b = g_variant_get_normal_form (a);
|
||||||
|
g_assert (g_variant_equal (a, b));
|
||||||
|
g_variant_unref (a);
|
||||||
|
g_variant_unref (b);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_fixed_array (void)
|
test_fixed_array (void)
|
||||||
{
|
{
|
||||||
@ -4211,6 +4362,9 @@ test_check_format_string (void)
|
|||||||
g_test_assert_expected_messages ();
|
g_test_assert_expected_messages ();
|
||||||
g_assert (g_variant_check_format_string (value, "(s^&ay)", FALSE));
|
g_assert (g_variant_check_format_string (value, "(s^&ay)", FALSE));
|
||||||
|
|
||||||
|
g_assert (g_variant_check_format_string (value, "r", FALSE));
|
||||||
|
g_assert (g_variant_check_format_string (value, "(?a?)", FALSE));
|
||||||
|
|
||||||
g_variant_unref (value);
|
g_variant_unref (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4333,6 +4487,47 @@ test_gbytes (void)
|
|||||||
g_variant_unref (tuple);
|
g_variant_unref (tuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const GVariantType *type;
|
||||||
|
const gchar *in;
|
||||||
|
const gchar *out;
|
||||||
|
} ContextTest;
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_print_context (void)
|
||||||
|
{
|
||||||
|
ContextTest tests[] = {
|
||||||
|
{ NULL, "(1, 2, 3, 'abc", " ^^^^" },
|
||||||
|
{ NULL, "[1, 2, 3, 'str']", " ^ ^^^^^" },
|
||||||
|
{ G_VARIANT_TYPE_UINT16, "{ 'abc':'def' }", " ^^^^^^^^^^^^^^^" },
|
||||||
|
{ NULL, "<5", " ^" },
|
||||||
|
{ NULL, "'ab\\ux'", " ^^^^^^^" },
|
||||||
|
{ NULL, "'ab\\U00efx'", " ^^^^^^^^^^^" }
|
||||||
|
};
|
||||||
|
GVariant *v;
|
||||||
|
gchar *s;
|
||||||
|
gint i;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (tests); i++)
|
||||||
|
{
|
||||||
|
v = g_variant_parse (tests[i].type, tests[i].in, NULL, NULL, &error);
|
||||||
|
g_assert_null (v);
|
||||||
|
s = g_variant_parse_error_print_context (error, tests[i].in);
|
||||||
|
g_assert (strstr (s, tests[i].out) != NULL);
|
||||||
|
g_free (s);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_error_quark (void)
|
||||||
|
{
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
g_assert (g_variant_parser_get_error_quark () == g_variant_parse_error_quark ());
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -4381,6 +4576,7 @@ main (int argc, char **argv)
|
|||||||
g_test_add_func ("/gvariant/lookup-value", test_lookup_value);
|
g_test_add_func ("/gvariant/lookup-value", test_lookup_value);
|
||||||
g_test_add_func ("/gvariant/lookup", test_lookup);
|
g_test_add_func ("/gvariant/lookup", test_lookup);
|
||||||
g_test_add_func ("/gvariant/compare", test_compare);
|
g_test_add_func ("/gvariant/compare", test_compare);
|
||||||
|
g_test_add_func ("/gvariant/equal", test_equal);
|
||||||
g_test_add_func ("/gvariant/fixed-array", test_fixed_array);
|
g_test_add_func ("/gvariant/fixed-array", test_fixed_array);
|
||||||
g_test_add_func ("/gvariant/check-format-string", test_check_format_string);
|
g_test_add_func ("/gvariant/check-format-string", test_check_format_string);
|
||||||
|
|
||||||
@ -4388,6 +4584,8 @@ main (int argc, char **argv)
|
|||||||
g_test_add_func ("/gvariant/checksum-nested", test_checksum_nested);
|
g_test_add_func ("/gvariant/checksum-nested", test_checksum_nested);
|
||||||
|
|
||||||
g_test_add_func ("/gvariant/gbytes", test_gbytes);
|
g_test_add_func ("/gvariant/gbytes", test_gbytes);
|
||||||
|
g_test_add_func ("/gvariant/print-context", test_print_context);
|
||||||
|
g_test_add_func ("/gvariant/error-quark", test_error_quark);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user