OSDN Git Service

* Added test code of the @page rules.
authorkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Sat, 5 Jul 2008 12:04:28 +0000 (12:04 +0000)
committerkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Sat, 5 Jul 2008 12:04:28 +0000 (12:04 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2807 1a406e8e-add9-4483-a2c8-d8cac5b7c224

src/css/README
src/css/src/main.c
src/css/test/unit/page/Makefile [new file with mode: 0644]
src/css/test/unit/page/test_page.c [new file with mode: 0644]

index 978bbca..44d2a4c 100644 (file)
@@ -1,3 +1,3 @@
 This library is Simple CSS( is based on CSS2 but not CSS2) Parser for C Language with Apache Licence 2.0.
-
+This parser is not check at all.
 
index 959f526..23f4d9b 100644 (file)
@@ -203,17 +203,23 @@ scss_parser(SCSSDocPtr_t doc, apr_pool_t *ppool,  const char *src)
         }
       }
       else if (strcasecmp(name, "@page") == 0) {
-        value1 = scss_trim(doc->pool, s_cut_before_next_semicoron_or_block(doc, s, &pass_len, &nl_counter));
-        s += pass_len + 1;
-        if (*s == '{') {
-          value2 = scss_trim(doc->pool, s_cut_before_block_closer(doc, ++s, &pass_len, &nl_counter));
-          s += pass_len + 1;
+        if (! *s || *s == ';') {
+          scss_parser_error(doc->userData, __func__,__FILE__,__LINE__,(s - pass_len - 1), nl_counter ,"@page parse error");
+          value1 = apr_pstrdup(doc->pool, "");
+          value2 = apr_pstrdup(doc->pool, "");
         }
         else {
-          /* ERROR */
-          value2 = "";
-          value1 = "";
-          name   = "";
+          value1 = scss_trim(doc->pool, s_cut_before_next_semicoron_or_block(doc, s, &pass_len, &nl_counter));
+          s += pass_len + 1;
+          if (*s == '{') {
+            value2 = scss_trim(doc->pool, s_cut_before_block_closer(doc, ++s, &pass_len, &nl_counter));
+            s += pass_len + 1;
+          }
+          else {
+            scss_parser_error(doc->userData, __func__,__FILE__,__LINE__,(s - pass_len - 1), nl_counter ,"@page parse error");
+            value1 = apr_pstrdup(doc->pool, "");
+            value2 = apr_pstrdup(doc->pool, "");
+          }
         }
       }
       else if (strcasecmp(name, "@page:first") == 0) {
diff --git a/src/css/test/unit/page/Makefile b/src/css/test/unit/page/Makefile
new file mode 100644 (file)
index 0000000..5653332
--- /dev/null
@@ -0,0 +1,25 @@
+.SUFFIXES:
+.SUFFIXES: .c.o
+
+TARGET= test_page
+
+TOP_DIR=../../..
+
+INC_DIR=-I$(TOP_DIR)/include \
+  -I/usr/include/apache2 \
+  -I/usr/include/apr-1.0 \
+  -I$(TOP_DIR)/include
+
+all:test
+
+
+
+test: $(TARGET)
+       ./$(TARGET)
+
+$(TARGET): $(TARGET).c
+       gcc -g -o $@ -Wall -lcunit $< $(INC_DIR) -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE  -lapr-1 -laprutil-1  $(TOP_DIR)/src/.libs/libscss.a
+
+
+clean:
+       rm -f ./$(TARGET)
diff --git a/src/css/test/unit/page/test_page.c b/src/css/test/unit/page/test_page.c
new file mode 100644 (file)
index 0000000..a10a544
--- /dev/null
@@ -0,0 +1,142 @@
+#include <CUnit/CUnit.h>
+#include <CUnit/Console.h>
+#include <CUnit/Basic.h>
+#include <stdio.h>
+#include "scss.h"
+
+
+#define CU_ASSERT_OR_GOTO_END(X) { CU_ASSERT((X)); if (CU_get_number_of_failures() != 0) goto end; }
+#define CU_ASSERT_STRING_EQUAL_GOTO_END(X, Y) do { CU_ASSERT_STRING_EQUAL((X),(Y)); if (CU_get_number_of_failures() != 0) goto end; } while (0)
+
+
+void test_page_001();
+void test_page_002();
+void test_page_003();
+/* pend */
+
+int
+main()
+{
+  CU_pSuite atkeyword_suite;
+  CU_initialize_registry();
+  atkeyword_suite = CU_add_suite("test Simple CSS(is based CSS2 but not CSS2)  Parser", NULL, NULL);
+  CU_add_test(atkeyword_suite, "@page 001",  test_page_001);
+  CU_add_test(atkeyword_suite, "@page 002",  test_page_002);
+  CU_add_test(atkeyword_suite, "@page 003",  test_page_003);
+  /* aend */
+
+  CU_basic_run_tests();
+  CU_cleanup_registry();
+
+  return(0);
+}
+
+
+void test_page_001()
+{
+#define TEST_STRING "@page"
+  SCSSDocPtr_t doc;
+  apr_pool_t *pool;
+
+  fprintf(stderr, "start %s\n", __func__);
+  apr_initialize();
+  apr_pool_create(&pool, NULL);
+
+  doc = scss_create_doc(pool);
+  scss_parser(doc, pool,  TEST_STRING);
+
+  CU_ASSERT_OR_GOTO_END(doc != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->type == SCSSTYPE_STYLESHEET);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->name, "<sentinel>") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->type == SCSSTYPE_ATKEYWORD);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "@page") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value2, "") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next == doc->rootNode->child);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->ref == &doc->rootNode->child->next);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child == NULL);
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+void test_page_002()
+{
+#define TEST_STRING "@page { size: 10px; }"
+  SCSSDocPtr_t doc;
+  apr_pool_t *pool;
+
+  fprintf(stderr, "start %s\n", __func__);
+  apr_initialize();
+  apr_pool_create(&pool, NULL);
+
+  doc = scss_create_doc(pool);
+  scss_parser(doc, pool,  TEST_STRING);
+
+  CU_ASSERT_OR_GOTO_END(doc != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->type == SCSSTYPE_STYLESHEET);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->name, "<sentinel>") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->type == SCSSTYPE_ATKEYWORD);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "@page") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value2, "size: 10px;") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next == doc->rootNode->child);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->ref == &doc->rootNode->child->next);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child == NULL);
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+void test_page_003()
+{
+#define TEST_STRING "@page aaa { size: 10px; }"
+  SCSSDocPtr_t doc;
+  apr_pool_t *pool;
+
+  fprintf(stderr, "start %s\n", __func__);
+  apr_initialize();
+  apr_pool_create(&pool, NULL);
+
+  doc = scss_create_doc(pool);
+  scss_parser(doc, pool,  TEST_STRING);
+
+  CU_ASSERT_OR_GOTO_END(doc != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->type == SCSSTYPE_STYLESHEET);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->name, "<sentinel>") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->type == SCSSTYPE_ATKEYWORD);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "@page") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "aaa") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value2, "size: 10px;") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next == doc->rootNode->child);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->ref == &doc->rootNode->child->next);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child == NULL);
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+/*
+ * vim:ts=2 et
+ */