1*5dd36a3bSchristos /*
2*5dd36a3bSchristos * Copyright (c) 2014-2019 Pavel Kalvoda <me@pavelkalvoda.com>
3*5dd36a3bSchristos *
4*5dd36a3bSchristos * libcbor is free software; you can redistribute it and/or modify
5*5dd36a3bSchristos * it under the terms of the MIT license. See LICENSE for details.
6*5dd36a3bSchristos */
7*5dd36a3bSchristos
8*5dd36a3bSchristos #include <setjmp.h>
9*5dd36a3bSchristos #include <stdarg.h>
10*5dd36a3bSchristos #include <stddef.h>
11*5dd36a3bSchristos
12*5dd36a3bSchristos #include <cmocka.h>
13*5dd36a3bSchristos
14*5dd36a3bSchristos #include "assertions.h"
15*5dd36a3bSchristos #include "cbor.h"
16*5dd36a3bSchristos
17*5dd36a3bSchristos cbor_item_t *item, *copy, *tmp;
18*5dd36a3bSchristos
test_uints(void ** state)19*5dd36a3bSchristos static void test_uints(void **state) {
20*5dd36a3bSchristos item = cbor_build_uint8(10);
21*5dd36a3bSchristos assert_uint8(copy = cbor_copy(item), 10);
22*5dd36a3bSchristos cbor_decref(&item);
23*5dd36a3bSchristos cbor_decref(©);
24*5dd36a3bSchristos
25*5dd36a3bSchristos item = cbor_build_uint16(10);
26*5dd36a3bSchristos assert_uint16(copy = cbor_copy(item), 10);
27*5dd36a3bSchristos cbor_decref(&item);
28*5dd36a3bSchristos cbor_decref(©);
29*5dd36a3bSchristos
30*5dd36a3bSchristos item = cbor_build_uint32(10);
31*5dd36a3bSchristos assert_uint32(copy = cbor_copy(item), 10);
32*5dd36a3bSchristos cbor_decref(&item);
33*5dd36a3bSchristos cbor_decref(©);
34*5dd36a3bSchristos
35*5dd36a3bSchristos item = cbor_build_uint64(10);
36*5dd36a3bSchristos assert_uint64(copy = cbor_copy(item), 10);
37*5dd36a3bSchristos cbor_decref(&item);
38*5dd36a3bSchristos cbor_decref(©);
39*5dd36a3bSchristos }
40*5dd36a3bSchristos
test_negints(void ** state)41*5dd36a3bSchristos static void test_negints(void **state) {
42*5dd36a3bSchristos item = cbor_build_negint8(10);
43*5dd36a3bSchristos assert_true(cbor_get_uint8(copy = cbor_copy(item)) == 10);
44*5dd36a3bSchristos cbor_decref(&item);
45*5dd36a3bSchristos cbor_decref(©);
46*5dd36a3bSchristos
47*5dd36a3bSchristos item = cbor_build_negint16(10);
48*5dd36a3bSchristos assert_true(cbor_get_uint16(copy = cbor_copy(item)) == 10);
49*5dd36a3bSchristos cbor_decref(&item);
50*5dd36a3bSchristos cbor_decref(©);
51*5dd36a3bSchristos
52*5dd36a3bSchristos item = cbor_build_negint32(10);
53*5dd36a3bSchristos assert_true(cbor_get_uint32(copy = cbor_copy(item)) == 10);
54*5dd36a3bSchristos cbor_decref(&item);
55*5dd36a3bSchristos cbor_decref(©);
56*5dd36a3bSchristos
57*5dd36a3bSchristos item = cbor_build_negint64(10);
58*5dd36a3bSchristos assert_true(cbor_get_uint64(copy = cbor_copy(item)) == 10);
59*5dd36a3bSchristos cbor_decref(&item);
60*5dd36a3bSchristos cbor_decref(©);
61*5dd36a3bSchristos }
62*5dd36a3bSchristos
test_def_bytestring(void ** state)63*5dd36a3bSchristos static void test_def_bytestring(void **state) {
64*5dd36a3bSchristos item = cbor_build_bytestring((cbor_data) "abc", 3);
65*5dd36a3bSchristos assert_memory_equal(cbor_bytestring_handle(copy = cbor_copy(item)),
66*5dd36a3bSchristos cbor_bytestring_handle(item), 3);
67*5dd36a3bSchristos cbor_decref(&item);
68*5dd36a3bSchristos cbor_decref(©);
69*5dd36a3bSchristos }
70*5dd36a3bSchristos
test_indef_bytestring(void ** state)71*5dd36a3bSchristos static void test_indef_bytestring(void **state) {
72*5dd36a3bSchristos item = cbor_new_indefinite_bytestring();
73*5dd36a3bSchristos cbor_bytestring_add_chunk(
74*5dd36a3bSchristos item, cbor_move(cbor_build_bytestring((cbor_data) "abc", 3)));
75*5dd36a3bSchristos copy = cbor_copy(item);
76*5dd36a3bSchristos
77*5dd36a3bSchristos assert_int_equal(cbor_bytestring_chunk_count(item),
78*5dd36a3bSchristos cbor_bytestring_chunk_count(copy));
79*5dd36a3bSchristos
80*5dd36a3bSchristos assert_memory_equal(
81*5dd36a3bSchristos cbor_bytestring_handle(cbor_bytestring_chunks_handle(copy)[0]), "abc", 3);
82*5dd36a3bSchristos cbor_decref(&item);
83*5dd36a3bSchristos cbor_decref(©);
84*5dd36a3bSchristos }
85*5dd36a3bSchristos
test_def_string(void ** state)86*5dd36a3bSchristos static void test_def_string(void **state) {
87*5dd36a3bSchristos item = cbor_build_string("abc");
88*5dd36a3bSchristos assert_memory_equal(cbor_string_handle(copy = cbor_copy(item)),
89*5dd36a3bSchristos cbor_string_handle(item), 3);
90*5dd36a3bSchristos cbor_decref(&item);
91*5dd36a3bSchristos cbor_decref(©);
92*5dd36a3bSchristos }
93*5dd36a3bSchristos
test_indef_string(void ** state)94*5dd36a3bSchristos static void test_indef_string(void **state) {
95*5dd36a3bSchristos item = cbor_new_indefinite_string();
96*5dd36a3bSchristos cbor_string_add_chunk(item, cbor_move(cbor_build_string("abc")));
97*5dd36a3bSchristos copy = cbor_copy(item);
98*5dd36a3bSchristos
99*5dd36a3bSchristos assert_int_equal(cbor_string_chunk_count(item),
100*5dd36a3bSchristos cbor_string_chunk_count(copy));
101*5dd36a3bSchristos
102*5dd36a3bSchristos assert_memory_equal(cbor_string_handle(cbor_string_chunks_handle(copy)[0]),
103*5dd36a3bSchristos "abc", 3);
104*5dd36a3bSchristos cbor_decref(&item);
105*5dd36a3bSchristos cbor_decref(©);
106*5dd36a3bSchristos }
107*5dd36a3bSchristos
test_def_array(void ** state)108*5dd36a3bSchristos static void test_def_array(void **state) {
109*5dd36a3bSchristos item = cbor_new_definite_array(1);
110*5dd36a3bSchristos cbor_array_push(item, cbor_move(cbor_build_uint8(42)));
111*5dd36a3bSchristos
112*5dd36a3bSchristos assert_uint8(tmp = cbor_array_get(copy = cbor_copy(item), 0), 42);
113*5dd36a3bSchristos cbor_decref(&item);
114*5dd36a3bSchristos cbor_decref(©);
115*5dd36a3bSchristos cbor_decref(&tmp);
116*5dd36a3bSchristos }
117*5dd36a3bSchristos
test_indef_array(void ** state)118*5dd36a3bSchristos static void test_indef_array(void **state) {
119*5dd36a3bSchristos item = cbor_new_indefinite_array();
120*5dd36a3bSchristos cbor_array_push(item, cbor_move(cbor_build_uint8(42)));
121*5dd36a3bSchristos
122*5dd36a3bSchristos assert_uint8(tmp = cbor_array_get(copy = cbor_copy(item), 0), 42);
123*5dd36a3bSchristos cbor_decref(&item);
124*5dd36a3bSchristos cbor_decref(©);
125*5dd36a3bSchristos cbor_decref(&tmp);
126*5dd36a3bSchristos }
127*5dd36a3bSchristos
test_def_map(void ** state)128*5dd36a3bSchristos static void test_def_map(void **state) {
129*5dd36a3bSchristos item = cbor_new_definite_map(1);
130*5dd36a3bSchristos cbor_map_add(item, (struct cbor_pair){
131*5dd36a3bSchristos .key = cbor_move(cbor_build_uint8(42)),
132*5dd36a3bSchristos .value = cbor_move(cbor_build_uint8(43)),
133*5dd36a3bSchristos });
134*5dd36a3bSchristos
135*5dd36a3bSchristos assert_uint8(cbor_map_handle(copy = cbor_copy(item))[0].key, 42);
136*5dd36a3bSchristos
137*5dd36a3bSchristos cbor_decref(&item);
138*5dd36a3bSchristos cbor_decref(©);
139*5dd36a3bSchristos }
140*5dd36a3bSchristos
test_indef_map(void ** state)141*5dd36a3bSchristos static void test_indef_map(void **state) {
142*5dd36a3bSchristos item = cbor_new_indefinite_map(1);
143*5dd36a3bSchristos cbor_map_add(item, (struct cbor_pair){
144*5dd36a3bSchristos .key = cbor_move(cbor_build_uint8(42)),
145*5dd36a3bSchristos .value = cbor_move(cbor_build_uint8(43)),
146*5dd36a3bSchristos });
147*5dd36a3bSchristos
148*5dd36a3bSchristos assert_uint8(cbor_map_handle(copy = cbor_copy(item))[0].key, 42);
149*5dd36a3bSchristos
150*5dd36a3bSchristos cbor_decref(&item);
151*5dd36a3bSchristos cbor_decref(©);
152*5dd36a3bSchristos }
153*5dd36a3bSchristos
test_tag(void ** state)154*5dd36a3bSchristos static void test_tag(void **state) {
155*5dd36a3bSchristos item = cbor_build_tag(10, cbor_move(cbor_build_uint8(42)));
156*5dd36a3bSchristos
157*5dd36a3bSchristos assert_uint8(cbor_tag_item(copy = cbor_copy(item)), 42);
158*5dd36a3bSchristos
159*5dd36a3bSchristos cbor_decref(&item);
160*5dd36a3bSchristos cbor_decref(©);
161*5dd36a3bSchristos }
162*5dd36a3bSchristos
test_ctrls(void ** state)163*5dd36a3bSchristos static void test_ctrls(void **state) {
164*5dd36a3bSchristos item = cbor_new_null();
165*5dd36a3bSchristos assert_true(cbor_is_null(copy = cbor_copy(item)));
166*5dd36a3bSchristos cbor_decref(&item);
167*5dd36a3bSchristos cbor_decref(©);
168*5dd36a3bSchristos }
169*5dd36a3bSchristos
test_floats(void ** state)170*5dd36a3bSchristos static void test_floats(void **state) {
171*5dd36a3bSchristos item = cbor_build_float2(3.14f);
172*5dd36a3bSchristos assert_true(cbor_float_get_float2(copy = cbor_copy(item)) ==
173*5dd36a3bSchristos cbor_float_get_float2(item));
174*5dd36a3bSchristos cbor_decref(&item);
175*5dd36a3bSchristos cbor_decref(©);
176*5dd36a3bSchristos
177*5dd36a3bSchristos item = cbor_build_float4(3.14f);
178*5dd36a3bSchristos assert_true(cbor_float_get_float4(copy = cbor_copy(item)) ==
179*5dd36a3bSchristos cbor_float_get_float4(item));
180*5dd36a3bSchristos cbor_decref(&item);
181*5dd36a3bSchristos cbor_decref(©);
182*5dd36a3bSchristos
183*5dd36a3bSchristos item = cbor_build_float8(3.14);
184*5dd36a3bSchristos assert_true(cbor_float_get_float8(copy = cbor_copy(item)) ==
185*5dd36a3bSchristos cbor_float_get_float8(item));
186*5dd36a3bSchristos cbor_decref(&item);
187*5dd36a3bSchristos cbor_decref(©);
188*5dd36a3bSchristos }
189*5dd36a3bSchristos
main(void)190*5dd36a3bSchristos int main(void) {
191*5dd36a3bSchristos const struct CMUnitTest tests[] = {
192*5dd36a3bSchristos
193*5dd36a3bSchristos cmocka_unit_test(test_uints),
194*5dd36a3bSchristos cmocka_unit_test(test_negints),
195*5dd36a3bSchristos cmocka_unit_test(test_def_bytestring),
196*5dd36a3bSchristos cmocka_unit_test(test_indef_bytestring),
197*5dd36a3bSchristos cmocka_unit_test(test_def_string),
198*5dd36a3bSchristos cmocka_unit_test(test_indef_string),
199*5dd36a3bSchristos cmocka_unit_test(test_def_array),
200*5dd36a3bSchristos cmocka_unit_test(test_indef_array),
201*5dd36a3bSchristos cmocka_unit_test(test_def_map),
202*5dd36a3bSchristos cmocka_unit_test(test_indef_map),
203*5dd36a3bSchristos cmocka_unit_test(test_tag),
204*5dd36a3bSchristos cmocka_unit_test(test_ctrls),
205*5dd36a3bSchristos cmocka_unit_test(test_floats)};
206*5dd36a3bSchristos return cmocka_run_group_tests(tests, NULL, NULL);
207*5dd36a3bSchristos }
208