OSDN Git Service

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

src/css/src/main.c
src/css/test/unit/selector/test_selector.c

index 4ffff50..5b9c038 100644 (file)
@@ -165,14 +165,19 @@ scss_parser(SCSSDocPtr_t doc, apr_pool_t *ppool,  const char *src)
                 selector_node->name = one_selector;
                 selector_node->line = nl_counter;
                 selector_node->value2 = apr_pstrdup(doc->pool, "");
-                vv += pass_len;
-                if (*vv == '{') vv++;
-                selector_node->value1 = scss_trim(doc->pool, s_cut_before_block_closer(doc, vv, &pass_len, &nl_counter));
-                s_get_property_list(doc, selector_node, selector_node->value1);
                 s_add_child_node(doc, atnode, selector_node);
                 vv += pass_len;
-                vv = scss_trim(doc->pool, vv);
-                if (*vv == '}') vv++;
+                if (*vv != ';') {
+                  if (*vv == '{') vv++;
+                  selector_node->value1 = scss_trim(doc->pool, s_cut_before_block_closer(doc, vv, &pass_len, &nl_counter));
+                  s_get_property_list(doc, selector_node, selector_node->value1);
+                  vv += pass_len;
+                  vv = scss_trim(doc->pool, vv);
+                  if (*vv == '}') vv++;
+                }
+                else {
+                  selector_node->value1 = apr_pstrdup(doc->pool, "");
+                }
                 one_selector = s_get_one_selector(doc, vv, &pass_len, &nl_counter);
               }
             }
@@ -329,12 +334,17 @@ scss_parser(SCSSDocPtr_t doc, apr_pool_t *ppool,  const char *src)
         selector_node->line = nl_counter;
         selector_node->type = SCSSTYPE_SELECTOR;
         selector_node->name = one_selector;
-        s += pass_len;
-        if (*s == '{') s++;
-        selector_node->value1 = scss_trim(doc->pool, s_cut_before_block_closer(doc, s, &pass_len, &nl_counter));
-        s_get_property_list(doc, selector_node, selector_node->value1);
         s_add_child_node(doc, doc->rootNode, selector_node);
-        s += pass_len + 1;
+        s += pass_len;
+        if (*s != ';') {
+          if (*s == '{') s++;
+          selector_node->value1 = scss_trim(doc->pool, s_cut_before_block_closer(doc, s, &pass_len, &nl_counter));
+          s_get_property_list(doc, selector_node, selector_node->value1);
+          s += pass_len + 1;
+        }
+        else {
+          selector_node->value1 = apr_pstrdup(doc->pool, "");
+        }
       }
     }
     if (! *s) break;
@@ -648,7 +658,7 @@ s_get_one_selector(SCSSDocPtr_t doc, const char *s, apr_size_t *pass_len, apr_si
   while(*s) {
     PASS_COMMENT(s, &counter);
     JUDGE_STRINGS(s);
-    if (! sq && !dq && *s == '{') {
+    if (! sq && !dq && (*s == '{' || *s == ';')) {
       break;
     }
     s++;
index 56ed5d8..38fc211 100644 (file)
 
 
 void test_selector_001();
+void test_selector_002();
+void test_selector_003();
+void test_selector_004();
+void test_selector_005();
+void test_selector_006();
 /* pend */
 
 int
@@ -19,6 +24,11 @@ main()
   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, "selector 001",  test_selector_001);
+  CU_add_test(atkeyword_suite, "selector 002",  test_selector_002);
+  CU_add_test(atkeyword_suite, "selector 003",  test_selector_003);
+  CU_add_test(atkeyword_suite, "selector 004",  test_selector_004);
+  CU_add_test(atkeyword_suite, "selector 005",  test_selector_005);
+  CU_add_test(atkeyword_suite, "selector 006",  test_selector_006);
   /* aend */
 
   CU_basic_run_tests();
@@ -70,6 +80,219 @@ end:
   fprintf(stderr, "end %s\n", __func__);
 #undef TEST_STRING
 }
+void test_selector_002()
+{
+#define TEST_STRING "a1\n{ aaa:bbb; }"
+  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_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "a1") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "aaa:bbb;") == 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);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->name != NULL);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->name, "<sentinel>");
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->type == SCSSTYPE_PROPERTY);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->name, "aaa");
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->value1, "bbb");
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+void test_selector_003()
+{
+#define TEST_STRING "\na1\n{ aaa:bbb; }"
+  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_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "a1") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "aaa:bbb;") == 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);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->name != NULL);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->name, "<sentinel>");
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->type == SCSSTYPE_PROPERTY);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->name, "aaa");
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->value1, "bbb");
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+void test_selector_004()
+{
+#define TEST_STRING "\na1\n{\naaa:bbb;\n}"
+  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_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "a1") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "aaa:bbb;") == 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);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->name != NULL);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->name, "<sentinel>");
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child->next->type == SCSSTYPE_PROPERTY);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->name, "aaa");
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->child->next->value1, "bbb");
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
+void test_selector_005()
+{
+#define TEST_STRING "a1"
+  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_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "a1") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "") == 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_selector_006()
+{
+#define TEST_STRING "a1;a2 { aa:bb }"
+  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_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->name, "a1") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->value1, "") == 0);
+
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->type == SCSSTYPE_SELECTOR);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->next->name, "a2") == 0);
+  CU_ASSERT_OR_GOTO_END(strcasecmp(doc->rootNode->child->next->next->value1, "aa:bb") == 0);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->next == doc->rootNode->child);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->ref == &doc->rootNode->child->next->next);
+
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->child == NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->name != NULL);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->next->child->name, "<sentinel>");
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->type == SCSSTYPE_SENTINEL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next->name != NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next->type == SCSSTYPE_PROPERTY);
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->next->child->next->name, "aa");
+  CU_ASSERT_STRING_EQUAL_OR_GOTO_END(doc->rootNode->child->next->next->child->next->value1, "bb");
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next->child == NULL);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next->next == doc->rootNode->child->next->next->child);
+  CU_ASSERT_OR_GOTO_END(doc->rootNode->child->next->next->child->next->ref == &doc->rootNode->child->next->next->child->next);
+
+
+end:
+  apr_terminate();
+  fprintf(stderr, "end %s\n", __func__);
+#undef TEST_STRING
+}
 /*
  * vim:ts=2 et
  */