summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2023-01-16 04:25:52 +0100
committerGravatar Nikias Bassen2023-01-16 04:25:52 +0100
commitd886885b0ec2506fa2caf0986a3d0e496fea91c2 (patch)
tree58bc4bcd1963ea885abd60a65bf87a2685526714 /test
parent47a7fbe438ee7350a2b151e007f07043ef596775 (diff)
downloadlibplist-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.am5
-rw-r--r--test/integer_set.c130
-rwxr-xr-xtest/integer_set.test5
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 =
8noinst_PROGRAMS = \ 8noinst_PROGRAMS = \
9 plist_cmp \ 9 plist_cmp \
10 plist_test \ 10 plist_test \
11 integer_set_test \
11 plist_btest \ 12 plist_btest \
12 plist_jtest \ 13 plist_jtest \
13 plist_otest 14 plist_otest
@@ -20,6 +21,9 @@ plist_cmp_LDADD = \
20plist_test_SOURCES = plist_test.c 21plist_test_SOURCES = plist_test.c
21plist_test_LDADD = $(top_builddir)/src/libplist-2.0.la 22plist_test_LDADD = $(top_builddir)/src/libplist-2.0.la
22 23
24integer_set_test_SOURCES = integer_set.c
25integer_set_test_LDADD = $(top_builddir)/src/libplist-2.0.la
26
23plist_btest_SOURCES = plist_btest.c 27plist_btest_SOURCES = plist_btest.c
24plist_btest_LDADD = $(top_builddir)/src/libplist-2.0.la 28plist_btest_LDADD = $(top_builddir)/src/libplist-2.0.la
25 29
@@ -54,6 +58,7 @@ TESTS = \
54 refsize.test \ 58 refsize.test \
55 malformed_dict.test \ 59 malformed_dict.test \
56 uid.test \ 60 uid.test \
61 integer_set.test \
57 json1.test \ 62 json1.test \
58 json2.test \ 63 json2.test \
59 json3.test \ 64 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 @@
1#include <stdio.h>
2#include <stdint.h>
3#include <inttypes.h>
4#include <stdlib.h>
5
6#include <string.h>
7#include <plist/plist.h>
8
9void print_plist(plist_t pl)
10{
11 char *xml = NULL;
12 uint32_t xlen = 0;
13 plist_to_xml(pl, &xml, &xlen);
14 if (xml) {
15 printf("%s\n", xml);
16 }
17 free(xml);
18}
19
20int main(int argc, char** argv)
21{
22 int err = 0;
23 char *xml = NULL;
24 uint32_t xlen = 0;
25 plist_t iii = plist_new_int(0);
26
27 /* test 1 */
28 plist_set_uint_val(iii, 0x8000000000000000LL);
29 plist_to_xml(iii, &xml, &xlen);
30 const char* match1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
31 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
32 "<plist version=\"1.0\">\n"
33 "<integer>9223372036854775808</integer>\n"
34 "</plist>\n";
35 if (strcmp(xml, match1) != 0) {
36 printf("ERROR: plist_set_uint_val with 0x8000000000000000LL failed\n");
37 err++;
38 } else {
39 printf("SUCCESS: plist_set_uint_val with 0x8000000000000000LL\n");
40 }
41 free(xml);
42 xml = NULL;
43
44 /* test 2 */
45 plist_set_int_val(iii, 0x8000000000000000LL);
46 plist_to_xml(iii, &xml, &xlen);
47 const char* match2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
48 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
49 "<plist version=\"1.0\">\n"
50 "<integer>-9223372036854775808</integer>\n"
51 "</plist>\n";
52 if (strcmp(xml, match2) != 0) {
53 printf("ERROR: plist_set_int_val with 0x8000000000000000LL failed\n");
54 err++;
55 } else {
56 printf("SUCCESS: plist_set_int_val with 0x8000000000000000LL\n");
57 }
58 free(xml);
59 xml = NULL;
60
61 /* test 3 */
62 plist_set_uint_val(iii, (uint64_t)-1LL);
63 plist_to_xml(iii, &xml, &xlen);
64 const char* match3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
65 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
66 "<plist version=\"1.0\">\n"
67 "<integer>18446744073709551615</integer>\n"
68 "</plist>\n";
69 if (strcmp(xml, match3) != 0) {
70 printf("ERROR: plist_set_uint_val with (uint64_t)-1LL failed\n");
71 err++;
72 } else {
73 printf("SUCCESS: plist_set_uint_val with (uint64_t)-1LL\n");
74 }
75 free(xml);
76 xml = NULL;
77
78 /* test 4 */
79 plist_set_int_val(iii, -1LL);
80 plist_to_xml(iii, &xml, &xlen);
81 const char* match4 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
82 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
83 "<plist version=\"1.0\">\n"
84 "<integer>-1</integer>\n"
85 "</plist>\n";
86 if (strcmp(xml, match4) != 0) {
87 printf("ERROR: plist_set_int_val with -1LL failed\n");
88 err++;
89 } else {
90 printf("SUCCESS: plist_set_int_val with -1LL\n");
91 }
92 free(xml);
93 xml = NULL;
94
95 /* test 5 */
96 plist_set_uint_val(iii, 0x8000000000000001LL);
97 plist_to_xml(iii, &xml, &xlen);
98 const char* match5 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
99 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
100 "<plist version=\"1.0\">\n"
101 "<integer>9223372036854775809</integer>\n"
102 "</plist>\n";
103 if (strcmp(xml, match5) != 0) {
104 printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n");
105 err++;
106 } else {
107 printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n");
108 }
109 free(xml);
110 xml = NULL;
111
112 /* test 6 */
113 plist_set_uint_val(iii, 18446744073709551615uLL);
114 plist_to_xml(iii, &xml, &xlen);
115 const char* match6 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
116 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
117 "<plist version=\"1.0\">\n"
118 "<integer>18446744073709551615</integer>\n"
119 "</plist>\n";
120 if (strcmp(xml, match6) != 0) {
121 printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n");
122 err++;
123 } else {
124 printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n");
125 }
126 free(xml);
127 xml = NULL;
128
129 return (err > 0) ? EXIT_FAILURE : EXIT_SUCCESS;
130}
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 @@
1## -*- sh -*-
2
3set -e
4
5$top_builddir/test/integer_set_test