blob: 10b0a317321e0250a636f92a7f218a19f7bd5f86 [file] [log] [blame]
vlma9f55e72004-10-20 15:55:52 +00001#include <xer_decoder.c>
2#include <xer_support.c>
3#include <assert.h>
4
5static void
6check(char *tag, char *name, xer_check_tag_e value) {
7 xer_check_tag_e xct;
8
9 xct = xer_check_tag(tag, strlen(tag), name);
10 printf("[%s] vs [%s]: %d == %d\n",
11 tag, name, xct, value);
12 assert(xct == value);
13}
14
15static void
16check_next(char *xerbuf, int expected_chunk_size, pxer_chunk_type_e expected_chunk_type) {
vlma9f55e72004-10-20 15:55:52 +000017 int xerbuf_len = strlen(xerbuf);
18 pxer_chunk_type_e ch_type;
19 ssize_t ch_size;
vlmc70f8f32005-02-18 18:06:36 +000020 int state = 0;
vlma9f55e72004-10-20 15:55:52 +000021
22 if(expected_chunk_size == -1)
23 expected_chunk_size = xerbuf_len;
vlmc70f8f32005-02-18 18:06:36 +000024 ch_size = xer_next_token(&state, xerbuf, xerbuf_len, &ch_type);
vlma9f55e72004-10-20 15:55:52 +000025
26 printf("[%s]:%d\n", xerbuf, xerbuf_len);
vlm90e20902005-07-04 12:19:53 +000027 printf("chunk sizes: %ld vs %ld, chunk types: %d vs %ld\n",
28 (long)ch_size, (long)expected_chunk_size,
29 ch_type, (long)expected_chunk_type
vlma9f55e72004-10-20 15:55:52 +000030 );
31
32 if(expected_chunk_type == -1) {
33 assert(ch_size == 0);
34 } else {
35 assert(ch_size == expected_chunk_size);
36 assert(ch_type == expected_chunk_type);
37 }
38}
39
40int
41main() {
42
43 check("", "", XCT_BROKEN);
44 check("<", "", XCT_BROKEN);
45 check(">", "", XCT_BROKEN);
46 check("</", "", XCT_BROKEN);
47 check("/>", "", XCT_BROKEN);
48
49 check("<>", "", XCT_OPENING);
50 check("</>", "", XCT_CLOSING);
51
52 check("", "a", XCT_BROKEN);
vlm0ad3e522005-02-18 17:18:48 +000053 check("<>", "a", XCT_UNKNOWN_OP);
54 check("</>", "a", XCT_UNKNOWN_CL);
vlma9f55e72004-10-20 15:55:52 +000055
56 check("a", "a", XCT_BROKEN);
57 check("<a>", "a", XCT_OPENING);
58 check("</a>", "a", XCT_CLOSING);
59 check("</a/>", "a", XCT_BROKEN);
60 check("<a/>", "a", XCT_BOTH);
61
62 check("<a>", "a", XCT_OPENING);
63 check("</a>", "a", XCT_CLOSING);
64 check("</a/>", "a", XCT_BROKEN);
65 check("<a/>", "a", XCT_BOTH);
66
vlm0ad3e522005-02-18 17:18:48 +000067 check("<tag>", "a", XCT_UNKNOWN_OP);
vlma9f55e72004-10-20 15:55:52 +000068 check("<tag>", "tag", XCT_OPENING);
69 check("</tag>", "tag", XCT_CLOSING);
70 check("</tag/>", "tag", XCT_BROKEN);
71 check("<tag/>", "tag", XCT_BOTH);
72
73
vlm0ad3e522005-02-18 17:18:48 +000074 check("<tag>", "ta", XCT_UNKNOWN_OP);
75 check("</tag>", "ta", XCT_UNKNOWN_CL);
vlma9f55e72004-10-20 15:55:52 +000076 check("</tag/>", "ta", XCT_BROKEN);
vlm0ad3e522005-02-18 17:18:48 +000077 check("<tag/>", "ta", XCT_UNKNOWN_BO);
vlma9f55e72004-10-20 15:55:52 +000078
79 check("<tag attribute=\"value\"/>", "tag", XCT_BOTH);
80
81 check_next("<tag/>", -1, PXER_TAG);
82 check_next("<tag", -1, -1);
83 check_next("tag", -1, PXER_TEXT);
84 check_next("tag<s", 3, PXER_TEXT);
85 check_next("</a/>la", 5, PXER_TAG);
86 check_next("<!--blah", -1, PXER_COMMENT);
87 check_next("<!--blah-", -1, -1);
88 check_next("<!--blah--", -1, -1);
89 check_next("<!--blah-->", -1, PXER_COMMENT);
90
91 return 0;
92}