diff options
| author | 2023-01-16 04:25:52 +0100 | |
|---|---|---|
| committer | 2023-01-16 04:25:52 +0100 | |
| commit | d886885b0ec2506fa2caf0986a3d0e496fea91c2 (patch) | |
| tree | 58bc4bcd1963ea885abd60a65bf87a2685526714 /test | |
| parent | 47a7fbe438ee7350a2b151e007f07043ef596775 (diff) | |
| download | libplist-d886885b0ec2506fa2caf0986a3d0e496fea91c2.tar.gz libplist-d886885b0ec2506fa2caf0986a3d0e496fea91c2.tar.bz2 | |
Rename PLIST_UINT to PLIST_INT and add plist_new_int() and plist_get_int_val()
This properly supports getting and setting signed or unsigned integer values.
Also, a new helper function plist_int_val_is_negative() was added to determine if
a given #PLIST_INT node has a negative value or not.
The old type PLIST_UINT is defined as a macro with the value of PLIST_INT for
backwards compatibility.
This commit also adds int vs. uint support to the C++ interface, and the python
bindings in a hopefully useful way.
Diffstat (limited to 'test')
| -rw-r--r-- | test/Makefile.am | 5 | ||||
| -rw-r--r-- | test/integer_set.c | 130 | ||||
| -rwxr-xr-x | test/integer_set.test | 5 | 
3 files changed, 140 insertions, 0 deletions
| diff --git a/test/Makefile.am b/test/Makefile.am index 66543ea..5326317 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -8,6 +8,7 @@ AM_LDFLAGS =  noinst_PROGRAMS = \  	plist_cmp \  	plist_test \ +	integer_set_test \  	plist_btest \  	plist_jtest \  	plist_otest @@ -20,6 +21,9 @@ plist_cmp_LDADD = \  plist_test_SOURCES = plist_test.c  plist_test_LDADD = $(top_builddir)/src/libplist-2.0.la +integer_set_test_SOURCES = integer_set.c +integer_set_test_LDADD = $(top_builddir)/src/libplist-2.0.la +  plist_btest_SOURCES = plist_btest.c  plist_btest_LDADD = $(top_builddir)/src/libplist-2.0.la @@ -54,6 +58,7 @@ TESTS = \  	refsize.test \  	malformed_dict.test \  	uid.test \ +	integer_set.test \  	json1.test \  	json2.test \  	json3.test \ diff --git a/test/integer_set.c b/test/integer_set.c new file mode 100644 index 0000000..e25648f --- /dev/null +++ b/test/integer_set.c @@ -0,0 +1,130 @@ +#include <stdio.h> +#include <stdint.h> +#include <inttypes.h> +#include <stdlib.h> + +#include <string.h> +#include <plist/plist.h> + +void print_plist(plist_t pl) +{ +	char *xml = NULL; +	uint32_t xlen = 0; +	plist_to_xml(pl, &xml, &xlen); +	if (xml) { +		printf("%s\n", xml); +	} +	free(xml); +} + +int main(int argc, char** argv) +{ +	int err = 0; +	char *xml = NULL; +	uint32_t xlen = 0; +	plist_t iii = plist_new_int(0); + +	/* test 1 */ +	plist_set_uint_val(iii, 0x8000000000000000LL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>9223372036854775808</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match1) != 0) { +		printf("ERROR: plist_set_uint_val with 0x8000000000000000LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_uint_val with 0x8000000000000000LL\n"); +	} +	free(xml); +	xml = NULL; + +	/* test 2 */ +	plist_set_int_val(iii, 0x8000000000000000LL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>-9223372036854775808</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match2) != 0) { +		printf("ERROR: plist_set_int_val with 0x8000000000000000LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_int_val with 0x8000000000000000LL\n"); +	} +	free(xml); +	xml = NULL; + +	/* test 3 */ +	plist_set_uint_val(iii, (uint64_t)-1LL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>18446744073709551615</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match3) != 0) { +		printf("ERROR: plist_set_uint_val with (uint64_t)-1LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_uint_val with (uint64_t)-1LL\n"); +	} +	free(xml); +	xml = NULL; + +	/* test 4 */ +	plist_set_int_val(iii, -1LL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match4 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>-1</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match4) != 0) { +		printf("ERROR: plist_set_int_val with -1LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_int_val with -1LL\n"); +	} +	free(xml); +	xml = NULL; + +	/* test 5 */ +	plist_set_uint_val(iii, 0x8000000000000001LL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match5 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>9223372036854775809</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match5) != 0) { +		printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n"); +	} +	free(xml); +	xml = NULL; + +	/* test 6 */ +	plist_set_uint_val(iii, 18446744073709551615uLL); +	plist_to_xml(iii, &xml, &xlen); +	const char* match6 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +		"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" +		"<plist version=\"1.0\">\n" +		"<integer>18446744073709551615</integer>\n" +		"</plist>\n"; +	if (strcmp(xml, match6) != 0) { +		printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n"); +		err++; +	} else { +		printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n"); +	} +	free(xml); +	xml = NULL; + +	return (err > 0) ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/test/integer_set.test b/test/integer_set.test new file mode 100755 index 0000000..b917663 --- /dev/null +++ b/test/integer_set.test @@ -0,0 +1,5 @@ +## -*- sh -*- + +set -e + +$top_builddir/test/integer_set_test | 
