From f82e31baf7ee6c94ae91177500c9b1c390446834 Mon Sep 17 00:00:00 2001 From: konn Date: Sat, 5 Jul 2008 12:04:28 +0000 Subject: [PATCH] * Added test code of the @page rules. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2807 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/css/README | 2 +- src/css/src/main.c | 24 ++++--- src/css/test/unit/page/Makefile | 25 +++++++ src/css/test/unit/page/test_page.c | 142 +++++++++++++++++++++++++++++++++++++ 4 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 src/css/test/unit/page/Makefile create mode 100644 src/css/test/unit/page/test_page.c diff --git a/src/css/README b/src/css/README index 978bbca6..44d2a4c2 100644 --- a/src/css/README +++ b/src/css/README @@ -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. diff --git a/src/css/src/main.c b/src/css/src/main.c index 959f5267..23f4d9b7 100644 --- a/src/css/src/main.c +++ b/src/css/src/main.c @@ -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 index 00000000..5653332b --- /dev/null +++ b/src/css/test/unit/page/Makefile @@ -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 index 00000000..a10a5449 --- /dev/null +++ b/src/css/test/unit/page/test_page.c @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#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, "") == 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, "") == 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, "") == 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 + */ -- 2.11.0