exip  Alpha 0.5.4
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
check_profile.c
Go to the documentation of this file.
1 /*==================================================================*\
2 | EXIP - Embeddable EXI Processor in C |
3 |--------------------------------------------------------------------|
4 | This work is licensed under BSD 3-Clause License |
5 | The full license terms and conditions are located in LICENSE.txt |
6 \===================================================================*/
7 
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <check.h>
21 #include "procTypes.h"
22 #include "EXISerializer.h"
23 #include "EXIParser.h"
24 #include "stringManipulate.h"
25 #include "grammarGenerator.h"
26 
27 #define OUTPUT_BUFFER_SIZE 2000
28 
29 /* BEGIN: Interoperability tests */
30 
31 START_TEST (test_noLearning01)
32 {
33  EXIStream testStrm;
34  Parser testParser;
35  String uri;
36  String ln;
37  QName qname= {&uri, &ln};
38  String chVal;
39  char buf[OUTPUT_BUFFER_SIZE];
40  errorCode tmp_err_code = EXIP_UNEXPECTED_ERROR;
41  BinaryBuffer buffer;
42  EXITypeClass valueType;
43 
44  buffer.buf = buf;
45  buffer.bufContent = 0;
46  buffer.bufLen = OUTPUT_BUFFER_SIZE;
47  buffer.ioStrm.readWriteToStream = NULL;
48  buffer.ioStrm.stream = NULL;
49 
50  // Serialization steps:
51 
52  // I: First initialize the header of the stream
53  serialize.initHeader(&testStrm);
54 
55  // II: Set any options in the header, if different from the defaults
56  testStrm.header.has_options = TRUE;
58 
59  // III: Define an external stream for the output if any
60 
61  // IV: Initialize the stream
62  tmp_err_code = serialize.initStream(&testStrm, buffer, NULL);
63  fail_unless (tmp_err_code == EXIP_OK, "initStream returns an error code %d", tmp_err_code);
64 
65  // V: Start building the stream step by step: header, document, element etc...
66  tmp_err_code = serialize.exiHeader(&testStrm);
67  fail_unless (tmp_err_code == EXIP_OK, "serialize.exiHeader returns an error code %d", tmp_err_code);
68 
69  tmp_err_code = serialize.startDocument(&testStrm);
70  fail_unless (tmp_err_code == EXIP_OK, "serialize.startDocument returns an error code %d", tmp_err_code);
71 
72  getEmptyString(&uri);
73  tmp_err_code += asciiToString("root", &ln, &testStrm.memList, FALSE);
74  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
75  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
76 
77  tmp_err_code += asciiToString("a", &ln, &testStrm.memList, FALSE);
78  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
79  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
80 
81  tmp_err_code += asciiToString("bla", &chVal, &testStrm.memList, FALSE);
82  tmp_err_code += serialize.stringData(&testStrm, chVal);
83  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
84 
85  tmp_err_code += serialize.endElement(&testStrm);
86 
87  tmp_err_code += asciiToString("b", &ln, &testStrm.memList, FALSE);
88  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
89  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
90 
91  tmp_err_code += asciiToString("23", &chVal, &testStrm.memList, FALSE);
92  tmp_err_code += serialize.stringData(&testStrm, chVal);
93  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
94 
95  tmp_err_code += serialize.endElement(&testStrm);
96 
97  tmp_err_code += serialize.endElement(&testStrm);
98  tmp_err_code += serialize.endDocument(&testStrm);
99 
100  if(tmp_err_code != EXIP_OK)
101  fail_unless (tmp_err_code == EXIP_OK, "serialization ended with error code %d", tmp_err_code);
102 
103  // V: Free the memory allocated by the EXI stream object
104  tmp_err_code = serialize.closeEXIStream(&testStrm);
105  fail_unless (tmp_err_code == EXIP_OK, "serialize.closeEXIStream ended with error code %d", tmp_err_code);
106 
107 
109  // Parsing steps:
110 
111  // I: First, define an external stream for the input to the parser if any
112 
113  // II: Second, initialize the parser object
114  tmp_err_code = initParser(&testParser, buffer, NULL);
115  fail_unless (tmp_err_code == EXIP_OK, "initParser returns an error code %d", tmp_err_code);
116 
117  // III: Initialize the parsing data and hook the callback handlers to the parser object
118 
119  // IV: Parse the header of the stream
120 
121  tmp_err_code = parseHeader(&testParser, TRUE);
122  fail_unless (tmp_err_code == EXIP_OK, "parsing the header returns an error code %d", tmp_err_code);
123 
124  tmp_err_code = setSchema(&testParser, NULL);
125  fail_unless (tmp_err_code == EXIP_OK, "setSchema() returns an error code %d", tmp_err_code);
126 
127  // V: Parse the body of the EXI stream
128 
129  while(tmp_err_code == EXIP_OK)
130  {
131  tmp_err_code = parseNext(&testParser);
132  }
133 
134  // VI: Free the memory allocated by the parser object
135 
136  destroyParser(&testParser);
137  fail_unless (tmp_err_code == EXIP_PARSING_COMPLETE, "Error during parsing of the EXI body %d", tmp_err_code);
138 }
139 END_TEST
140 
141 START_TEST (test_noLearning02)
142 {
143  EXIStream testStrm;
144  Parser testParser;
145  String uri;
146  String ln;
147  QName qname= {&uri, &ln};
148  String chVal;
149  char buf[OUTPUT_BUFFER_SIZE];
150  errorCode tmp_err_code = EXIP_UNEXPECTED_ERROR;
151  BinaryBuffer buffer;
152  EXITypeClass valueType;
153 
154  buffer.buf = buf;
155  buffer.bufContent = 0;
156  buffer.bufLen = OUTPUT_BUFFER_SIZE;
157  buffer.ioStrm.readWriteToStream = NULL;
158  buffer.ioStrm.stream = NULL;
159 
160  // Serialization steps:
161 
162  // I: First initialize the header of the stream
163  serialize.initHeader(&testStrm);
164 
165  // II: Set any options in the header, if different from the defaults
166  testStrm.header.has_options = TRUE;
168 
169  // III: Define an external stream for the output if any
170 
171  // IV: Initialize the stream
172  tmp_err_code = serialize.initStream(&testStrm, buffer, NULL);
173  fail_unless (tmp_err_code == EXIP_OK, "initStream returns an error code %d", tmp_err_code);
174 
175  // V: Start building the stream step by step: header, document, element etc...
176  tmp_err_code = serialize.exiHeader(&testStrm);
177  fail_unless (tmp_err_code == EXIP_OK, "serialize.exiHeader returns an error code %d", tmp_err_code);
178 
179  tmp_err_code = serialize.startDocument(&testStrm);
180  fail_unless (tmp_err_code == EXIP_OK, "serialize.startDocument returns an error code %d", tmp_err_code);
181 
182  getEmptyString(&uri);
183  tmp_err_code += asciiToString("root", &ln, &testStrm.memList, FALSE);
184  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
185  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
186 
187  tmp_err_code += asciiToString("a", &ln, &testStrm.memList, FALSE);
188  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
189  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
190 
191  tmp_err_code += asciiToString("bla", &chVal, &testStrm.memList, FALSE);
192  tmp_err_code += serialize.stringData(&testStrm, chVal);
193  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
194 
195  tmp_err_code += serialize.endElement(&testStrm);
196 
197  tmp_err_code += asciiToString("b", &ln, &testStrm.memList, FALSE);
198  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
199  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
200 
201  tmp_err_code += asciiToString("23", &chVal, &testStrm.memList, FALSE);
202  tmp_err_code += serialize.stringData(&testStrm, chVal);
203  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
204 
205  tmp_err_code += serialize.endElement(&testStrm);
206 
207  tmp_err_code += asciiToString("a", &ln, &testStrm.memList, FALSE);
208  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
209  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
210 
211  tmp_err_code += asciiToString("bla", &chVal, &testStrm.memList, FALSE);
212  tmp_err_code += serialize.stringData(&testStrm, chVal);
213  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
214 
215  tmp_err_code += serialize.endElement(&testStrm);
216 
217  tmp_err_code += asciiToString("c", &ln, &testStrm.memList, FALSE);
218  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
219  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
220 
221  tmp_err_code += asciiToString("b", &ln, &testStrm.memList, FALSE);
222  tmp_err_code += serialize.startElement(&testStrm, qname, &valueType);
223  fail_unless (tmp_err_code == EXIP_OK, "serialize.startElement returns an error code %d", tmp_err_code);
224 
225  tmp_err_code += asciiToString("http://www.w3.org/2001/XMLSchema-instance", &uri, &testStrm.memList, FALSE);
226  tmp_err_code += asciiToString("type", &ln, &testStrm.memList, FALSE);
227  tmp_err_code += serialize.attribute(&testStrm, qname, TRUE, &valueType);
228  fail_unless (tmp_err_code == EXIP_OK, "serialize.attribute returns an error code %d", tmp_err_code);
229 
230  tmp_err_code += asciiToString("http://www.w3.org/2001/XMLSchema", &uri, &testStrm.memList, FALSE);
231  tmp_err_code += asciiToString("integer", &ln, &testStrm.memList, FALSE);
232  tmp_err_code += serialize.qnameData(&testStrm, qname);
233  fail_unless (tmp_err_code == EXIP_OK, "serialize.qnameData returns an error code %d", tmp_err_code);
234 
235  tmp_err_code += serialize.intData(&testStrm, 66);
236  fail_unless (tmp_err_code == EXIP_OK, "serialize.stringData returns an error code %d", tmp_err_code);
237 
238  tmp_err_code += serialize.endElement(&testStrm);
239 
240  tmp_err_code += serialize.endElement(&testStrm);
241 
242  tmp_err_code += serialize.endElement(&testStrm);
243  tmp_err_code += serialize.endDocument(&testStrm);
244 
245  if(tmp_err_code != EXIP_OK)
246  fail_unless (tmp_err_code == EXIP_OK, "serialization ended with error code %d", tmp_err_code);
247 
248  // V: Free the memory allocated by the EXI stream object
249  tmp_err_code = serialize.closeEXIStream(&testStrm);
250  fail_unless (tmp_err_code == EXIP_OK, "serialize.closeEXIStream ended with error code %d", tmp_err_code);
251 
252 
254  // Parsing steps:
255 
256  // I: First, define an external stream for the input to the parser if any
257 
258  // II: Second, initialize the parser object
259  tmp_err_code = initParser(&testParser, buffer, NULL);
260  fail_unless (tmp_err_code == EXIP_OK, "initParser returns an error code %d", tmp_err_code);
261 
262  // III: Initialize the parsing data and hook the callback handlers to the parser object
263 
264  // IV: Parse the header of the stream
265 
266  tmp_err_code = parseHeader(&testParser, TRUE);
267  fail_unless (tmp_err_code == EXIP_OK, "parsing the header returns an error code %d", tmp_err_code);
268 
269  tmp_err_code = setSchema(&testParser, NULL);
270  fail_unless (tmp_err_code == EXIP_OK, "setSchema() returns an error code %d", tmp_err_code);
271 
272  // V: Parse the body of the EXI stream
273 
274  while(tmp_err_code == EXIP_OK)
275  {
276  tmp_err_code = parseNext(&testParser);
277  }
278 
279  // VI: Free the memory allocated by the parser object
280 
281  destroyParser(&testParser);
282  fail_unless (tmp_err_code == EXIP_PARSING_COMPLETE, "Error during parsing of the EXI body %d", tmp_err_code);
283 }
284 END_TEST
285 
286 
287 /* END: Interoperability tests */
288 
290 {
291  Suite *s = suite_create ("EXI Profile");
292 
293  {
294  /* Grammars test case */
295  TCase *tc_intProfile = tcase_create ("Interoperability tests");
296  tcase_add_test (tc_intProfile, test_noLearning01);
297  tcase_add_test (tc_intProfile, test_noLearning02);
298 // tcase_add_test (tc_intProfile, test_noLearning03);
299 // tcase_add_test (tc_intProfile, test_noLearning04);
300 // tcase_add_test (tc_intProfile, test_noLearning05);
301  suite_add_tcase (s, tc_intProfile);
302  }
303 
304  return s;
305 }
306 
307 int main (void)
308 {
309  int number_failed;
310  Suite *s = profile_suite();
311  SRunner *sr = srunner_create (s);
312 
313 #ifdef _MSC_VER
315 #endif
317  number_failed = srunner_ntests_failed (sr);
318  srunner_free (sr);
319  return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
320 }