4 * Copyright (c) 2009-2011 project bchan
6 * This software is provided 'as-is', without any express or implied
7 * warranty. In no event will the authors be held liable for any damages
8 * arising from the use of this software.
10 * Permission is granted to anyone to use this software for any purpose,
11 * including commercial applications, and to alter it and redistribute it
12 * freely, subject to the following restrictions:
14 * 1. The origin of this software must not be misrepresented; you must not
15 * claim that you wrote the original software. If you use this software
16 * in a product, an acknowledgment in the product documentation would be
17 * appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must not be
20 * misrepresented as being the original software.
22 * 3. This notice may not be removed or altered from any source
27 #include <btron/btron.h>
36 LOCAL TEST_RESULT test_character_reference_1()
38 charreferparser_t parser;
39 charreferparser_result_t parseresult;
42 err = charreferparser_initialize(&parser);
44 return TEST_RESULT_FAIL;
46 parseresult = charreferparser_parsechar(&parser, '&');
47 if (parseresult != CHARREFERPARSER_RESULT_CONTINUE) {
48 charreferparser_finalize(&parser);
49 return TEST_RESULT_FAIL;
51 parseresult = charreferparser_parsechar(&parser, '#');
52 if (parseresult != CHARREFERPARSER_RESULT_CONTINUE) {
53 charreferparser_finalize(&parser);
54 return TEST_RESULT_FAIL;
56 parseresult = charreferparser_parsechar(&parser, '1');
57 if (parseresult != CHARREFERPARSER_RESULT_CONTINUE) {
58 charreferparser_finalize(&parser);
59 return TEST_RESULT_FAIL;
61 parseresult = charreferparser_parsechar(&parser, '0');
62 if (parseresult != CHARREFERPARSER_RESULT_CONTINUE) {
63 charreferparser_finalize(&parser);
64 return TEST_RESULT_FAIL;
66 parseresult = charreferparser_parsechar(&parser, ';');
67 charreferparser_finalize(&parser);
68 if (parseresult != CHARREFERPARSER_RESULT_DETERMINE) {
69 return TEST_RESULT_FAIL;
71 err = charreferparser_getcharnumber(&parser);
73 charreferparser_finalize(&parser);
74 return TEST_RESULT_FAIL;
77 charreferparser_finalize(&parser);
78 return TEST_RESULT_FAIL;
80 charreferparser_finalize(&parser);
82 return TEST_RESULT_PASS;
85 LOCAL W test_charrefer_parsestr(charreferparser_t *parser, UB *str)
88 charreferparser_result_t result;
90 for (i = 0; str[i] != '\0'; i++) {
91 result = charreferparser_parsechar(parser, str[i]);
92 if (result == CHARREFERPARSER_RESULT_INVALID) {
95 if (result == CHARREFERPARSER_RESULT_DETERMINE) {
102 LOCAL TEST_RESULT test_character_reference_2()
172 charreferparser_t parser;
175 for (i = 0; tuple[i].str != NULL; i++) {
176 err = charreferparser_initialize(&parser);
178 return TEST_RESULT_FAIL;
180 err = test_charrefer_parsestr(&parser, tuple[i].str);
182 printf("failed to parsing\n");
183 return TEST_RESULT_FAIL;
185 err = charreferparser_getcharnumber(&parser);
187 printf("failed to get character number\n");
188 charreferparser_finalize(&parser);
189 return TEST_RESULT_FAIL;
191 if (err != tuple[i].val) {
192 printf("invalid parse result: %d(0x%x)\n", err, err);
193 printf(" <- %s\n", tuple[i].str);
194 printf(" <- %d\n", tuple[i].val);
195 printf(" <- 0x%x\n", tuple[i].val);
196 charreferparser_finalize(&parser);
197 return TEST_RESULT_FAIL;
199 charreferparser_finalize(&parser);
202 return TEST_RESULT_PASS;
205 LOCAL TEST_RESULT test_character_reference_3()
218 charreferparser_t parser;
221 for (i = 0; tuple[i].str != NULL; i++) {
222 err = charreferparser_initialize(&parser);
224 return TEST_RESULT_FAIL;
226 err = test_charrefer_parsestr(&parser, tuple[i].str);
228 printf("failed to parsing\n");
229 return TEST_RESULT_FAIL;
231 err = charreferparser_getcharnumber(&parser);
233 printf("failed to get character number\n");
234 charreferparser_finalize(&parser);
235 return TEST_RESULT_FAIL;
237 if (err != tuple[i].val) {
238 printf("invalid parse result: %d(0x%x)\n", err, err);
239 printf(" <- %s\n", tuple[i].str);
240 printf(" <- %d\n", tuple[i].val);
241 printf(" <- 0x%x\n", tuple[i].val);
242 charreferparser_finalize(&parser);
243 return TEST_RESULT_FAIL;
245 charreferparser_finalize(&parser);
248 return TEST_RESULT_PASS;
251 LOCAL TEST_RESULT test_character_reference_4()
256 charreferparser_t parser;
258 err = charreferparser_initialize(&parser);
260 return TEST_RESULT_FAIL;
262 for (i = 0; data[i] != '\0'; i++) {
263 err = charreferparser_parsechar(&parser, data[i]);
264 if (err == CHARREFERPARSER_RESULT_INVALID) {
269 printf("failed to invalid position\n");
270 charreferparser_finalize(&parser);
271 return TEST_RESULT_FAIL;
273 charreferparser_getlastmatchedstring(&parser, &str, &len);
275 printf("failed to get last matched string length\n");
276 charreferparser_finalize(&parser);
277 return TEST_RESULT_FAIL;
279 err = strncmp(data + 1, str, len);
281 printf("failed to get last matched string\n");
282 charreferparser_finalize(&parser);
283 return TEST_RESULT_FAIL;
285 charreferparser_finalize(&parser);
287 return TEST_RESULT_PASS;
290 LOCAL TEST_RESULT test_character_reference_5()
295 charreferparser_t parser;
297 err = charreferparser_initialize(&parser);
299 return TEST_RESULT_FAIL;
301 for (i = 0; data[i] != '\0'; i++) {
302 err = charreferparser_parsechar(&parser, data[i]);
303 if (err == CHARREFERPARSER_RESULT_INVALID) {
308 printf("failed to invalid position\n");
309 charreferparser_finalize(&parser);
310 return TEST_RESULT_FAIL;
312 charreferparser_getlastmatchedstring(&parser, &str, &len);
314 printf("failed to get last matched string length\n");
315 charreferparser_finalize(&parser);
316 return TEST_RESULT_FAIL;
318 err = strncmp(data + 1, str, len);
320 printf("failed to get last matched string\n");
321 charreferparser_finalize(&parser);
322 return TEST_RESULT_FAIL;
324 charreferparser_finalize(&parser);
326 return TEST_RESULT_PASS;
329 LOCAL TEST_RESULT test_character_reference_6()
334 charreferparser_t parser;
336 err = charreferparser_initialize(&parser);
338 return TEST_RESULT_FAIL;
340 for (i = 0; data[i] != '\0'; i++) {
341 err = charreferparser_parsechar(&parser, data[i]);
342 if (err == CHARREFERPARSER_RESULT_INVALID) {
347 printf("failed to invalid position\n");
348 charreferparser_finalize(&parser);
349 return TEST_RESULT_FAIL;
351 charreferparser_getlastmatchedstring(&parser, &str, &len);
353 printf("failed to get last matched string length\n");
354 charreferparser_finalize(&parser);
355 return TEST_RESULT_FAIL;
357 err = strncmp(data + 1, str, len);
359 printf("failed to get last matched string\n");
360 charreferparser_finalize(&parser);
361 return TEST_RESULT_FAIL;
363 charreferparser_finalize(&parser);
365 return TEST_RESULT_PASS;
368 LOCAL TEST_RESULT test_character_reference_7()
372 UB data[] = "&s;";
373 charreferparser_t parser;
375 err = charreferparser_initialize(&parser);
377 return TEST_RESULT_FAIL;
379 for (i = 0; data[i] != '\0'; i++) {
380 err = charreferparser_parsechar(&parser, data[i]);
381 if (err == CHARREFERPARSER_RESULT_INVALID) {
386 printf("failed to invalid position\n");
387 charreferparser_finalize(&parser);
388 return TEST_RESULT_FAIL;
390 charreferparser_getlastmatchedstring(&parser, &str, &len);
392 printf("failed to get last matched string length\n");
393 charreferparser_finalize(&parser);
394 return TEST_RESULT_FAIL;
396 err = strncmp(data + 1, str, len);
398 printf("failed to get last matched string\n");
399 charreferparser_finalize(&parser);
400 return TEST_RESULT_FAIL;
402 charreferparser_finalize(&parser);
404 return TEST_RESULT_PASS;
407 LOCAL TEST_RESULT test_character_reference_8()
411 UB data[] = "&qqqq;";
412 charreferparser_t parser;
414 err = charreferparser_initialize(&parser);
416 return TEST_RESULT_FAIL;
418 for (i = 0; data[i] != '\0'; i++) {
419 err = charreferparser_parsechar(&parser, data[i]);
420 if (err == CHARREFERPARSER_RESULT_INVALID) {
425 printf("failed to invalid position\n");
426 charreferparser_finalize(&parser);
427 return TEST_RESULT_FAIL;
429 charreferparser_getlastmatchedstring(&parser, &str, &len);
431 printf("failed to get last matched string length\n");
432 charreferparser_finalize(&parser);
433 return TEST_RESULT_FAIL;
435 err = strncmp(data + 1, str, len);
437 printf("failed to get last matched string\n");
438 charreferparser_finalize(&parser);
439 return TEST_RESULT_FAIL;
441 charreferparser_finalize(&parser);
443 return TEST_RESULT_PASS;
446 LOCAL TEST_RESULT test_character_reference_9()
450 UB data[] = "&quuu;";
451 charreferparser_t parser;
453 err = charreferparser_initialize(&parser);
455 return TEST_RESULT_FAIL;
457 for (i = 0; data[i] != '\0'; i++) {
458 err = charreferparser_parsechar(&parser, data[i]);
459 if (err == CHARREFERPARSER_RESULT_INVALID) {
464 printf("failed to invalid position\n");
465 charreferparser_finalize(&parser);
466 return TEST_RESULT_FAIL;
468 charreferparser_getlastmatchedstring(&parser, &str, &len);
470 printf("failed to get last matched string length\n");
471 charreferparser_finalize(&parser);
472 return TEST_RESULT_FAIL;
474 err = strncmp(data + 1, str, len);
476 printf("failed to get last matched string\n");
477 charreferparser_finalize(&parser);
478 return TEST_RESULT_FAIL;
480 charreferparser_finalize(&parser);
482 return TEST_RESULT_PASS;
485 LOCAL TEST_RESULT test_character_reference_10()
489 UB data[] = "&quoo;";
490 charreferparser_t parser;
492 err = charreferparser_initialize(&parser);
494 return TEST_RESULT_FAIL;
496 for (i = 0; data[i] != '\0'; i++) {
497 err = charreferparser_parsechar(&parser, data[i]);
498 if (err == CHARREFERPARSER_RESULT_INVALID) {
503 printf("failed to invalid position\n");
504 charreferparser_finalize(&parser);
505 return TEST_RESULT_FAIL;
507 charreferparser_getlastmatchedstring(&parser, &str, &len);
509 printf("failed to get last matched string length\n");
510 charreferparser_finalize(&parser);
511 return TEST_RESULT_FAIL;
513 err = strncmp(data + 1, str, len);
515 printf("failed to get last matched string\n");
516 charreferparser_finalize(&parser);
517 return TEST_RESULT_FAIL;
519 charreferparser_finalize(&parser);
521 return TEST_RESULT_PASS;
524 LOCAL TEST_RESULT test_character_reference_11()
528 UB data[] = ""t;";
529 charreferparser_t parser;
531 err = charreferparser_initialize(&parser);
533 return TEST_RESULT_FAIL;
535 for (i = 0; data[i] != '\0'; i++) {
536 err = charreferparser_parsechar(&parser, data[i]);
537 if (err == CHARREFERPARSER_RESULT_INVALID) {
542 printf("failed to invalid position\n");
543 charreferparser_finalize(&parser);
544 return TEST_RESULT_FAIL;
546 charreferparser_getlastmatchedstring(&parser, &str, &len);
548 printf("failed to get last matched string length\n");
549 charreferparser_finalize(&parser);
550 return TEST_RESULT_FAIL;
552 err = strncmp(data + 1, str, len);
554 printf("failed to get last matched string\n");
555 charreferparser_finalize(&parser);
556 return TEST_RESULT_FAIL;
558 charreferparser_finalize(&parser);
560 return TEST_RESULT_PASS;
563 LOCAL tokenchecker_valuetuple_t test_tokenchecker_testdata_tuple_0001[] = {
572 LOCAL UB test_tokenchecker_testdata_etoken_0001[] = ":>";
574 LOCAL TEST_RESULT test_tokenchecker_1()
576 tokenchecker_t checker;
577 W i, j, len, len2, val, ret;
580 str = strdup(test_tokenchecker_testdata_tuple_0001[0].name);
583 tokenchecker_initialize(&checker,
584 test_tokenchecker_testdata_tuple_0001,
586 test_tokenchecker_testdata_etoken_0001);
588 for (i = 0; i < len; i++) {
589 ret = tokenchecker_inputchar(&checker, str[i], &val);
590 if (ret != TOKENCHECKER_CONTINUE) {
591 printf("tokenchecker_inputchar fail: right string\n");
593 return TEST_RESULT_FAIL;
595 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
596 if (strncmp(str, str2, len2) != 0) {
597 printf("tokenchecker_getlastmatchedstring fail: right string\n");
599 for (j = 0; j < len; j++) {
600 printf("%c", str[j]);
603 for (j = 0; j < len; j++) {
604 printf("%c", str2[j]);
608 return TEST_RESULT_FAIL;
611 ret = tokenchecker_inputchar(&checker, ':', &val);
612 if (ret != TOKENCHECKER_DETERMINE) {
613 printf("tokenchecker_inputchar fail: end character\n");
615 return TEST_RESULT_FAIL;
618 printf("tokenchecker_inputchar fail: select value\n");
620 return TEST_RESULT_FAIL;
622 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
623 if (strncmp(str, str2, len2) != 0) {
624 printf("tokenchecker_getlastmatchedstring fail: end token\n");
626 return TEST_RESULT_FAIL;
628 ret = tokenchecker_inputchar(&checker, ':', &val);
629 if (ret != TOKENCHECKER_AFTER_END) {
630 printf("tokenchecker_inputchar fail: after end\n");
632 return TEST_RESULT_FAIL;
636 return TEST_RESULT_PASS;
639 LOCAL TEST_RESULT test_tokenchecker_2()
641 tokenchecker_t checker;
642 W i, j, len, len2, val, ret;
645 str = strdup(test_tokenchecker_testdata_tuple_0001[1].name);
648 tokenchecker_initialize(&checker,
649 test_tokenchecker_testdata_tuple_0001,
651 test_tokenchecker_testdata_etoken_0001);
653 for (i = 0; i < len; i++) {
654 ret = tokenchecker_inputchar(&checker, str[i], &val);
655 if (ret != TOKENCHECKER_CONTINUE) {
656 printf("tokenchecker_inputchar fail: right string\n");
658 return TEST_RESULT_FAIL;
660 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
661 if (strncmp(str, str2, len2) != 0) {
662 printf("tokenchecker_getlastmatchedstring fail: right string\n");
664 for (j = 0; j < len; j++) {
665 printf("%c", str[j]);
668 for (j = 0; j < len; j++) {
669 printf("%c", str2[j]);
673 return TEST_RESULT_FAIL;
676 ret = tokenchecker_inputchar(&checker, ':', &val);
677 if (ret != TOKENCHECKER_DETERMINE) {
678 printf("tokenchecker_inputchar fail: end character\n");
680 return TEST_RESULT_FAIL;
683 printf("tokenchecker_inputchar fail: select value\n");
685 return TEST_RESULT_FAIL;
687 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
688 if (strncmp(str, str2, len2) != 0) {
689 printf("tokenchecker_getlastmatchedstring fail: end token\n");
691 return TEST_RESULT_FAIL;
693 ret = tokenchecker_inputchar(&checker, ':', &val);
694 if (ret != TOKENCHECKER_AFTER_END) {
695 printf("tokenchecker_inputchar fail: after end\n");
697 return TEST_RESULT_FAIL;
701 return TEST_RESULT_PASS;
704 LOCAL TEST_RESULT test_tokenchecker_3()
706 tokenchecker_t checker;
707 W i, j, len, len2, val, ret;
710 str = strdup(test_tokenchecker_testdata_tuple_0001[2].name);
713 tokenchecker_initialize(&checker,
714 test_tokenchecker_testdata_tuple_0001,
716 test_tokenchecker_testdata_etoken_0001);
718 for (i = 0; i < len; i++) {
719 ret = tokenchecker_inputchar(&checker, str[i], &val);
720 if (ret != TOKENCHECKER_CONTINUE) {
721 printf("tokenchecker_inputchar fail: right string\n");
723 return TEST_RESULT_FAIL;
725 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
726 if (strncmp(str, str2, len2) != 0) {
727 printf("tokenchecker_getlastmatchedstring fail: right string\n");
729 for (j = 0; j < len; j++) {
730 printf("%c", str[j]);
733 for (j = 0; j < len; j++) {
734 printf("%c", str2[j]);
738 return TEST_RESULT_FAIL;
741 ret = tokenchecker_inputchar(&checker, ':', &val);
742 if (ret != TOKENCHECKER_DETERMINE) {
743 printf("tokenchecker_inputchar fail: end character\n");
745 return TEST_RESULT_FAIL;
748 printf("tokenchecker_inputchar fail: select value\n");
750 return TEST_RESULT_FAIL;
752 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
753 if (strncmp(str, str2, len2) != 0) {
754 printf("tokenchecker_getlastmatchedstring fail: end token\n");
756 return TEST_RESULT_FAIL;
758 ret = tokenchecker_inputchar(&checker, ':', &val);
759 if (ret != TOKENCHECKER_AFTER_END) {
760 printf("tokenchecker_inputchar fail: after end\n");
762 return TEST_RESULT_FAIL;
766 return TEST_RESULT_PASS;
769 LOCAL TEST_RESULT test_tokenchecker_4()
771 tokenchecker_t checker;
772 W i, j, len, len2, val, ret;
775 str = strdup(test_tokenchecker_testdata_tuple_0001[3].name);
778 tokenchecker_initialize(&checker,
779 test_tokenchecker_testdata_tuple_0001,
781 test_tokenchecker_testdata_etoken_0001);
783 for (i = 0; i < len; i++) {
784 ret = tokenchecker_inputchar(&checker, str[i], &val);
785 if (ret != TOKENCHECKER_CONTINUE) {
786 printf("tokenchecker_inputchar fail: right string\n");
788 return TEST_RESULT_FAIL;
790 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
791 if (strncmp(str, str2, len2) != 0) {
792 printf("tokenchecker_getlastmatchedstring fail: right string\n");
794 for (j = 0; j < len; j++) {
795 printf("%c", str[j]);
798 for (j = 0; j < len; j++) {
799 printf("%c", str2[j]);
803 return TEST_RESULT_FAIL;
806 ret = tokenchecker_inputchar(&checker, ':', &val);
807 if (ret != TOKENCHECKER_DETERMINE) {
808 printf("tokenchecker_inputchar fail: end character\n");
810 return TEST_RESULT_FAIL;
813 printf("tokenchecker_inputchar fail: select value\n");
815 return TEST_RESULT_FAIL;
817 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
818 if (strncmp(str, str2, len2) != 0) {
819 printf("tokenchecker_getlastmatchedstring fail: end token\n");
821 return TEST_RESULT_FAIL;
823 ret = tokenchecker_inputchar(&checker, ':', &val);
824 if (ret != TOKENCHECKER_AFTER_END) {
825 printf("tokenchecker_inputchar fail: after end\n");
827 return TEST_RESULT_FAIL;
831 return TEST_RESULT_PASS;
834 LOCAL TEST_RESULT test_tokenchecker_5()
836 tokenchecker_t checker;
837 W i, j, len, len2, val, ret;
840 str = strdup(test_tokenchecker_testdata_tuple_0001[4].name);
843 tokenchecker_initialize(&checker,
844 test_tokenchecker_testdata_tuple_0001,
846 test_tokenchecker_testdata_etoken_0001);
848 for (i = 0; i < len; i++) {
849 ret = tokenchecker_inputchar(&checker, str[i], &val);
850 if (ret != TOKENCHECKER_CONTINUE) {
851 printf("tokenchecker_inputchar fail: right string\n");
853 return TEST_RESULT_FAIL;
855 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
856 if (strncmp(str, str2, len2) != 0) {
857 printf("tokenchecker_getlastmatchedstring fail: right string\n");
859 for (j = 0; j < len; j++) {
860 printf("%c", str[j]);
863 for (j = 0; j < len; j++) {
864 printf("%c", str2[j]);
868 return TEST_RESULT_FAIL;
871 ret = tokenchecker_inputchar(&checker, ':', &val);
872 if (ret != TOKENCHECKER_DETERMINE) {
873 printf("tokenchecker_inputchar fail: end character\n");
875 return TEST_RESULT_FAIL;
878 printf("tokenchecker_inputchar fail: select value\n");
880 return TEST_RESULT_FAIL;
882 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
883 if (strncmp(str, str2, len2) != 0) {
884 printf("tokenchecker_getlastmatchedstring fail: end token\n");
886 return TEST_RESULT_FAIL;
888 ret = tokenchecker_inputchar(&checker, ':', &val);
889 if (ret != TOKENCHECKER_AFTER_END) {
890 printf("tokenchecker_inputchar fail: after end\n");
892 return TEST_RESULT_FAIL;
896 return TEST_RESULT_PASS;
899 LOCAL TEST_RESULT test_tokenchecker_6()
901 tokenchecker_t checker;
902 W i, j, len, len2, val, ret;
905 str = strdup(test_tokenchecker_testdata_tuple_0001[5].name);
908 tokenchecker_initialize(&checker,
909 test_tokenchecker_testdata_tuple_0001,
911 test_tokenchecker_testdata_etoken_0001);
913 for (i = 0; i < len; i++) {
914 ret = tokenchecker_inputchar(&checker, str[i], &val);
915 if (ret != TOKENCHECKER_CONTINUE) {
916 printf("tokenchecker_inputchar fail: right string\n");
918 return TEST_RESULT_FAIL;
920 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
921 if (strncmp(str, str2, len2) != 0) {
922 printf("tokenchecker_getlastmatchedstring fail: right string\n");
924 for (j = 0; j < len; j++) {
925 printf("%c", str[j]);
928 for (j = 0; j < len; j++) {
929 printf("%c", str2[j]);
933 return TEST_RESULT_FAIL;
936 ret = tokenchecker_inputchar(&checker, ':', &val);
937 if (ret != TOKENCHECKER_DETERMINE) {
938 printf("tokenchecker_inputchar fail: end character\n");
940 return TEST_RESULT_FAIL;
943 printf("tokenchecker_inputchar fail: select value\n");
945 return TEST_RESULT_FAIL;
947 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
948 if (strncmp(str, str2, len2) != 0) {
949 printf("tokenchecker_getlastmatchedstring fail: end token\n");
951 return TEST_RESULT_FAIL;
953 ret = tokenchecker_inputchar(&checker, ':', &val);
954 if (ret != TOKENCHECKER_AFTER_END) {
955 printf("tokenchecker_inputchar fail: after end\n");
957 return TEST_RESULT_FAIL;
961 return TEST_RESULT_PASS;
964 LOCAL TEST_RESULT test_tokenchecker_7()
966 tokenchecker_t checker;
967 W i, j, len, len2, val, ret;
970 str = strdup(test_tokenchecker_testdata_tuple_0001[6].name);
973 tokenchecker_initialize(&checker,
974 test_tokenchecker_testdata_tuple_0001,
976 test_tokenchecker_testdata_etoken_0001);
978 for (i = 0; i < len; i++) {
979 ret = tokenchecker_inputchar(&checker, str[i], &val);
980 if (ret != TOKENCHECKER_CONTINUE) {
981 printf("tokenchecker_inputchar fail: right string\n");
983 return TEST_RESULT_FAIL;
985 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
986 if (strncmp(str, str2, len2) != 0) {
987 printf("tokenchecker_getlastmatchedstring fail: right string\n");
989 for (j = 0; j < len; j++) {
990 printf("%c", str[j]);
993 for (j = 0; j < len; j++) {
994 printf("%c", str2[j]);
998 return TEST_RESULT_FAIL;
1001 ret = tokenchecker_inputchar(&checker, ':', &val);
1002 if (ret != TOKENCHECKER_DETERMINE) {
1003 printf("tokenchecker_inputchar fail: end character\n");
1005 return TEST_RESULT_FAIL;
1008 printf("tokenchecker_inputchar fail: select value\n");
1010 return TEST_RESULT_FAIL;
1012 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1013 if (strncmp(str, str2, len2) != 0) {
1014 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1016 return TEST_RESULT_FAIL;
1018 ret = tokenchecker_inputchar(&checker, ':', &val);
1019 if (ret != TOKENCHECKER_AFTER_END) {
1020 printf("tokenchecker_inputchar fail: after end\n");
1022 return TEST_RESULT_FAIL;
1026 return TEST_RESULT_PASS;
1029 LOCAL TEST_RESULT test_tokenchecker_nomatch_getlastmatchedstring_sequence(tokenchecker_t *checker, W num, UB *teststr, W teststr_len)
1031 W i, j, len2, ret, val;
1034 for (i = 0; i < num; i++) {
1035 ret = tokenchecker_inputchar(checker, teststr[i], &val);
1036 if (ret != TOKENCHECKER_CONTINUE) {
1037 printf("tokenchecker_inputchar fail: right string\n");
1038 return TEST_RESULT_FAIL;
1041 ret = tokenchecker_inputchar(checker, 'z', &val);
1042 if (ret != TOKENCHECKER_CONTINUE_NOMATCH) {
1043 printf("tokenchecker_inputchar fail: nomatch char\n");
1044 return TEST_RESULT_FAIL;
1046 tokenchecker_getlastmatchedstring(checker, &str2, &len2);
1048 printf("tokenchecker_getlastmatchedstring fail: length\n");
1049 return TEST_RESULT_FAIL;
1051 if (strncmp(teststr, str2, len2) != 0) {
1052 printf("tokenchecker_getlastmatchedstring fail: nomatch string\n");
1054 for (j = 0; j < len2; j++) {
1055 printf("%c", teststr[j]);
1058 for (j = 0; j < len2; j++) {
1059 printf("%c", str2[j]);
1062 return TEST_RESULT_FAIL;
1065 return TEST_RESULT_PASS;
1068 LOCAL TEST_RESULT test_tokenchecker_8()
1070 tokenchecker_t checker;
1075 str = strdup(test_tokenchecker_testdata_tuple_0001[0].name);
1078 tokenchecker_initialize(&checker,
1079 test_tokenchecker_testdata_tuple_0001,
1081 test_tokenchecker_testdata_etoken_0001);
1083 for (i = 1; i < len; i++) {
1084 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1085 if (result != TEST_RESULT_PASS) {
1088 tokenchecker_clear(&checker);
1093 return TEST_RESULT_PASS;
1096 LOCAL TEST_RESULT test_tokenchecker_9()
1098 tokenchecker_t checker;
1103 str = strdup(test_tokenchecker_testdata_tuple_0001[1].name);
1106 tokenchecker_initialize(&checker,
1107 test_tokenchecker_testdata_tuple_0001,
1109 test_tokenchecker_testdata_etoken_0001);
1111 for (i = 1; i < len; i++) {
1112 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1113 if (result != TEST_RESULT_PASS) {
1116 tokenchecker_clear(&checker);
1121 return TEST_RESULT_PASS;
1124 LOCAL TEST_RESULT test_tokenchecker_10()
1126 tokenchecker_t checker;
1131 str = strdup(test_tokenchecker_testdata_tuple_0001[2].name);
1134 tokenchecker_initialize(&checker,
1135 test_tokenchecker_testdata_tuple_0001,
1137 test_tokenchecker_testdata_etoken_0001);
1139 for (i = 1; i < len; i++) {
1140 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1141 if (result != TEST_RESULT_PASS) {
1144 tokenchecker_clear(&checker);
1149 return TEST_RESULT_PASS;
1152 LOCAL TEST_RESULT test_tokenchecker_11()
1154 tokenchecker_t checker;
1159 str = strdup(test_tokenchecker_testdata_tuple_0001[3].name);
1162 tokenchecker_initialize(&checker,
1163 test_tokenchecker_testdata_tuple_0001,
1165 test_tokenchecker_testdata_etoken_0001);
1167 for (i = 1; i < len; i++) {
1168 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1169 if (result != TEST_RESULT_PASS) {
1172 tokenchecker_clear(&checker);
1177 return TEST_RESULT_PASS;
1180 LOCAL TEST_RESULT test_tokenchecker_12()
1182 tokenchecker_t checker;
1187 str = strdup(test_tokenchecker_testdata_tuple_0001[4].name);
1190 tokenchecker_initialize(&checker,
1191 test_tokenchecker_testdata_tuple_0001,
1193 test_tokenchecker_testdata_etoken_0001);
1195 for (i = 1; i < len; i++) {
1196 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1197 if (result != TEST_RESULT_PASS) {
1200 tokenchecker_clear(&checker);
1205 return TEST_RESULT_PASS;
1208 LOCAL TEST_RESULT test_tokenchecker_13()
1210 tokenchecker_t checker;
1215 str = strdup(test_tokenchecker_testdata_tuple_0001[5].name);
1218 tokenchecker_initialize(&checker,
1219 test_tokenchecker_testdata_tuple_0001,
1221 test_tokenchecker_testdata_etoken_0001);
1223 for (i = 1; i < len; i++) {
1224 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1225 if (result != TEST_RESULT_PASS) {
1228 tokenchecker_clear(&checker);
1233 return TEST_RESULT_PASS;
1236 LOCAL TEST_RESULT test_tokenchecker_14()
1238 tokenchecker_t checker;
1243 str = strdup(test_tokenchecker_testdata_tuple_0001[6].name);
1246 tokenchecker_initialize(&checker,
1247 test_tokenchecker_testdata_tuple_0001,
1249 test_tokenchecker_testdata_etoken_0001);
1251 for (i = 1; i < len; i++) {
1252 result = test_tokenchecker_nomatch_getlastmatchedstring_sequence(&checker, i, str, len);
1253 if (result != TEST_RESULT_PASS) {
1256 tokenchecker_clear(&checker);
1261 return TEST_RESULT_PASS;
1264 /* testing endinput */
1266 LOCAL TEST_RESULT test_tokenchecker_15()
1268 tokenchecker_t checker;
1269 W i, j, len, len2, val, ret;
1272 str = strdup(test_tokenchecker_testdata_tuple_0001[0].name);
1275 tokenchecker_initialize(&checker,
1276 test_tokenchecker_testdata_tuple_0001,
1278 test_tokenchecker_testdata_etoken_0001);
1280 for (i = 0; i < len; i++) {
1281 ret = tokenchecker_inputchar(&checker, str[i], &val);
1282 if (ret != TOKENCHECKER_CONTINUE) {
1283 printf("tokenchecker_inputchar fail: right string\n");
1285 return TEST_RESULT_FAIL;
1287 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1288 if (strncmp(str, str2, len2) != 0) {
1289 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1291 for (j = 0; j < len; j++) {
1292 printf("%c", str[j]);
1295 for (j = 0; j < len; j++) {
1296 printf("%c", str2[j]);
1300 return TEST_RESULT_FAIL;
1303 ret = tokenchecker_endinput(&checker, &val);
1304 if (ret != TOKENCHECKER_DETERMINE) {
1305 printf("tokenchecker_endinput fail\n");
1307 return TEST_RESULT_FAIL;
1310 printf("tokenchecker_endinput fail: select value\n");
1312 return TEST_RESULT_FAIL;
1314 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1315 if (strncmp(str, str2, len2) != 0) {
1316 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1318 return TEST_RESULT_FAIL;
1320 ret = tokenchecker_inputchar(&checker, ':', &val);
1321 if (ret != TOKENCHECKER_AFTER_END) {
1322 printf("tokenchecker_inputchar fail: after end\n");
1324 return TEST_RESULT_FAIL;
1328 return TEST_RESULT_PASS;
1331 LOCAL TEST_RESULT test_tokenchecker_16()
1333 tokenchecker_t checker;
1334 W i, j, len, len2, val, ret;
1337 str = strdup(test_tokenchecker_testdata_tuple_0001[1].name);
1340 tokenchecker_initialize(&checker,
1341 test_tokenchecker_testdata_tuple_0001,
1343 test_tokenchecker_testdata_etoken_0001);
1345 for (i = 0; i < len; i++) {
1346 ret = tokenchecker_inputchar(&checker, str[i], &val);
1347 if (ret != TOKENCHECKER_CONTINUE) {
1348 printf("tokenchecker_inputchar fail: right string\n");
1350 return TEST_RESULT_FAIL;
1352 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1353 if (strncmp(str, str2, len2) != 0) {
1354 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1356 for (j = 0; j < len; j++) {
1357 printf("%c", str[j]);
1360 for (j = 0; j < len; j++) {
1361 printf("%c", str2[j]);
1365 return TEST_RESULT_FAIL;
1368 ret = tokenchecker_endinput(&checker, &val);
1369 if (ret != TOKENCHECKER_DETERMINE) {
1370 printf("tokenchecker_endinput fail\n");
1372 return TEST_RESULT_FAIL;
1375 printf("tokenchecker_endinput fail: select value\n");
1377 return TEST_RESULT_FAIL;
1379 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1380 if (strncmp(str, str2, len2) != 0) {
1381 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1383 return TEST_RESULT_FAIL;
1385 ret = tokenchecker_inputchar(&checker, ':', &val);
1386 if (ret != TOKENCHECKER_AFTER_END) {
1387 printf("tokenchecker_inputchar fail: after end\n");
1389 return TEST_RESULT_FAIL;
1393 return TEST_RESULT_PASS;
1396 LOCAL TEST_RESULT test_tokenchecker_17()
1398 tokenchecker_t checker;
1399 W i, j, len, len2, val, ret;
1402 str = strdup(test_tokenchecker_testdata_tuple_0001[2].name);
1405 tokenchecker_initialize(&checker,
1406 test_tokenchecker_testdata_tuple_0001,
1408 test_tokenchecker_testdata_etoken_0001);
1410 for (i = 0; i < len; i++) {
1411 ret = tokenchecker_inputchar(&checker, str[i], &val);
1412 if (ret != TOKENCHECKER_CONTINUE) {
1413 printf("tokenchecker_inputchar fail: right string\n");
1415 return TEST_RESULT_FAIL;
1417 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1418 if (strncmp(str, str2, len2) != 0) {
1419 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1421 for (j = 0; j < len; j++) {
1422 printf("%c", str[j]);
1425 for (j = 0; j < len; j++) {
1426 printf("%c", str2[j]);
1430 return TEST_RESULT_FAIL;
1433 ret = tokenchecker_endinput(&checker, &val);
1434 if (ret != TOKENCHECKER_DETERMINE) {
1435 printf("tokenchecker_endinput fail\n");
1437 return TEST_RESULT_FAIL;
1440 printf("tokenchecker_endinput fail: select value\n");
1442 return TEST_RESULT_FAIL;
1444 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1445 if (strncmp(str, str2, len2) != 0) {
1446 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1448 return TEST_RESULT_FAIL;
1450 ret = tokenchecker_inputchar(&checker, ':', &val);
1451 if (ret != TOKENCHECKER_AFTER_END) {
1452 printf("tokenchecker_inputchar fail: after end\n");
1454 return TEST_RESULT_FAIL;
1458 return TEST_RESULT_PASS;
1461 LOCAL TEST_RESULT test_tokenchecker_18()
1463 tokenchecker_t checker;
1464 W i, j, len, len2, val, ret;
1467 str = strdup(test_tokenchecker_testdata_tuple_0001[3].name);
1470 tokenchecker_initialize(&checker,
1471 test_tokenchecker_testdata_tuple_0001,
1473 test_tokenchecker_testdata_etoken_0001);
1475 for (i = 0; i < len; i++) {
1476 ret = tokenchecker_inputchar(&checker, str[i], &val);
1477 if (ret != TOKENCHECKER_CONTINUE) {
1478 printf("tokenchecker_inputchar fail: right string\n");
1480 return TEST_RESULT_FAIL;
1482 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1483 if (strncmp(str, str2, len2) != 0) {
1484 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1486 for (j = 0; j < len; j++) {
1487 printf("%c", str[j]);
1490 for (j = 0; j < len; j++) {
1491 printf("%c", str2[j]);
1495 return TEST_RESULT_FAIL;
1498 ret = tokenchecker_endinput(&checker, &val);
1499 if (ret != TOKENCHECKER_DETERMINE) {
1500 printf("tokenchecker_endinput fail\n");
1502 return TEST_RESULT_FAIL;
1505 printf("tokenchecker_endinput fail: select value\n");
1507 return TEST_RESULT_FAIL;
1509 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1510 if (strncmp(str, str2, len2) != 0) {
1511 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1513 return TEST_RESULT_FAIL;
1515 ret = tokenchecker_inputchar(&checker, ':', &val);
1516 if (ret != TOKENCHECKER_AFTER_END) {
1517 printf("tokenchecker_inputchar fail: after end\n");
1519 return TEST_RESULT_FAIL;
1523 return TEST_RESULT_PASS;
1526 LOCAL TEST_RESULT test_tokenchecker_19()
1528 tokenchecker_t checker;
1529 W i, j, len, len2, val, ret;
1532 str = strdup(test_tokenchecker_testdata_tuple_0001[4].name);
1535 tokenchecker_initialize(&checker,
1536 test_tokenchecker_testdata_tuple_0001,
1538 test_tokenchecker_testdata_etoken_0001);
1540 for (i = 0; i < len; i++) {
1541 ret = tokenchecker_inputchar(&checker, str[i], &val);
1542 if (ret != TOKENCHECKER_CONTINUE) {
1543 printf("tokenchecker_inputchar fail: right string\n");
1545 return TEST_RESULT_FAIL;
1547 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1548 if (strncmp(str, str2, len2) != 0) {
1549 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1551 for (j = 0; j < len; j++) {
1552 printf("%c", str[j]);
1555 for (j = 0; j < len; j++) {
1556 printf("%c", str2[j]);
1560 return TEST_RESULT_FAIL;
1563 ret = tokenchecker_endinput(&checker, &val);
1564 if (ret != TOKENCHECKER_DETERMINE) {
1565 printf("tokenchecker_endinput fail\n");
1567 return TEST_RESULT_FAIL;
1570 printf("tokenchecker_endinput fail: select value\n");
1572 return TEST_RESULT_FAIL;
1574 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1575 if (strncmp(str, str2, len2) != 0) {
1576 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1578 return TEST_RESULT_FAIL;
1580 ret = tokenchecker_inputchar(&checker, ':', &val);
1581 if (ret != TOKENCHECKER_AFTER_END) {
1582 printf("tokenchecker_inputchar fail: after end\n");
1584 return TEST_RESULT_FAIL;
1588 return TEST_RESULT_PASS;
1591 LOCAL TEST_RESULT test_tokenchecker_20()
1593 tokenchecker_t checker;
1594 W i, j, len, len2, val, ret;
1597 str = strdup(test_tokenchecker_testdata_tuple_0001[5].name);
1600 tokenchecker_initialize(&checker,
1601 test_tokenchecker_testdata_tuple_0001,
1603 test_tokenchecker_testdata_etoken_0001);
1605 for (i = 0; i < len; i++) {
1606 ret = tokenchecker_inputchar(&checker, str[i], &val);
1607 if (ret != TOKENCHECKER_CONTINUE) {
1608 printf("tokenchecker_inputchar fail: right string\n");
1610 return TEST_RESULT_FAIL;
1612 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1613 if (strncmp(str, str2, len2) != 0) {
1614 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1616 for (j = 0; j < len; j++) {
1617 printf("%c", str[j]);
1620 for (j = 0; j < len; j++) {
1621 printf("%c", str2[j]);
1625 return TEST_RESULT_FAIL;
1628 ret = tokenchecker_endinput(&checker, &val);
1629 if (ret != TOKENCHECKER_DETERMINE) {
1630 printf("tokenchecker_endinput fail\n");
1632 return TEST_RESULT_FAIL;
1635 printf("tokenchecker_endinput fail: select value\n");
1637 return TEST_RESULT_FAIL;
1639 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1640 if (strncmp(str, str2, len2) != 0) {
1641 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1643 return TEST_RESULT_FAIL;
1645 ret = tokenchecker_inputchar(&checker, ':', &val);
1646 if (ret != TOKENCHECKER_AFTER_END) {
1647 printf("tokenchecker_inputchar fail: after end\n");
1649 return TEST_RESULT_FAIL;
1653 return TEST_RESULT_PASS;
1656 LOCAL TEST_RESULT test_tokenchecker_21()
1658 tokenchecker_t checker;
1659 W i, j, len, len2, val, ret;
1662 str = strdup(test_tokenchecker_testdata_tuple_0001[6].name);
1665 tokenchecker_initialize(&checker,
1666 test_tokenchecker_testdata_tuple_0001,
1668 test_tokenchecker_testdata_etoken_0001);
1670 for (i = 0; i < len; i++) {
1671 ret = tokenchecker_inputchar(&checker, str[i], &val);
1672 if (ret != TOKENCHECKER_CONTINUE) {
1673 printf("tokenchecker_inputchar fail: right string\n");
1675 return TEST_RESULT_FAIL;
1677 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1678 if (strncmp(str, str2, len2) != 0) {
1679 printf("tokenchecker_getlastmatchedstring fail: right string\n");
1681 for (j = 0; j < len; j++) {
1682 printf("%c", str[j]);
1685 for (j = 0; j < len; j++) {
1686 printf("%c", str2[j]);
1690 return TEST_RESULT_FAIL;
1693 ret = tokenchecker_endinput(&checker, &val);
1694 if (ret != TOKENCHECKER_DETERMINE) {
1695 printf("tokenchecker_endinput fail\n");
1697 return TEST_RESULT_FAIL;
1700 printf("tokenchecker_endinput fail: select value\n");
1702 return TEST_RESULT_FAIL;
1704 tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
1705 if (strncmp(str, str2, len2) != 0) {
1706 printf("tokenchecker_getlastmatchedstring fail: end token\n");
1708 return TEST_RESULT_FAIL;
1710 ret = tokenchecker_inputchar(&checker, ':', &val);
1711 if (ret != TOKENCHECKER_AFTER_END) {
1712 printf("tokenchecker_inputchar fail: after end\n");
1714 return TEST_RESULT_FAIL;
1718 return TEST_RESULT_PASS;
1721 LOCAL VOID test_parselib_printresult(TEST_RESULT (*proc)(), B *test_name)
1725 printf("test_parselib: %s\n", test_name);
1726 printf("---------------------------------------------\n");
1728 if (result == TEST_RESULT_PASS) {
1729 printf("--pass---------------------------------------\n");
1731 printf("--fail---------------------------------------\n");
1733 printf("---------------------------------------------\n");
1736 EXPORT VOID test_parselib_main()
1738 test_parselib_printresult(test_character_reference_1, "test_character_reference_1");
1739 test_parselib_printresult(test_character_reference_2, "test_character_reference_2");
1740 test_parselib_printresult(test_character_reference_3, "test_character_reference_3");
1741 test_parselib_printresult(test_character_reference_4, "test_character_reference_4");
1742 test_parselib_printresult(test_character_reference_5, "test_character_reference_5");
1743 test_parselib_printresult(test_character_reference_6, "test_character_reference_6");
1744 test_parselib_printresult(test_character_reference_7, "test_character_reference_7");
1745 test_parselib_printresult(test_character_reference_8, "test_character_reference_8");
1746 test_parselib_printresult(test_character_reference_9, "test_character_reference_9");
1747 test_parselib_printresult(test_character_reference_10, "test_character_reference_10");
1748 test_parselib_printresult(test_character_reference_11, "test_character_reference_11");
1749 test_parselib_printresult(test_tokenchecker_1, "test_tokenchecker_1");
1750 test_parselib_printresult(test_tokenchecker_2, "test_tokenchecker_2");
1751 test_parselib_printresult(test_tokenchecker_3, "test_tokenchecker_3");
1752 test_parselib_printresult(test_tokenchecker_4, "test_tokenchecker_4");
1753 test_parselib_printresult(test_tokenchecker_5, "test_tokenchecker_5");
1754 test_parselib_printresult(test_tokenchecker_6, "test_tokenchecker_6");
1755 test_parselib_printresult(test_tokenchecker_7, "test_tokenchecker_7");
1756 test_parselib_printresult(test_tokenchecker_8, "test_tokenchecker_8");
1757 test_parselib_printresult(test_tokenchecker_9, "test_tokenchecker_9");
1758 test_parselib_printresult(test_tokenchecker_10, "test_tokenchecker_10");
1759 test_parselib_printresult(test_tokenchecker_11, "test_tokenchecker_11");
1760 test_parselib_printresult(test_tokenchecker_12, "test_tokenchecker_12");
1761 test_parselib_printresult(test_tokenchecker_13, "test_tokenchecker_13");
1762 test_parselib_printresult(test_tokenchecker_14, "test_tokenchecker_14");
1763 test_parselib_printresult(test_tokenchecker_15, "test_tokenchecker_15");
1764 test_parselib_printresult(test_tokenchecker_16, "test_tokenchecker_16");
1765 test_parselib_printresult(test_tokenchecker_17, "test_tokenchecker_17");
1766 test_parselib_printresult(test_tokenchecker_18, "test_tokenchecker_18");
1767 test_parselib_printresult(test_tokenchecker_19, "test_tokenchecker_19");
1768 test_parselib_printresult(test_tokenchecker_20, "test_tokenchecker_20");
1769 test_parselib_printresult(test_tokenchecker_21, "test_tokenchecker_21");