}
}
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) {
--- /dev/null
+#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
+ */