1 // Copyright 2011 Juri Glass, Mathias Runge, Nadim El Sayed
2 // DAI-Labor, TU-Berlin
3 //
4 // This file is part of libSML.
5 //
6 // libSML is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // libSML is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with libSML.  If not, see <http://www.gnu.org/licenses/>.
18 
19 #include "../unity/unity_fixture.h"
20 #include "test_helper.h"
21 #include <sml/sml_value.h>
22 
23 TEST_GROUP(sml_value);
24 
25 extern sml_buffer *buf;
26 
TEST_SETUP(sml_value)27 TEST_SETUP(sml_value) {
28 	buf = sml_buffer_init(512);
29 }
30 
TEST_TEAR_DOWN(sml_value)31 TEST_TEAR_DOWN(sml_value) {
32 	sml_buffer_free(buf);
33 }
34 
TEST(sml_value,init)35 TEST(sml_value, init) {
36 	sml_value *v = sml_value_init();
37 	TEST_ASSERT_NOT_NULL(v);
38 	sml_value_free( v );
39 }
40 
TEST(sml_value,parse_octet_string)41 TEST(sml_value, parse_octet_string) {
42 	hex2binary("0648616C6C6F", sml_buf_get_current_buf(buf));
43 	sml_value *v = sml_value_parse(buf);
44 
45 	TEST_ASSERT_NOT_NULL(v);
46 	TEST_ASSERT_EQUAL(SML_TYPE_OCTET_STRING, v->type);
47 	expected_octet_string(v->data.bytes, "Hallo", 5);
48 
49 	sml_value_free( v );
50 }
51 
TEST(sml_value,parse_boolean)52 TEST(sml_value, parse_boolean) {
53 	hex2binary("4200", sml_buf_get_current_buf(buf));
54 	sml_value *v = sml_value_parse(buf);
55 
56 	TEST_ASSERT_NOT_NULL(v);
57 	TEST_ASSERT_EQUAL(SML_TYPE_BOOLEAN, v->type);
58 	TEST_ASSERT_FALSE(*(v->data.boolean));
59 
60 	sml_value_free( v );
61 }
62 
TEST(sml_value,parse_unsigned32)63 TEST(sml_value, parse_unsigned32) {
64 	hex2binary("6500000001", sml_buf_get_current_buf(buf));
65 	sml_value *v = sml_value_parse(buf);
66 
67 	TEST_ASSERT_NOT_NULL(v);
68 	TEST_ASSERT_EQUAL(1, *(v->data.uint32));
69 	TEST_ASSERT_EQUAL((SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32), v->type);
70 	TEST_ASSERT_EQUAL(5, buf->cursor);
71 
72 	sml_value_free( v );
73 }
74 
TEST(sml_value,parse_integer64_fewer_bytes)75 TEST(sml_value, parse_integer64_fewer_bytes) {
76 	hex2binary("58FFFFFFFFFFFF0F", sml_buf_get_current_buf(buf));
77 	sml_value *v = sml_value_parse(buf);
78 
79 	TEST_ASSERT_EQUAL(-241, *(v->data.int64));
80 	TEST_ASSERT_EQUAL((SML_TYPE_INTEGER | SML_TYPE_NUMBER_64), v->type);
81 
82 	sml_value_free( v );
83 }
84 
TEST(sml_value,parse_optional)85 TEST(sml_value, parse_optional) {
86 	hex2binary("01", sml_buf_get_current_buf(buf));
87 	sml_value *v = sml_value_parse(buf);
88 
89 	TEST_ASSERT_NULL(v);
90 	TEST_ASSERT_EQUAL(1, buf->cursor);
91 
92 	sml_value_free( v );
93 }
94 
TEST(sml_value,write_octet_string)95 TEST(sml_value, write_octet_string) {
96 	sml_value *v = sml_value_init();
97 	v->type = SML_TYPE_OCTET_STRING;
98 	v->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5);
99 
100 	sml_value_write(v, buf);
101 	expected_buf(buf, "0648616C6C6F", 6);
102 
103 	sml_value_free( v );
104 }
105 
TEST(sml_value,write_boolean)106 TEST(sml_value, write_boolean) {
107 	sml_value *v = sml_value_init();
108 	v->type = SML_TYPE_BOOLEAN;
109 	v->data.boolean = sml_boolean_init(SML_BOOLEAN_FALSE);
110 
111 	sml_value_write(v, buf);
112 	expected_buf(buf, "4200", 2);
113 
114 	sml_value_free( v );
115 }
116 
TEST(sml_value,write_unsigned32)117 TEST(sml_value, write_unsigned32) {
118 	sml_value *v = sml_value_init();
119 	v->type = SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32;
120 	v->data.uint32 = sml_u32_init(42);
121 
122 	sml_value_write(v, buf);
123 	expected_buf(buf, "650000002A", 5);
124 
125 	sml_value_free( v );
126 }
127 
TEST(sml_value,write_integer16)128 TEST(sml_value, write_integer16) {
129 	sml_value *v = sml_value_init();
130 	v->type = SML_TYPE_INTEGER | SML_TYPE_NUMBER_16;
131 	v->data.int16 = sml_i16_init(-5);
132 
133 	sml_value_write(v, buf);
134 	expected_buf(buf, "53FFFB", 3);
135 
136 	sml_value_free( v );
137 }
138 
TEST(sml_value,write_optional)139 TEST(sml_value, write_optional) {
140 	sml_value_write(0, buf);
141 	expected_buf(buf, "01", 1);
142 }
143 
TEST_GROUP_RUNNER(sml_value)144 TEST_GROUP_RUNNER(sml_value) {
145 	RUN_TEST_CASE(sml_value, init);
146 	RUN_TEST_CASE(sml_value, parse_octet_string);
147 	RUN_TEST_CASE(sml_value, parse_boolean);
148 	RUN_TEST_CASE(sml_value, parse_unsigned32);
149 	RUN_TEST_CASE(sml_value, parse_integer64_fewer_bytes);
150 	RUN_TEST_CASE(sml_value, parse_optional);
151 	RUN_TEST_CASE(sml_value, write_octet_string);
152 	RUN_TEST_CASE(sml_value, write_boolean);
153 	RUN_TEST_CASE(sml_value, write_unsigned32);
154 	RUN_TEST_CASE(sml_value, write_integer16);
155 	RUN_TEST_CASE(sml_value, write_optional);
156 }
157 
158