Blame tests/test1.c

Packit Service def718
#include <stdio.h>
Packit Service def718
#include <stdlib.h>
Packit Service def718
#include <stddef.h>
Packit Service def718
#include <string.h>
Packit Service def718
#include <assert.h>
Packit Service def718
Packit Service def718
#include "json.h"
Packit Service def718
#include "parse_flags.h"
Packit Service def718
Packit Service def718
static int sort_fn (const void *j1, const void *j2)
Packit Service def718
{
Packit Service def718
	json_object * const *jso1, * const *jso2;
Packit Service def718
	int i1, i2;
Packit Service def718
Packit Service def718
	jso1 = (json_object* const*)j1;
Packit Service def718
	jso2 = (json_object* const*)j2;
Packit Service def718
	if (!*jso1 && !*jso2)
Packit Service def718
		return 0;
Packit Service def718
	if (!*jso1)
Packit Service def718
		return -1;
Packit Service def718
	if (!*jso2)
Packit Service def718
		return 1;
Packit Service def718
Packit Service def718
	i1 = json_object_get_int(*jso1);
Packit Service def718
	i2 = json_object_get_int(*jso2);
Packit Service def718
Packit Service def718
	return i1 - i2;
Packit Service def718
}
Packit Service def718
Packit Service def718
#ifdef TEST_FORMATTED
Packit Service def718
static const char *to_json_string(json_object *obj, int flags)
Packit Service def718
{
Packit Service def718
	size_t length;
Packit Service def718
	char *copy;
Packit Service def718
	const char *result;
Packit Service def718
Packit Service def718
	result = json_object_to_json_string_length(obj, flags, &length);
Packit Service def718
	copy = strdup(result);
Packit Service def718
	if (copy == NULL)
Packit Service def718
		printf("to_json_string: Allocation failed!\n");
Packit Service def718
	else {
Packit Service def718
		result = json_object_to_json_string_ext(obj, flags);
Packit Service def718
		if (length != strlen(result))
Packit Service def718
			printf("to_json_string: Length mismatch!\n");
Packit Service def718
		if (strcmp(copy, result) != 0)
Packit Service def718
			printf("to_json_string: Comparison Failed!\n");
Packit Service def718
		free(copy);
Packit Service def718
	}
Packit Service def718
	return result;
Packit Service def718
}
Packit Service def718
#define json_object_to_json_string(obj) to_json_string(obj,sflags)
Packit Service def718
#else
Packit Service def718
/* no special define */
Packit Service def718
#endif
Packit Service def718
Packit Service def718
json_object *make_array(void);
Packit Service def718
json_object *make_array()
Packit Service def718
{
Packit Service def718
	json_object *my_array;
Packit Service def718
Packit Service def718
	my_array = json_object_new_array();
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(1));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(2));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(3));
Packit Service def718
	json_object_array_put_idx(my_array, 4, json_object_new_int(5));
Packit Service def718
	json_object_array_put_idx(my_array, 3, json_object_new_int(4));
Packit Service def718
	json_object_array_put_idx(my_array, 6, json_object_new_int(7));
Packit Service def718
Packit Service def718
	return my_array;
Packit Service def718
}
Packit Service def718
Packit Service def718
void test_array_del_idx(void);
Packit Service def718
void test_array_del_idx()
Packit Service def718
{
Packit Service def718
	int rc;
Packit Service def718
	size_t ii;
Packit Service def718
	size_t orig_array_len;
Packit Service def718
	json_object *my_array;
Packit Service def718
#ifdef TEST_FORMATTED
Packit Service def718
	int sflags = 0;
Packit Service def718
#endif
Packit Service def718
Packit Service def718
	my_array = make_array();
Packit Service def718
	orig_array_len = json_object_array_length(my_array);
Packit Service def718
Packit Service def718
	printf("my_array=\n");
Packit Service def718
	for(ii = 0; ii < json_object_array_length(my_array); ii++)
Packit Service def718
	{
Packit Service def718
		json_object *obj = json_object_array_get_idx(my_array, ii);
Packit Service def718
		printf("\t[%d]=%s\n", (int)ii, json_object_to_json_string(obj));
Packit Service def718
	}
Packit Service def718
	printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	for (ii = 0; ii < orig_array_len; ii++)
Packit Service def718
	{
Packit Service def718
		rc = json_object_array_del_idx(my_array, 0, 1);
Packit Service def718
		printf("after del_idx(0,1)=%d, my_array.to_string()=%s\n",
Packit Service def718
		       rc, json_object_to_json_string(my_array));
Packit Service def718
	}
Packit Service def718
Packit Service def718
	/* One more time, with the empty array: */
Packit Service def718
	rc = json_object_array_del_idx(my_array, 0, 1);
Packit Service def718
	printf("after del_idx(0,1)=%d, my_array.to_string()=%s\n",
Packit Service def718
	       rc, json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	json_object_put(my_array);
Packit Service def718
Packit Service def718
	/* Delete all array indexes at once */
Packit Service def718
	my_array = make_array();
Packit Service def718
	rc = json_object_array_del_idx(my_array, 0, orig_array_len);
Packit Service def718
	printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n",
Packit Service def718
	       (int)orig_array_len, rc, json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	json_object_put(my_array);
Packit Service def718
Packit Service def718
	/* Delete *more* than all array indexes at once */
Packit Service def718
	my_array = make_array();
Packit Service def718
	rc = json_object_array_del_idx(my_array, 0, orig_array_len + 1);
Packit Service def718
	printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n",
Packit Service def718
	       (int)(orig_array_len + 1), rc, json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	json_object_put(my_array);
Packit Service def718
	
Packit Service def718
	/* Delete some array indexes, then add more */
Packit Service def718
	my_array = make_array();
Packit Service def718
	rc = json_object_array_del_idx(my_array, 0, orig_array_len - 1);
Packit Service def718
	printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n",
Packit Service def718
	       (int)(orig_array_len - 1), rc, json_object_to_json_string(my_array));
Packit Service def718
	json_object_array_add(my_array, json_object_new_string("s1"));
Packit Service def718
	json_object_array_add(my_array, json_object_new_string("s2"));
Packit Service def718
	json_object_array_add(my_array, json_object_new_string("s3"));
Packit Service def718
Packit Service def718
	printf("after adding more entries, my_array.to_string()=%s\n",
Packit Service def718
	       json_object_to_json_string(my_array));
Packit Service def718
	json_object_put(my_array);
Packit Service def718
}
Packit Service def718
Packit Service def718
int main(int argc, char **argv)
Packit Service def718
{
Packit Service def718
	json_object *my_string, *my_int, *my_object, *my_array;
Packit Service def718
	size_t i;
Packit Service def718
#ifdef TEST_FORMATTED
Packit Service def718
	int sflags = 0;
Packit Service def718
#endif
Packit Service def718
Packit Service def718
	MC_SET_DEBUG(1);
Packit Service def718
Packit Service def718
#ifdef TEST_FORMATTED
Packit Service def718
	sflags = parse_flags(argc, argv);
Packit Service def718
#endif
Packit Service def718
Packit Service def718
	my_string = json_object_new_string("\t");
Packit Service def718
	printf("my_string=%s\n", json_object_get_string(my_string));
Packit Service def718
	printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
Packit Service def718
	json_object_put(my_string);
Packit Service def718
Packit Service def718
	my_string = json_object_new_string("\\");
Packit Service def718
	printf("my_string=%s\n", json_object_get_string(my_string));
Packit Service def718
	printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
Packit Service def718
	json_object_put(my_string);
Packit Service def718
Packit Service def718
	my_string = json_object_new_string("/");
Packit Service def718
	printf("my_string=%s\n", json_object_get_string(my_string));
Packit Service def718
	printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
Packit Service def718
	printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
Packit Service def718
	json_object_put(my_string);
Packit Service def718
Packit Service def718
	my_string = json_object_new_string("/foo/bar/baz");
Packit Service def718
	printf("my_string=%s\n", json_object_get_string(my_string));
Packit Service def718
	printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
Packit Service def718
	printf("my_string.to_string(NOSLASHESCAPE)=%s\n", json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
Packit Service def718
	json_object_put(my_string);
Packit Service def718
Packit Service def718
	my_string = json_object_new_string("foo");
Packit Service def718
	printf("my_string=%s\n", json_object_get_string(my_string));
Packit Service def718
	printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
Packit Service def718
Packit Service def718
	my_int = json_object_new_int(9);
Packit Service def718
	printf("my_int=%d\n", json_object_get_int(my_int));
Packit Service def718
	printf("my_int.to_string()=%s\n", json_object_to_json_string(my_int));
Packit Service def718
Packit Service def718
	my_array = json_object_new_array();
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(1));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(2));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(3));
Packit Service def718
	json_object_array_put_idx(my_array, 4, json_object_new_int(5));
Packit Service def718
	printf("my_array=\n");
Packit Service def718
	for(i=0; i < json_object_array_length(my_array); i++)
Packit Service def718
	{
Packit Service def718
		json_object *obj = json_object_array_get_idx(my_array, i);
Packit Service def718
		printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
Packit Service def718
	}
Packit Service def718
	printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	json_object_put(my_array);
Packit Service def718
Packit Service def718
	test_array_del_idx();
Packit Service def718
Packit Service def718
	my_array = json_object_new_array();
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(3));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(1));
Packit Service def718
	json_object_array_add(my_array, json_object_new_int(2));
Packit Service def718
	json_object_array_put_idx(my_array, 4, json_object_new_int(0));
Packit Service def718
	printf("my_array=\n");
Packit Service def718
	for(i=0; i < json_object_array_length(my_array); i++)
Packit Service def718
	{
Packit Service def718
		json_object *obj = json_object_array_get_idx(my_array, i);
Packit Service def718
		printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
Packit Service def718
	}
Packit Service def718
	printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
Packit Service def718
	json_object_array_sort(my_array, sort_fn);
Packit Service def718
	printf("my_array=\n");
Packit Service def718
	for(i=0; i < json_object_array_length(my_array); i++)
Packit Service def718
	{
Packit Service def718
		json_object *obj = json_object_array_get_idx(my_array, i);
Packit Service def718
		printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
Packit Service def718
	}
Packit Service def718
	printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
Packit Service def718
Packit Service def718
	my_object = json_object_new_object();
Packit Service def718
	int rc = json_object_object_add(my_object, "abc", my_object);
Packit Service def718
	if (rc != -1)
Packit Service def718
	{
Packit Service def718
		printf("ERROR: able to successfully add object to itself!\n");
Packit Service def718
		fflush(stdout);
Packit Service def718
	}
Packit Service def718
	json_object_object_add(my_object, "abc", json_object_new_int(12));
Packit Service def718
	json_object_object_add(my_object, "foo", json_object_new_string("bar"));
Packit Service def718
	json_object_object_add(my_object, "bool0", json_object_new_boolean(0));
Packit Service def718
	json_object_object_add(my_object, "bool1", json_object_new_boolean(1));
Packit Service def718
	json_object_object_add(my_object, "baz", json_object_new_string("bang"));
Packit Service def718
Packit Service def718
	json_object *baz_obj = json_object_new_string("fark");
Packit Service def718
	json_object_get(baz_obj);
Packit Service def718
	json_object_object_add(my_object, "baz", baz_obj);
Packit Service def718
	json_object_object_del(my_object, "baz");
Packit Service def718
Packit Service def718
	/* baz_obj should still be valid */
Packit Service def718
	printf("baz_obj.to_string()=%s\n", json_object_to_json_string(baz_obj));
Packit Service def718
	json_object_put(baz_obj);
Packit Service def718
Packit Service def718
	/*json_object_object_add(my_object, "arr", my_array);*/
Packit Service def718
	printf("my_object=\n");
Packit Service def718
	json_object_object_foreach(my_object, key, val)
Packit Service def718
	{
Packit Service def718
		printf("\t%s: %s\n", key, json_object_to_json_string(val));
Packit Service def718
	}
Packit Service def718
	printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object));
Packit Service def718
Packit Service def718
	json_object_put(my_string);
Packit Service def718
	json_object_put(my_int);
Packit Service def718
	json_object_put(my_object);
Packit Service def718
	json_object_put(my_array);
Packit Service def718
Packit Service def718
	return EXIT_SUCCESS;
Packit Service def718
}