From 23ce59119a0bcf75fea697ef94cd5a0be7bf5c95 Mon Sep 17 00:00:00 2001 From: konn Date: Sat, 28 Jun 2008 18:57:05 +0000 Subject: [PATCH] * Added test code of the TEXTAREA tag with CSS for CHTML1.0 converter. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2769 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_chtml10.c | 71 ++++++++++++++++++++++++----------- test/chxj_chtml10/test_chxj_chtml10.c | 51 +++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 21 deletions(-) diff --git a/src/chxj_chtml10.c b/src/chxj_chtml10.c index ce4c635f..e4502932 100644 --- a/src/chxj_chtml10.c +++ b/src/chxj_chtml10.c @@ -116,6 +116,8 @@ static void s_init_chtml10(chtml10_t *chtml, Doc *doc, request_rec *r, device_t static int s_chtml10_search_emoji(chtml10_t *chtml, char *txt, char **rslt); static char *s_chtml10_chxjif_tag (void *pdoc, Node *node); static char *s_chtml10_text (void *pdoc, Node *node); +static css_prop_list_t *s_push_and_get_now_style(void *pdoc, Node *node); +static css_prop_list_t *s_nopush_and_get_now_style(void *pdoc, Node *node); tag_handler chtml10_handler[] = { /* tagHTML */ @@ -604,22 +606,6 @@ s_chtml10_start_html_tag(void *pdoc, Node *node) doc = chtml10->doc; r = doc->r; -#if 0 - css_prop_list_t *last_css = NULL; - if (IS_CSS_ON(chtml10->entryp)) { - css_prop_list_t *dup_css; - css_selector_t *selector; - - last_css = chxj_css_get_last_prop_list(chtml10->css_prop_stack); - dup_css = chxj_dup_css_prop_list(doc, last_css); - selector = chxj_css_find_selector(doc, chtml10->style, node); - if (selector) { - chxj_css_prop_list_merge_property(doc, dup_css, selector); - } - chxj_css_push_prop_list(chtml10->css_prop_stack, dup_css); - last_css = chxj_css_get_last_prop_list(chtml10->css_prop_stack); - } -#endif /*--------------------------------------------------------------------------*/ /* start HTML tag */ /*--------------------------------------------------------------------------*/ @@ -2810,16 +2796,15 @@ s_chtml10_end_p_tag(void *pdoc, Node *UNUSED(child)) static char * s_chtml10_start_textarea_tag(void *pdoc, Node *node) { - Doc *doc; - request_rec *r; - chtml10_t *chtml10; - Attr *attr; + Doc *doc; + request_rec *r; + chtml10_t *chtml10; + Attr *attr; chtml10 = GET_CHTML10(pdoc); doc = chtml10->doc; r = doc->r; - chtml10->textarea_flag++; W_L("out; } + +static css_prop_list_t * +s_push_and_get_now_style(void *pdoc, Node *node) +{ + chtml10_t *chtml10 = GET_CHTML10(pdoc); + Doc *doc = chtml10->doc; + css_prop_list_t *last_css = NULL; + if (IS_CSS_ON(chtml10->entryp)) { + css_prop_list_t *dup_css; + css_selector_t *selector; + + last_css = chxj_css_get_last_prop_list(chtml10->css_prop_stack); + dup_css = chxj_dup_css_prop_list(doc, last_css); + selector = chxj_css_find_selector(doc, chtml10->style, node); + if (selector) { + chxj_css_prop_list_merge_property(doc, dup_css, selector); + } + chxj_css_push_prop_list(chtml10->css_prop_stack, dup_css); + last_css = chxj_css_get_last_prop_list(chtml10->css_prop_stack); + } + return last_css; +} + + +static css_prop_list_t * +s_nopush_and_get_now_style(void *pdoc, Node *node) +{ + chtml10_t *chtml10 = GET_CHTML10(pdoc); + Doc *doc = chtml10->doc; + css_prop_list_t *last_css = NULL; + if (IS_CSS_ON(chtml10->entryp)) { + css_prop_list_t *dup_css; + css_selector_t *selector; + + last_css = chxj_css_get_last_prop_list(chtml10->css_prop_stack); + dup_css = chxj_dup_css_prop_list(doc, last_css); + selector = chxj_css_find_selector(doc, chtml10->style, node); + if (selector) { + chxj_css_prop_list_merge_property(doc, dup_css, selector); + } + last_css = dup_css; + } + return last_css; +} /* * vim:ts=2 et */ diff --git a/test/chxj_chtml10/test_chxj_chtml10.c b/test/chxj_chtml10/test_chxj_chtml10.c index 7b20e1e4..133670d4 100644 --- a/test/chxj_chtml10/test_chxj_chtml10.c +++ b/test/chxj_chtml10/test_chxj_chtml10.c @@ -432,6 +432,8 @@ void test_chtml10_link_009(); void test_chtml10_html_tag_with_css_001(); void test_chtml10_meta_tag_with_css_001(); + +void test_chtml10_textarea_tag_with_css_001(); /* pend */ int @@ -826,6 +828,7 @@ main() CU_add_test(chtml10_suite, "test html with css 001", test_chtml10_html_tag_with_css_001); CU_add_test(chtml10_suite, "test meta with css 001", test_chtml10_meta_tag_with_css_001); + CU_add_test(chtml10_suite, "test textarea with css 001", test_chtml10_textarea_tag_with_css_001); /* aend */ CU_basic_run_tests(); @@ -10810,6 +10813,54 @@ void test_chtml10_meta_tag_with_css_001() #undef TEST_STRING #undef RESULT_STRING } +/******************************************************************************/ +/* textarea with CSS */ +/******************************************************************************/ +char *test_chxj_serf_get004(request_rec *r, apr_pool_t *ppool, const char *uri_path, int ss, apr_size_t *len) +{ + static char *css = "a:focus { display: none }\n" + "a:link { display: none }\n" + "a { display: none }\n" + "hr { display: none }\n" + "a:visited { display:none }\n" + "textarea { display: none }\n"; + *len = strlen(css); + call_check = 1; + return css; +} +void test_chtml10_textarea_tag_with_css_001() +{ +#define TEST_STRING "" \ + "" +#define RESULT_STRING "" + char *ret; + char *tmp; + device_table spec; + chxjconvrule_entry entry; + cookie_t cookie; + apr_size_t destlen; + APR_INIT; + chxj_serf_get = test_chxj_serf_get003; + call_check = 0; + + COOKIE_INIT(cookie); + + SPEC_INIT(spec); + destlen = sizeof(TEST_STRING)-1; + entry.action |= CONVRULE_CSS_ON_BIT; + + tmp = chxj_encoding(&r, TEST_STRING, &destlen); + ret = chxj_convert_chtml10(&r, &spec, tmp, destlen, &destlen, &entry, &cookie); + ret = chxj_rencoding(&r, ret, &destlen); + CU_ASSERT(ret != NULL); + CU_ASSERT(strcmp(RESULT_STRING, ret) == 0); + CU_ASSERT(destlen == sizeof(RESULT_STRING)-1); + CU_ASSERT(call_check == 1); + + APR_TERM; +#undef TEST_STRING +#undef RESULT_STRING +} /* test CSS */ /* -- 2.11.0