blob: 9084551cbb8f4f77ca6ea4f153de1cff68745d91 [file] [log] [blame]
Lev Walkin4eceeba2007-07-23 06:48:26 +00001#include <stdio.h>
Lev Walkin21c91e02004-10-20 15:55:52 +00002#include <assert.h>
3
Lev Walkin4eceeba2007-07-23 06:48:26 +00004#include <asn_internal.h>
5#include <xer_decoder.h>
6
Lev Walkin21c91e02004-10-20 15:55:52 +00007static void
8check(char *tag, char *name, xer_check_tag_e value) {
9 xer_check_tag_e xct;
10
11 xct = xer_check_tag(tag, strlen(tag), name);
12 printf("[%s] vs [%s]: %d == %d\n",
13 tag, name, xct, value);
14 assert(xct == value);
15}
16
17static void
18check_next(char *xerbuf, int expected_chunk_size, pxer_chunk_type_e expected_chunk_type) {
Lev Walkin21c91e02004-10-20 15:55:52 +000019 int xerbuf_len = strlen(xerbuf);
20 pxer_chunk_type_e ch_type;
21 ssize_t ch_size;
Lev Walkin1e443962005-02-18 18:06:36 +000022 int state = 0;
Lev Walkin21c91e02004-10-20 15:55:52 +000023
24 if(expected_chunk_size == -1)
25 expected_chunk_size = xerbuf_len;
Lev Walkin1e443962005-02-18 18:06:36 +000026 ch_size = xer_next_token(&state, xerbuf, xerbuf_len, &ch_type);
Lev Walkin21c91e02004-10-20 15:55:52 +000027
28 printf("[%s]:%d\n", xerbuf, xerbuf_len);
Lev Walkinca5876a2005-07-04 12:19:53 +000029 printf("chunk sizes: %ld vs %ld, chunk types: %d vs %ld\n",
30 (long)ch_size, (long)expected_chunk_size,
31 ch_type, (long)expected_chunk_type
Lev Walkin21c91e02004-10-20 15:55:52 +000032 );
33
Lev Walkin97363482016-01-24 19:23:02 -080034 if(expected_chunk_type == PXER_WMORE) {
Lev Walkin21c91e02004-10-20 15:55:52 +000035 assert(ch_size == 0);
36 } else {
37 assert(ch_size == expected_chunk_size);
38 assert(ch_type == expected_chunk_type);
39 }
40}
41
42int
43main() {
44
45 check("", "", XCT_BROKEN);
46 check("<", "", XCT_BROKEN);
47 check(">", "", XCT_BROKEN);
48 check("</", "", XCT_BROKEN);
49 check("/>", "", XCT_BROKEN);
50
Lev Walkind1bfea62005-11-08 03:06:16 +000051 check("<>", "", XCT_UNKNOWN_OP);
52 check("</>", "", XCT_UNKNOWN_CL);
Lev Walkin21c91e02004-10-20 15:55:52 +000053
54 check("", "a", XCT_BROKEN);
Lev Walkin6ab88962005-02-18 17:18:48 +000055 check("<>", "a", XCT_UNKNOWN_OP);
56 check("</>", "a", XCT_UNKNOWN_CL);
Lev Walkin21c91e02004-10-20 15:55:52 +000057
58 check("a", "a", XCT_BROKEN);
59 check("<a>", "a", XCT_OPENING);
60 check("</a>", "a", XCT_CLOSING);
61 check("</a/>", "a", XCT_BROKEN);
62 check("<a/>", "a", XCT_BOTH);
63
64 check("<a>", "a", XCT_OPENING);
65 check("</a>", "a", XCT_CLOSING);
66 check("</a/>", "a", XCT_BROKEN);
67 check("<a/>", "a", XCT_BOTH);
68
Lev Walkin6ab88962005-02-18 17:18:48 +000069 check("<tag>", "a", XCT_UNKNOWN_OP);
Lev Walkin21c91e02004-10-20 15:55:52 +000070 check("<tag>", "tag", XCT_OPENING);
71 check("</tag>", "tag", XCT_CLOSING);
72 check("</tag/>", "tag", XCT_BROKEN);
73 check("<tag/>", "tag", XCT_BOTH);
74
75
Lev Walkin6ab88962005-02-18 17:18:48 +000076 check("<tag>", "ta", XCT_UNKNOWN_OP);
77 check("</tag>", "ta", XCT_UNKNOWN_CL);
Lev Walkin21c91e02004-10-20 15:55:52 +000078 check("</tag/>", "ta", XCT_BROKEN);
Lev Walkin6ab88962005-02-18 17:18:48 +000079 check("<tag/>", "ta", XCT_UNKNOWN_BO);
Lev Walkin21c91e02004-10-20 15:55:52 +000080
81 check("<tag attribute=\"value\"/>", "tag", XCT_BOTH);
82
83 check_next("<tag/>", -1, PXER_TAG);
Lev Walkin97363482016-01-24 19:23:02 -080084 check_next("<tag", -1, PXER_WMORE);
Lev Walkin21c91e02004-10-20 15:55:52 +000085 check_next("tag", -1, PXER_TEXT);
86 check_next("tag<s", 3, PXER_TEXT);
87 check_next("</a/>la", 5, PXER_TAG);
88 check_next("<!--blah", -1, PXER_COMMENT);
Lev Walkin97363482016-01-24 19:23:02 -080089 check_next("<!--blah-", -1, PXER_WMORE);
90 check_next("<!--blah--", -1, PXER_WMORE);
Lev Walkin21c91e02004-10-20 15:55:52 +000091 check_next("<!--blah-->", -1, PXER_COMMENT);
92
93 return 0;
94}