OSDN Git Service

add tokenchecker_endinput.
authorornse01 <ornse01@users.sourceforge.jp>
Sat, 2 Apr 2011 07:53:42 +0000 (07:53 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sat, 2 Apr 2011 07:53:42 +0000 (07:53 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchan/trunk@222 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/parselib.c
src/parselib.h
src/test_parselib.c

index 95f1fd4..e9ce26f 100644 (file)
@@ -125,6 +125,12 @@ EXPORT W tokenchecker_inputchar(tokenchecker_t *checker, UB c, W *val)
        return TOKENCHECKER_CONTINUE;
 }
 
+EXPORT W tokenchecker_endinput(tokenchecker_t *checker, W *val)
+{
+       /* should be more efficient? */
+       return tokenchecker_inputchar(checker, checker->endtokens[0], val);
+}
+
 EXPORT VOID tokenchecker_getlastmatchedstring(tokenchecker_t *checker, UB **str, W *len)
 {
        *str = (checker->namelist[checker->listindex_start]).name;
index a93a7a2..ce5337e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * parselib.h
  *
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -58,6 +58,7 @@ IMPORT VOID tokenchecker_initialize(tokenchecker_t *checker, tokenchecker_valuet
 IMPORT VOID tokenchecker_finalize(tokenchecker_t *checker);
 IMPORT VOID tokenchecker_clear(tokenchecker_t *checker);
 IMPORT W tokenchecker_inputchar(tokenchecker_t *checker, UB c, W *val);
+IMPORT W tokenchecker_endinput(tokenchecker_t *checker, W *val);
 IMPORT VOID tokenchecker_getlastmatchedstring(tokenchecker_t *checker, UB **str, W *len);
 
 typedef struct charreferparser_t_ charreferparser_t;
index 965f3f4..e3d03db 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * test_parselib.c
  *
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -1261,6 +1261,463 @@ LOCAL TEST_RESULT test_tokenchecker_14()
        return TEST_RESULT_PASS;
 }
 
+/* testing endinput */
+
+LOCAL TEST_RESULT test_tokenchecker_15()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[0].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 1) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_16()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[1].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 2) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_17()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[2].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 3) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_18()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[3].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 4) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_19()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[4].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 5) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_20()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[5].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 6) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_tokenchecker_21()
+{
+       tokenchecker_t checker;
+       W i, j, len, len2, val, ret;
+       UB *str, *str2;
+
+       str = strdup(test_tokenchecker_testdata_tuple_0001[6].name);
+       len = strlen(str);
+
+       tokenchecker_initialize(&checker,
+                                                        test_tokenchecker_testdata_tuple_0001,
+                                                        7,
+                                                        test_tokenchecker_testdata_etoken_0001);
+
+       for (i = 0; i < len; i++) {
+               ret = tokenchecker_inputchar(&checker, str[i], &val);
+               if (ret != TOKENCHECKER_CONTINUE) {
+                       printf("tokenchecker_inputchar fail: right string\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+               tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+               if (strncmp(str, str2, len2) != 0) {
+                       printf("tokenchecker_getlastmatchedstring fail: right string\n");
+                       printf(" ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str[j]);
+                       }
+                       printf(" : ");
+                       for (j = 0; j < len; j++) {
+                               printf("%c", str2[j]);
+                       }
+                       printf("\n");
+                       free(str);
+                       return TEST_RESULT_FAIL;
+               }
+       }
+       ret = tokenchecker_endinput(&checker, &val);
+       if (ret != TOKENCHECKER_DETERMINE) {
+               printf("tokenchecker_endinput fail\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       if (val != 7) {
+               printf("tokenchecker_endinput fail: select value\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       tokenchecker_getlastmatchedstring(&checker, &str2, &len2);
+       if (strncmp(str, str2, len2) != 0) {
+               printf("tokenchecker_getlastmatchedstring fail: end token\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+       ret = tokenchecker_inputchar(&checker, ':', &val);
+       if (ret != TOKENCHECKER_AFTER_END) {
+               printf("tokenchecker_inputchar fail: after end\n");
+               free(str);
+               return TEST_RESULT_FAIL;
+       }
+
+       free(str);
+       return TEST_RESULT_PASS;
+}
+
 LOCAL VOID test_parselib_printresult(TEST_RESULT (*proc)(), B *test_name)
 {
        TEST_RESULT result;
@@ -1303,4 +1760,11 @@ EXPORT VOID test_parselib_main()
        test_parselib_printresult(test_tokenchecker_12, "test_tokenchecker_12");
        test_parselib_printresult(test_tokenchecker_13, "test_tokenchecker_13");
        test_parselib_printresult(test_tokenchecker_14, "test_tokenchecker_14");
+       test_parselib_printresult(test_tokenchecker_15, "test_tokenchecker_15");
+       test_parselib_printresult(test_tokenchecker_16, "test_tokenchecker_16");
+       test_parselib_printresult(test_tokenchecker_17, "test_tokenchecker_17");
+       test_parselib_printresult(test_tokenchecker_18, "test_tokenchecker_18");
+       test_parselib_printresult(test_tokenchecker_19, "test_tokenchecker_19");
+       test_parselib_printresult(test_tokenchecker_20, "test_tokenchecker_20");
+       test_parselib_printresult(test_tokenchecker_21, "test_tokenchecker_21");
 }