123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /*
- * Copyright (c) 2009-2016 Petri Lehtinen <[email protected]>
- *
- * Jansson is free software; you can redistribute it and/or modify
- * it under the terms of the MIT license. See LICENSE for details.
- */
- #include "util.h"
- #include <jansson.h>
- static void test_equal_simple() {
- json_t *value1, *value2;
- if (json_equal(NULL, NULL))
- fail("json_equal fails for two NULLs");
- value1 = json_true();
- if (json_equal(value1, NULL) || json_equal(NULL, value1))
- fail("json_equal fails for NULL");
- /* this covers true, false and null as they are singletons */
- if (!json_equal(value1, value1))
- fail("identical objects are not equal");
- json_decref(value1);
- /* integer */
- value1 = json_integer(1);
- value2 = json_integer(1);
- if (!value1 || !value2)
- fail("unable to create integers");
- if (!json_equal(value1, value2))
- fail("json_equal fails for two equal integers");
- json_decref(value2);
- value2 = json_integer(2);
- if (!value2)
- fail("unable to create an integer");
- if (json_equal(value1, value2))
- fail("json_equal fails for two inequal integers");
- json_decref(value1);
- json_decref(value2);
- /* real */
- value1 = json_real(1.2);
- value2 = json_real(1.2);
- if (!value1 || !value2)
- fail("unable to create reals");
- if (!json_equal(value1, value2))
- fail("json_equal fails for two equal reals");
- json_decref(value2);
- value2 = json_real(3.141592);
- if (!value2)
- fail("unable to create an real");
- if (json_equal(value1, value2))
- fail("json_equal fails for two inequal reals");
- json_decref(value1);
- json_decref(value2);
- /* string */
- value1 = json_string("foo");
- value2 = json_string("foo");
- if (!value1 || !value2)
- fail("unable to create strings");
- if (!json_equal(value1, value2))
- fail("json_equal fails for two equal strings");
- json_decref(value2);
- value2 = json_string("bar");
- if (!value2)
- fail("unable to create an string");
- if (json_equal(value1, value2))
- fail("json_equal fails for two inequal strings");
- json_decref(value2);
- value2 = json_string("bar2");
- if (!value2)
- fail("unable to create an string");
- if (json_equal(value1, value2))
- fail("json_equal fails for two inequal length strings");
- json_decref(value1);
- json_decref(value2);
- }
- static void test_equal_array() {
- json_t *array1, *array2;
- array1 = json_array();
- array2 = json_array();
- if (!array1 || !array2)
- fail("unable to create arrays");
- if (!json_equal(array1, array2))
- fail("json_equal fails for two empty arrays");
- json_array_append_new(array1, json_integer(1));
- json_array_append_new(array2, json_integer(1));
- json_array_append_new(array1, json_string("foo"));
- json_array_append_new(array2, json_string("foo"));
- json_array_append_new(array1, json_integer(2));
- json_array_append_new(array2, json_integer(2));
- if (!json_equal(array1, array2))
- fail("json_equal fails for two equal arrays");
- json_array_remove(array2, 2);
- if (json_equal(array1, array2))
- fail("json_equal fails for two inequal arrays");
- json_array_append_new(array2, json_integer(3));
- if (json_equal(array1, array2))
- fail("json_equal fails for two inequal arrays");
- json_decref(array1);
- json_decref(array2);
- }
- static void test_equal_object() {
- json_t *object1, *object2;
- object1 = json_object();
- object2 = json_object();
- if (!object1 || !object2)
- fail("unable to create objects");
- if (!json_equal(object1, object2))
- fail("json_equal fails for two empty objects");
- json_object_set_new(object1, "a", json_integer(1));
- json_object_set_new(object2, "a", json_integer(1));
- json_object_set_new(object1, "b", json_string("foo"));
- json_object_set_new(object2, "b", json_string("foo"));
- json_object_set_new(object1, "c", json_integer(2));
- json_object_set_new(object2, "c", json_integer(2));
- if (!json_equal(object1, object2))
- fail("json_equal fails for two equal objects");
- json_object_del(object2, "c");
- if (json_equal(object1, object2))
- fail("json_equal fails for two inequal objects");
- json_object_set_new(object2, "c", json_integer(3));
- if (json_equal(object1, object2))
- fail("json_equal fails for two inequal objects");
- json_object_del(object2, "c");
- json_object_set_new(object2, "d", json_integer(2));
- if (json_equal(object1, object2))
- fail("json_equal fails for two inequal objects");
- json_decref(object1);
- json_decref(object2);
- }
- static void test_equal_complex() {
- json_t *value1, *value2, *value3;
- const char *complex_json = "{"
- " \"integer\": 1, "
- " \"real\": 3.141592, "
- " \"string\": \"foobar\", "
- " \"true\": true, "
- " \"object\": {"
- " \"array-in-object\": [1,true,\"foo\",{}],"
- " \"object-in-object\": {\"foo\": \"bar\"}"
- " },"
- " \"array\": [\"foo\", false, null, 1.234]"
- "}";
- value1 = json_loads(complex_json, 0, NULL);
- value2 = json_loads(complex_json, 0, NULL);
- value3 = json_loads(complex_json, 0, NULL);
- if (!value1 || !value2)
- fail("unable to parse JSON");
- if (!json_equal(value1, value2))
- fail("json_equal fails for two equal objects");
- json_array_set_new(
- json_object_get(json_object_get(value2, "object"), "array-in-object"), 1,
- json_false());
- if (json_equal(value1, value2))
- fail("json_equal fails for two inequal objects");
- json_object_set_new(
- json_object_get(json_object_get(value3, "object"), "object-in-object"), "foo",
- json_string("baz"));
- if (json_equal(value1, value3))
- fail("json_equal fails for two inequal objects");
- json_decref(value1);
- json_decref(value2);
- json_decref(value3);
- }
- static void run_tests() {
- test_equal_simple();
- test_equal_array();
- test_equal_object();
- test_equal_complex();
- }
|