wireplumber/tests/wp/spa-json.c
2024-03-04 07:07:56 +00:00

1330 lines
42 KiB
C

/* WirePlumber
*
* Copyright © 2021 Collabora Ltd.
* @author Julian Bouzas <julian.bouzas@collabora.com>
*
* SPDX-License-Identifier: MIT
*/
#include "../common/test-log.h"
static void
test_spa_json_basic (void)
{
/* Null */
{
g_autoptr (WpSpaJson) json = wp_spa_json_new_null ();
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_null (json));
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"null", 4);
}
/* Boolean */
{
g_autoptr (WpSpaJson) json = wp_spa_json_new_boolean (TRUE);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_boolean (json));
gboolean v = FALSE;
g_assert_true (wp_spa_json_parse_boolean (json, &v));
g_assert_true (v);
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"true", 4);
}
/* Int */
{
g_autoptr (WpSpaJson) json = wp_spa_json_new_int (8);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_int (json));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (json, &v));
g_assert_cmpint (v, ==, 8);
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"8", 1);
}
/* Float */
{
g_autoptr (WpSpaJson) json = wp_spa_json_new_float (3.14f);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_float (json));
float v = 0;
g_assert_true (wp_spa_json_parse_float (json, &v));
g_assert_cmpfloat_with_epsilon (v, 3.14f, 0.001f);
}
/* String */
{
g_autoptr (WpSpaJson) json = wp_spa_json_new_string ("wireplumber");
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_string (json));
g_autofree gchar *v1 = wp_spa_json_parse_string (json);
g_assert_nonnull (v1);
g_assert_cmpstr (v1, ==, "wireplumber");
g_autoptr (WpSpaJson) jsone = wp_spa_json_new_string ("");
g_assert_nonnull (jsone);
g_assert_true (wp_spa_json_is_string (jsone));
g_autofree gchar *v2 = wp_spa_json_parse_string (jsone);
g_assert_nonnull (v2);
g_assert_cmpstr (v2, ==, "");
g_autoptr (WpSpaJson) jsonl = wp_spa_json_new_string (
"looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong");
g_assert_nonnull (jsonl);
g_assert_true (wp_spa_json_is_string (jsonl));
g_autofree gchar *v3 = wp_spa_json_parse_string (jsonl);
g_assert_nonnull (v3);
g_assert_cmpstr (v3, ==,
"looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong");
g_autoptr (WpSpaJson) jsons = wp_spa_json_new_string ("\v\v\v\v");
g_assert_nonnull (jsons);
g_assert_true (wp_spa_json_is_string (jsons));
g_autofree gchar *v4 = wp_spa_json_parse_string (jsons);
g_assert_nonnull (v4);
g_assert_cmpstr (v4, ==, "\v\v\v\v");
}
/* Array */
{
g_autoptr (WpSpaJson) empty = wp_spa_json_new_array (NULL, NULL);
g_assert_nonnull (empty);
g_assert_true (wp_spa_json_is_array (empty));
g_assert_cmpmem (wp_spa_json_get_data (empty), wp_spa_json_get_size (empty),
"[]", 2);
g_autoptr (WpSpaJson) json = wp_spa_json_new_array ("i", 1, "i", 2, NULL);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_array (json));
gint32 v1 = 0, v2 = 0;
g_assert_true (wp_spa_json_parse_array (json, "i", &v1, "i", &v2, NULL));
g_assert_cmpint (v1, ==, 1);
g_assert_cmpint (v2, ==, 2);
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"[1, 2]", 6);
}
/* Object */
{
g_autoptr (WpSpaJson) empty = wp_spa_json_new_object (NULL, NULL, NULL);
g_assert_nonnull (empty);
g_assert_true (wp_spa_json_is_object (empty));
g_assert_cmpmem (wp_spa_json_get_data (empty), wp_spa_json_get_size (empty),
"{}", 2);
g_autoptr (WpSpaJson) subjson = wp_spa_json_new_array ("b", TRUE, NULL);
g_autoptr (WpSpaJson) json = wp_spa_json_new_object (
"key1", "n",
"key2", "b", TRUE,
"key3", "i", 3,
"key4", "f", 2.72f,
"key5", "s", "str",
"key6", "J", subjson,
NULL);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_object (json));
{
g_autofree gchar *key1 = NULL, *key2 = NULL, *key3 = NULL, *key4 = NULL,
*key5 = NULL, *key6 = NULL;
gboolean v2 = FALSE;
gint32 v3 = 0;
float v4 = 0.0f;
g_autofree gchar *v5 = NULL;
g_autoptr (WpSpaJson) v6 = NULL;
g_assert_true (wp_spa_json_parse_object (json,
&key1, "n",
&key2, "b", &v2,
&key3, "i", &v3,
&key4, "f", &v4,
&key5, "s", &v5,
&key6, "J", &v6,
NULL));
g_assert_cmpstr (key1, ==, "key1");
g_assert_cmpstr (key2, ==, "key2");
g_assert_true (v2);
g_assert_cmpstr (key3, ==, "key3");
g_assert_cmpint (v3, ==, 3);
g_assert_cmpstr (key4, ==, "key4");
g_assert_cmpfloat_with_epsilon (v4, 2.72f, 0.001f);
g_assert_cmpstr (key5, ==, "key5");
g_assert_cmpstr (v5, ==, "str");
g_assert_cmpstr (key6, ==, "key6");
g_assert_nonnull (v6);
g_assert_cmpmem (wp_spa_json_get_data (v6), wp_spa_json_get_size (v6),
"[true]", 6);
}
{
gboolean v2 = FALSE;
gint32 v3 = 0;
float v4 = 0.0f;
g_autofree gchar *v5 = NULL;
g_autoptr (WpSpaJson) v6 = NULL;
g_assert_true (wp_spa_json_object_get (json,
"key6", "J", &v6,
"key3", "i", &v3,
"key5", "s", &v5,
"key1", "n",
"key2", "b", &v2,
"key4", "f", &v4,
NULL));
g_assert_true (v2);
g_assert_cmpint (v3, ==, 3);
g_assert_cmpfloat_with_epsilon (v4, 2.72f, 0.001f);
g_assert_cmpstr (v5, ==, "str");
g_assert_nonnull (v6);
g_assert_cmpmem (wp_spa_json_get_data (v6), wp_spa_json_get_size (v6),
"[true]", 6);
}
}
}
static void
test_spa_json_array_builder_parser_iterator (void)
{
g_autoptr (WpSpaJson) json = NULL;
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_array ();
g_assert_nonnull (b);
wp_spa_json_builder_add_int (b, 1);
wp_spa_json_builder_add_int (b, 2);
wp_spa_json_builder_add_int (b, 3);
json = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_array (json));
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"[1, 2, 3]", 9);
{
g_autoptr (WpSpaJsonParser) p = wp_spa_json_parser_new_array (json);
g_assert_nonnull (p);
gint32 v = 0;
g_assert_true (wp_spa_json_parser_get_int (p, &v));
g_assert_cmpint (v, ==, 1);
g_assert_true (wp_spa_json_parser_get_int (p, &v));
g_assert_cmpint (v, ==, 2);
g_assert_true (wp_spa_json_parser_get_int (p, &v));
g_assert_cmpint (v, ==, 3);
wp_spa_json_parser_end (p);
g_assert_false (wp_spa_json_parser_get_null (p));
}
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 1);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 2);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 3);
g_value_unset (&next);
}
g_assert_false (wp_iterator_next (it, NULL));
wp_iterator_reset (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 1);
g_value_unset (&next);
}
}
static void
test_spa_json_object_builder_parser_iterator (void)
{
g_autoptr (WpSpaJson) json = NULL;
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_object ();
g_assert_nonnull (b);
wp_spa_json_builder_add_property (b, "key-null");
wp_spa_json_builder_add_null (b);
wp_spa_json_builder_add_property (b, "key-boolean");
wp_spa_json_builder_add_boolean (b, TRUE);
wp_spa_json_builder_add_property (b, "key-int");
wp_spa_json_builder_add_int (b, 7);
wp_spa_json_builder_add_property (b, "key-float");
wp_spa_json_builder_add_float (b, 0.12f);
wp_spa_json_builder_add_property (b, "key-string");
wp_spa_json_builder_add_string (b, "str");
wp_spa_json_builder_add_property (b, "key-empty-string");
wp_spa_json_builder_add_string (b, "");
wp_spa_json_builder_add_property (b, "key-special-char-string");
wp_spa_json_builder_add_string (b, "\v\v\v\v");
json = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_object (json));
{
g_autoptr (WpSpaJsonParser) p = wp_spa_json_parser_new_object (json);
g_assert_nonnull (p);
g_autofree gchar *key_null = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_null);
g_assert_cmpstr (key_null, ==, "key-null");
g_assert_true (wp_spa_json_parser_get_null (p));
g_autofree gchar *key_boolean = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_boolean);
g_assert_cmpstr (key_boolean, ==, "key-boolean");
gboolean v_boolean = FALSE;
g_assert_true (wp_spa_json_parser_get_boolean (p, &v_boolean));
g_assert_true (v_boolean);
g_autofree gchar *key_int = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_int);
g_assert_cmpstr (key_int, ==, "key-int");
gint32 v_int = 0;
g_assert_true (wp_spa_json_parser_get_int (p, &v_int));
g_assert_cmpint (v_int, ==, 7);
g_autofree gchar *key_float = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_float);
g_assert_cmpstr (key_float, ==, "key-float");
float v_float = 0.0f;
g_assert_true (wp_spa_json_parser_get_float (p, &v_float));
g_assert_cmpfloat_with_epsilon (v_float, 0.12f, 0.001f);
g_autofree gchar *key_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_string);
g_assert_cmpstr (key_string, ==, "key-string");
g_autofree gchar *v_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (v_string);
g_assert_cmpstr (v_string, ==, "str");
g_autofree gchar *key_empty_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_empty_string);
g_assert_cmpstr (key_empty_string, ==, "key-empty-string");
g_autofree gchar *v_empty_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (v_empty_string);
g_assert_cmpstr (v_empty_string, ==, "");
g_autofree gchar *key_special_char_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (key_special_char_string);
g_assert_cmpstr (key_special_char_string, ==, "key-special-char-string");
g_autofree gchar *v_special_char_string = wp_spa_json_parser_get_string (p);
g_assert_nonnull (v_special_char_string);
g_assert_cmpstr (v_special_char_string, ==, "\v\v\v\v");
wp_spa_json_parser_end (p);
g_assert_false (wp_spa_json_parser_get_null (p));
}
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-null");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_null (j));
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-boolean");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_boolean (j));
gboolean v = FALSE;
g_assert_true (wp_spa_json_parse_boolean (j, &v));
g_assert_true (v);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-int");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 7);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-float");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_float (j));
float v = 0;
g_assert_true (wp_spa_json_parse_float (j, &v));
g_assert_cmpfloat_with_epsilon (v, 0.12f, 0.001f);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-string");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "str");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-empty-string");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-special-char-string");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "\v\v\v\v");
g_value_unset (&next);
}
g_assert_false (wp_iterator_next (it, NULL));
wp_iterator_reset (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-null");
g_value_unset (&next);
}
}
static void
test_spa_json_nested (void)
{
g_autoptr (WpSpaJson) array = NULL;
g_autoptr (WpSpaJson) array2 = NULL;
g_autoptr (WpSpaJson) object = NULL;
g_autoptr (WpSpaJson) json = NULL;
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_array ();
g_assert_nonnull (b);
wp_spa_json_builder_add_int (b, 5);
wp_spa_json_builder_add_int (b, 10);
wp_spa_json_builder_add_int (b, 15);
array = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_array (array));
g_assert_cmpuint (wp_spa_json_get_size (array), ==, 11);
g_assert_cmpmem (wp_spa_json_get_data (array), wp_spa_json_get_size (array),
"[5, 10, 15]", 11);
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_array ();
g_assert_nonnull (b);
wp_spa_json_builder_add_int (b, 2);
wp_spa_json_builder_add_int (b, 4);
array2 = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_array (array2));
g_assert_cmpuint (wp_spa_json_get_size (array2), ==, 6);
g_assert_cmpmem (wp_spa_json_get_data (array2), wp_spa_json_get_size (array2),
"[2, 4]", 6);
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_object ();
g_assert_nonnull (b);
wp_spa_json_builder_add_property (b, "key-boolean");
wp_spa_json_builder_add_boolean (b, FALSE);
wp_spa_json_builder_add_property (b, "key-int");
wp_spa_json_builder_add_int (b, 8);
wp_spa_json_builder_add_property (b, "key-array");
wp_spa_json_builder_add_json (b, array2);
object = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_object (object));
g_assert_cmpuint (wp_spa_json_get_size (object), ==, 54);
g_assert_cmpmem (wp_spa_json_get_data (object), wp_spa_json_get_size (object),
"{\"key-boolean\":false, \"key-int\":8, \"key-array\":[2, 4]}", 54);
{
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_object ();
g_assert_nonnull (b);
wp_spa_json_builder_add_property (b, "key-array");
wp_spa_json_builder_add_json (b, array);
wp_spa_json_builder_add_property (b, "key-object");
wp_spa_json_builder_add_json (b, object);
json = wp_spa_json_builder_end (b);
}
g_assert_true (wp_spa_json_is_object (json));
g_assert_cmpuint (wp_spa_json_get_size (json), ==, 94);
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"{\"key-array\":[5, 10, 15], \"key-object\":{\"key-boolean\":false, "
"\"key-int\":8, \"key-array\":[2, 4]}}", 94);
g_assert_cmpstr (wp_spa_json_get_data (json), ==,
"{\"key-array\":[5, 10, 15], \"key-object\":{\"key-boolean\":false, "
"\"key-int\":8, \"key-array\":[2, 4]}}");
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-array");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 11);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[5, 10, 15]", 11);
g_autoptr (WpIterator) it2 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it2);
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 5);
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 10);
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 15);
g_value_unset (&next2);
}
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-object");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_object (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 54);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"{\"key-boolean\":false, \"key-int\":8, \"key-array\":[2, 4]}", 54);
g_autoptr (WpIterator) it2 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it2);
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-boolean");
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_boolean (j));
gboolean v = TRUE;
g_assert_true (wp_spa_json_parse_boolean (j, &v));
g_assert_false (v);
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-int");
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 8);
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-array");
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (array2));
g_assert_cmpuint (wp_spa_json_get_size (array2), ==, 6);
g_assert_cmpmem (wp_spa_json_get_data (array2),
wp_spa_json_get_size (array2), "[2, 4]", 6);
g_autoptr (WpIterator) it3 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it3);
{
GValue next3 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it3, &next3));
WpSpaJson *j = g_value_get_boxed (&next3);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 2);
g_value_unset (&next3);
}
{
GValue next3 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it3, &next3));
WpSpaJson *j = g_value_get_boxed (&next3);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 4);
g_value_unset (&next3);
}
g_value_unset (&next2);
}
g_value_unset (&next);
}
g_assert_false (wp_iterator_next (it, NULL));
wp_iterator_reset (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "key-array");
g_value_unset (&next);
}
}
static void
test_spa_json_nested2 (void)
{
const gchar json_str[] = "[[[[1], [2]], [3]], [4]]";
g_autoptr (WpSpaJson) json = wp_spa_json_new_wrap_string (json_str);
g_assert_true (wp_spa_json_is_array (json));
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"[[[[1], [2]], [3]], [4]]", 24);
{
g_autoptr (WpSpaJsonParser) p = wp_spa_json_parser_new_array (json);
g_assert_nonnull (p);
g_autoptr (WpSpaJson) j0 = wp_spa_json_parser_get_json (p);
g_assert_nonnull (j0);
g_assert_cmpmem (wp_spa_json_get_data (j0), wp_spa_json_get_size (j0),
"[[[1], [2]], [3]]", 17);
g_autoptr (WpSpaJson) j1 = wp_spa_json_parser_get_json (p);
g_assert_nonnull (j1);
g_assert_cmpmem (wp_spa_json_get_data (j1), wp_spa_json_get_size (j1),
"[4]", 3);
wp_spa_json_parser_end (p);
g_assert_false (wp_spa_json_parser_get_null (p));
}
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 17);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[[[1], [2]], [3]]", 17);
g_autoptr (WpIterator) it2 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it2);
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 10);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[[1], [2]]", 10);
g_autoptr (WpIterator) it3 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it3);
{
GValue next3 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it3, &next3));
WpSpaJson *j = g_value_get_boxed (&next3);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 3);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[1]", 3);
g_autoptr (WpIterator) it4 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it4);
{
GValue next4 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it4, &next4));
WpSpaJson *j = g_value_get_boxed (&next4);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"1", 1);
g_value_unset (&next4);
}
g_value_unset (&next3);
}
{
GValue next3 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it3, &next3));
WpSpaJson *j = g_value_get_boxed (&next3);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 3);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[2]", 3);
g_autoptr (WpIterator) it4 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it4);
{
GValue next4 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it4, &next4));
WpSpaJson *j = g_value_get_boxed (&next4);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"2", 1);
g_value_unset (&next4);
}
g_value_unset (&next3);
}
g_value_unset (&next2);
}
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 3);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[3]", 3);
g_autoptr (WpIterator) it3 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it3);
{
GValue next3 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it3, &next3));
WpSpaJson *j = g_value_get_boxed (&next3);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"3", 1);
g_value_unset (&next3);
}
g_value_unset (&next2);
}
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_array (j));
g_assert_cmpuint (wp_spa_json_get_size (j), ==, 3);
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"[4]", 3);
g_autoptr (WpIterator) it2 = wp_spa_json_new_iterator (j);
g_assert_nonnull (it2);
{
GValue next2 = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it2, &next2));
WpSpaJson *j = g_value_get_boxed (&next2);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
g_assert_cmpmem (wp_spa_json_get_data (j), wp_spa_json_get_size (j),
"4", 1);
g_value_unset (&next2);
}
g_value_unset (&next);
}
}
static void
test_spa_json_nested3 (void)
{
const gchar json_str[] =
"{ test-setting-json3: { key1: \"value\", key2: 2, key3: true } }";
g_autoptr (WpSpaJson) json = wp_spa_json_new_wrap_string (json_str);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_object (json));
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_cmpstr (v, ==, "test-setting-json3");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_object (j));
g_autofree gchar *v = wp_spa_json_to_string (j);
g_assert_cmpstr (v, ==, "{ key1: \"value\", key2: 2, key3: true }");
g_value_unset (&next);
}
}
static void
test_spa_json_ownership (void)
{
g_autoptr (WpSpaJson) json = NULL;
{
const gchar json_str[] = "{\"name\":\"John\", \"age\":30, \"car\":null}";
json = wp_spa_json_new_wrap_string (json_str);
g_assert_nonnull (json);
g_assert_false (wp_spa_json_is_unique_owner (json));
g_assert_true (wp_spa_json_is_object (json));
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"{\"name\":\"John\", \"age\":30, \"car\":null}", 37);
json = wp_spa_json_ensure_unique_owner (json);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_unique_owner (json));
}
g_assert_true (wp_spa_json_is_object (json));
g_assert_cmpmem (wp_spa_json_get_data (json), wp_spa_json_get_size (json),
"{\"name\":\"John\", \"age\":30, \"car\":null}", 37);
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "name");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "John");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "age");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 30);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "car");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_null (j));
g_value_unset (&next);
}
}
static void
test_spa_json_spa_format (void)
{
g_autoptr (WpSpaJson) json = NULL;
const gchar json_str[] = "{ name = John age:30, \"car\" null }";
json = wp_spa_json_new_wrap_string (json_str);
g_assert_nonnull (json);
g_assert_true (wp_spa_json_is_object (json));
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_false (wp_spa_json_is_string (j)); // FALSE because no quotes
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "name");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_false (wp_spa_json_is_string (j)); // FALSE because no quotes
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "John");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_false (wp_spa_json_is_string (j)); // FALSE because no quotes
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "age");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_int (j));
gint32 v = 0;
g_assert_true (wp_spa_json_parse_int (j, &v));
g_assert_cmpint (v, ==, 30);
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_string (j));
g_autofree gchar *v = wp_spa_json_parse_string (j);
g_assert_nonnull (v);
g_assert_cmpstr (v, ==, "car");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *j = g_value_get_boxed (&next);
g_assert_nonnull (j);
g_assert_true (wp_spa_json_is_null (j));
g_value_unset (&next);
}
}
static void
test_spa_json_to_string (void)
{
const gchar json_str[] = "[{\"key0\":\"val0\"}, {\"key1\":\"val1\"}]";
g_autoptr (WpSpaJson) json = wp_spa_json_new_wrap_string (json_str);
g_assert_nonnull (json);
{
g_autofree gchar *str = wp_spa_json_to_string (json);
g_assert_cmpstr (str, ==, wp_spa_json_get_data (json));
g_assert_cmpstr (str, ==, json_str);
}
g_autoptr (WpIterator) it = wp_spa_json_new_iterator (json);
g_assert_nonnull (it);
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *o = g_value_get_boxed (&next);
g_assert_nonnull (o);
g_assert_true (wp_spa_json_is_object (o));
g_autofree gchar *str = wp_spa_json_to_string (o);
g_assert_cmpstr (str, ==, "{\"key0\":\"val0\"}");
g_assert_cmpstr (str, !=, wp_spa_json_get_data (o));
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_array ();
wp_spa_json_builder_add_json (b, o);
g_autoptr (WpSpaJson) json2 = wp_spa_json_builder_end (b);
g_autofree gchar *str2 = wp_spa_json_to_string (json2);
g_assert_cmpstr (str2, ==, wp_spa_json_get_data (json2));
g_assert_cmpstr (str2, ==, "[{\"key0\":\"val0\"}]");
g_value_unset (&next);
}
{
GValue next = G_VALUE_INIT;
g_assert_true (wp_iterator_next (it, &next));
WpSpaJson *o = g_value_get_boxed (&next);
g_assert_nonnull (o);
g_assert_true (wp_spa_json_is_object (o));
g_autofree gchar *str = wp_spa_json_to_string (o);
g_assert_cmpstr (str, ==, "{\"key1\":\"val1\"}");
g_assert_cmpstr (str, !=, wp_spa_json_get_data (o));
g_autoptr (WpSpaJsonBuilder) b = wp_spa_json_builder_new_array ();
wp_spa_json_builder_add_json (b, o);
g_autoptr (WpSpaJson) json2 = wp_spa_json_builder_end (b);
g_autofree gchar *str2 = wp_spa_json_to_string (json2);
g_assert_cmpstr (str2, ==, wp_spa_json_get_data (json2));
g_assert_cmpstr (str2, ==, "[{\"key1\":\"val1\"}]");
g_value_unset (&next);
}
}
static void
test_spa_json_undefined_parser (void)
{
const gchar json_str[] = "key0 = val0, key.array = [ val1 val2 ], "
"key.object = { key-boolean = false, key-int = 8, key-array = [ 2 4 ] }";
g_autoptr (WpSpaJson) json = wp_spa_json_new_wrap_string (json_str);
g_assert_nonnull (json);
g_assert_false (wp_spa_json_is_container (json));
g_autoptr (WpSpaJsonParser) p = wp_spa_json_parser_new_undefined (json);
g_assert_nonnull (p);
{
g_autofree gchar *k = wp_spa_json_parser_get_string (p);
g_assert_cmpstr (k, ==, "key0");
}
{
g_autofree gchar *v = wp_spa_json_parser_get_string (p);
g_assert_cmpstr (v, ==, "val0");
}
{
g_autofree gchar *k = wp_spa_json_parser_get_string (p);
g_assert_cmpstr (k, ==, "key.array");
}
{
g_autoptr (WpSpaJson) v = wp_spa_json_parser_get_json (p);
g_autofree gchar *str = wp_spa_json_to_string (v);
g_assert_cmpstr (str, ==, "[ val1 val2 ]");
g_assert_true (wp_spa_json_is_array (v));
}
{
g_autofree gchar *k = wp_spa_json_parser_get_string (p);
g_assert_cmpstr (k, ==, "key.object");
}
{
g_autoptr (WpSpaJson) v = wp_spa_json_parser_get_json (p);
g_autofree gchar *str = wp_spa_json_to_string (v);
g_assert_cmpstr (str, ==, "{ key-boolean = false, key-int = 8, key-array = [ 2 4 ] }");
g_assert_true (wp_spa_json_is_object (v));
}
{
g_autofree gchar *k = wp_spa_json_parser_get_string (p);
g_assert_null (k);
}
{
g_autofree gchar *k = wp_spa_json_parser_get_string (p);
g_assert_null (k);
}
}
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_log_set_writer_func (wp_log_writer_default, NULL, NULL);
g_test_add_func ("/wp/spa-json/basic", test_spa_json_basic);
g_test_add_func ("/wp/spa-json/array-builder-parser-iterator",
test_spa_json_array_builder_parser_iterator);
g_test_add_func ("/wp/spa-json/object-builder-parser-iterator",
test_spa_json_object_builder_parser_iterator);
g_test_add_func ("/wp/spa-json/nested", test_spa_json_nested);
g_test_add_func ("/wp/spa-json/nested2", test_spa_json_nested2);
g_test_add_func ("/wp/spa-json/nested3", test_spa_json_nested3);
g_test_add_func ("/wp/spa-json/ownership", test_spa_json_ownership);
g_test_add_func ("/wp/spa-json/spa-format", test_spa_json_spa_format);
g_test_add_func ("/wp/spa-json/to-string", test_spa_json_to_string);
g_test_add_func ("/wp/spa-json/undefined-parser",
test_spa_json_undefined_parser);
return g_test_run ();
}