aboutsummaryrefslogtreecommitdiffstats
path: root/skeletons
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2004-10-20 15:55:52 +0000
committerLev Walkin <vlm@lionet.info>2004-10-20 15:55:52 +0000
commit21c91e02519b324a3d6da8ecf9f33281a4ac426f (patch)
tree1bef520bb87bab83f7a2ab8c043d19672d3dea1f /skeletons
parent557d12719a687a9b0c0cbecd0b62844c7ee67e4a (diff)
XER checking
Diffstat (limited to 'skeletons')
-rw-r--r--skeletons/tests/check-XER.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/skeletons/tests/check-XER.c b/skeletons/tests/check-XER.c
new file mode 100644
index 00000000..4b548975
--- /dev/null
+++ b/skeletons/tests/check-XER.c
@@ -0,0 +1,93 @@
+#include <xer_decoder.c>
+#include <xer_support.c>
+#include <assert.h>
+
+static void
+check(char *tag, char *name, xer_check_tag_e value) {
+ xer_check_tag_e xct;
+
+ xct = xer_check_tag(tag, strlen(tag), name);
+ printf("[%s] vs [%s]: %d == %d\n",
+ tag, name, xct, value);
+ assert(xct == value);
+}
+
+static void
+check_next(char *xerbuf, int expected_chunk_size, pxer_chunk_type_e expected_chunk_type) {
+ int stateContext = 0;
+ int xerbuf_len = strlen(xerbuf);
+ pxer_chunk_type_e ch_type;
+ ssize_t ch_size;
+
+ if(expected_chunk_size == -1)
+ expected_chunk_size = xerbuf_len;
+ ch_size = xer_next_token(&stateContext, xerbuf, xerbuf_len, &ch_type);
+
+ printf("[%s]:%d\n", xerbuf, xerbuf_len);
+ printf("chunk sizes: %d vs %d, chunk types: %d vs %d\n",
+ ch_size, expected_chunk_size,
+ ch_type, expected_chunk_type
+ );
+
+ if(expected_chunk_type == -1) {
+ assert(ch_size == 0);
+ } else {
+ assert(ch_size == expected_chunk_size);
+ assert(ch_type == expected_chunk_type);
+ }
+}
+
+int
+main() {
+
+ check("", "", XCT_BROKEN);
+ check("<", "", XCT_BROKEN);
+ check(">", "", XCT_BROKEN);
+ check("</", "", XCT_BROKEN);
+ check("/>", "", XCT_BROKEN);
+
+ check("<>", "", XCT_OPENING);
+ check("</>", "", XCT_CLOSING);
+
+ check("", "a", XCT_BROKEN);
+ check("<>", "a", XCT_UNEXPECTED);
+ check("</>", "a", XCT_UNEXPECTED);
+
+ check("a", "a", XCT_BROKEN);
+ check("<a>", "a", XCT_OPENING);
+ check("</a>", "a", XCT_CLOSING);
+ check("</a/>", "a", XCT_BROKEN);
+ check("<a/>", "a", XCT_BOTH);
+
+ check("<a>", "a", XCT_OPENING);
+ check("</a>", "a", XCT_CLOSING);
+ check("</a/>", "a", XCT_BROKEN);
+ check("<a/>", "a", XCT_BOTH);
+
+ check("<tag>", "a", XCT_UNEXPECTED);
+ check("<tag>", "tag", XCT_OPENING);
+ check("</tag>", "tag", XCT_CLOSING);
+ check("</tag/>", "tag", XCT_BROKEN);
+ check("<tag/>", "tag", XCT_BOTH);
+
+
+ check("<tag>", "ta", XCT_UNEXPECTED);
+ check("<tag>", "ta", XCT_UNEXPECTED);
+ check("</tag>", "ta", XCT_UNEXPECTED);
+ check("</tag/>", "ta", XCT_BROKEN);
+ check("<tag/>", "ta", XCT_UNEXPECTED);
+
+ check("<tag attribute=\"value\"/>", "tag", XCT_BOTH);
+
+ check_next("<tag/>", -1, PXER_TAG);
+ check_next("<tag", -1, -1);
+ check_next("tag", -1, PXER_TEXT);
+ check_next("tag<s", 3, PXER_TEXT);
+ check_next("</a/>la", 5, PXER_TAG);
+ check_next("<!--blah", -1, PXER_COMMENT);
+ check_next("<!--blah-", -1, -1);
+ check_next("<!--blah--", -1, -1);
+ check_next("<!--blah-->", -1, PXER_COMMENT);
+
+ return 0;
+}