OSDN Git Service

* Added TEXTAREA with -wap-input-format using style attribute and Added test code...
authorkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Mon, 7 Jul 2008 13:51:24 +0000 (13:51 +0000)
committerkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Mon, 7 Jul 2008 13:51:24 +0000 (13:51 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2823 1a406e8e-add9-4483-a2c8-d8cac5b7c224

src/chxj_chtml50.c
test/chxj_chtml50/test_chxj_chtml50.c

index 87b8b60..8d711f8 100644 (file)
@@ -119,8 +119,8 @@ static char *s_chtml50_link_tag           (void *pdoc, Node *node);
 static void  s_init_chtml50(chtml50_t *chtml, Doc *doc, request_rec *r, device_table *spec);
 
 static int   s_chtml50_search_emoji(chtml50_t *chtml, char *txt, char **rslt);
-static css_prop_list_t *s_chtml50_push_and_get_now_style(void *pdoc, Node *node);
-static css_prop_list_t *s_chtml50_nopush_and_get_now_style(void *pdoc, Node *node);
+static css_prop_list_t *s_chtml50_push_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value);
+static css_prop_list_t *s_chtml50_nopush_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value);
 
 
 tag_handler chtml50_handler[] = {
@@ -2749,6 +2749,7 @@ s_chtml50_start_textarea_tag(void *pdoc, Node *node)
   char          *attr_rows      = NULL;
   char          *attr_cols      = NULL;
   char          *attr_istyle    = NULL;
+  char          *attr_style     = NULL;
 
   chtml50 = GET_CHTML50(pdoc);
   doc     = chtml50->doc;
@@ -2776,9 +2777,12 @@ s_chtml50_start_textarea_tag(void *pdoc, Node *node)
     else if (STRCASEEQ('c','C',"cols", name) && value && *value) {
       attr_cols = value;
     }
+    else if (STRCASEEQ('s','S',"style", name) && value && *value) {
+      attr_style = value;
+    }
   }
   if (IS_CSS_ON(chtml50->entryp)) {
-    css_prop_list_t *style = s_chtml50_nopush_and_get_now_style(pdoc, node);
+    css_prop_list_t *style = s_chtml50_nopush_and_get_now_style(pdoc, node, attr_style);
     if (style) {
       css_property_t *wap_input_format = chxj_css_get_property_value(doc, style, "-wap-input-format");
       css_property_t *cur;
@@ -3418,7 +3422,7 @@ s_chtml50_link_tag(void *pdoc, Node *node)
 
 
 static css_prop_list_t *
-s_chtml50_push_and_get_now_style(void *pdoc, Node *node)
+s_chtml50_push_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value)
 {
   chtml50_t *chtml50 = GET_CHTML50(pdoc);
   Doc *doc = chtml50->doc;
@@ -3435,13 +3439,20 @@ s_chtml50_push_and_get_now_style(void *pdoc, Node *node)
     }
     chxj_css_push_prop_list(chtml50->css_prop_stack, dup_css);
     last_css = chxj_css_get_last_prop_list(chtml50->css_prop_stack);
+
+    if (style_attr_value) {
+      css_stylesheet_t *ssheet = chxj_css_parse_style_attr(doc, NULL, apr_pstrdup(doc->pool, node->name), NULL, NULL, apr_pstrdup(doc->pool, style_attr_value));
+      if (ssheet) {
+        chxj_css_prop_list_merge_property(doc, last_css, ssheet->selector_head.next);
+      }
+    }
   }
   return last_css;
 }
 
 
 static css_prop_list_t *
-s_chtml50_nopush_and_get_now_style(void *pdoc, Node *node)
+s_chtml50_nopush_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value)
 {
   chtml50_t *chtml50 = GET_CHTML50(pdoc);
   Doc *doc = chtml50->doc;
@@ -3457,6 +3468,13 @@ s_chtml50_nopush_and_get_now_style(void *pdoc, Node *node)
       chxj_css_prop_list_merge_property(doc, dup_css, selector);
     }
     last_css = dup_css;
+
+    if (style_attr_value) {
+      css_stylesheet_t *ssheet = chxj_css_parse_style_attr(doc, NULL, apr_pstrdup(doc->pool, node->name), NULL, NULL, apr_pstrdup(doc->pool, style_attr_value));
+      if (ssheet) {
+        chxj_css_prop_list_merge_property(doc, last_css, ssheet->selector_head.next);
+      }
+    }
   }
   return last_css;
 }
index c10e0cf..7df33cc 100644 (file)
@@ -520,6 +520,11 @@ void test_chtml50_textarea_tag_with_css_001();
 void test_chtml50_textarea_tag_with_css_002();
 void test_chtml50_textarea_tag_with_css_003();
 void test_chtml50_textarea_tag_with_css_004();
+
+void test_chtml50_textarea_tag_with_css_005();
+void test_chtml50_textarea_tag_with_css_006();
+void test_chtml50_textarea_tag_with_css_007();
+void test_chtml50_textarea_tag_with_css_008();
 /* pend */
 
 int
@@ -1002,6 +1007,11 @@ main()
   CU_add_test(chtml50_suite, "test textarea with css 002",                         test_chtml50_textarea_tag_with_css_002);
   CU_add_test(chtml50_suite, "test textarea with css 003",                         test_chtml50_textarea_tag_with_css_003);
   CU_add_test(chtml50_suite, "test textarea with css 004",                         test_chtml50_textarea_tag_with_css_004);
+
+  CU_add_test(chtml50_suite, "test textarea with css 005",                         test_chtml50_textarea_tag_with_css_005);
+  CU_add_test(chtml50_suite, "test textarea with css 006",                         test_chtml50_textarea_tag_with_css_006);
+  CU_add_test(chtml50_suite, "test textarea with css 007",                         test_chtml50_textarea_tag_with_css_007);
+  CU_add_test(chtml50_suite, "test textarea with css 008",                         test_chtml50_textarea_tag_with_css_008);
   /* aend */
 
   CU_basic_run_tests();
@@ -13764,6 +13774,143 @@ void test_chtml50_textarea_tag_with_css_004()
 #undef TEST_STRING
 #undef RESULT_STRING
 }
+
+
+/*===========================================================================*/
+/* TEXTAREA with style="-wap-input-format"                                   */
+/*===========================================================================*/
+void test_chtml50_textarea_tag_with_css_005()
+{
+#define  TEST_STRING "<html><head>" \
+                     "</head><body><textarea style=\"-wap-input-format: &quot;*&lt;ja:h&gt;&quot;\"></textarea></body></html>"
+#define  RESULT_STRING "<html><head></head><body><textarea istyle=\"1\"></textarea></body></html>"
+  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_get007;
+  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_chtml50(&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 == 0);
+
+  APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+void test_chtml50_textarea_tag_with_css_006()
+{
+#define  TEST_STRING "<html><head>" \
+                     "</head><body><textarea style=\"-wap-input-format: &quot;*&lt;ja:hk&gt;&quot;\"></textarea></body></html>"
+#define  RESULT_STRING "<html><head></head><body><textarea istyle=\"2\"></textarea></body></html>"
+  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_get007;
+  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_chtml50(&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 == 0);
+
+  APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+void test_chtml50_textarea_tag_with_css_007()
+{
+#define  TEST_STRING "<html><head>" \
+                     "</head><body><textarea style=\"-wap-input-format: &quot;*&lt;ja:en&gt;&quot;\"></textarea></body></html>"
+#define  RESULT_STRING "<html><head></head><body><textarea istyle=\"3\"></textarea></body></html>"
+  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_get007;
+  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_chtml50(&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 == 0);
+
+  APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+void test_chtml50_textarea_tag_with_css_008()
+{
+#define  TEST_STRING "<html><head>" \
+                     "</head><body><textarea style=\"-wap-input-format: &quot;*&lt;ja:n&gt;&quot;\"></textarea></body></html>"
+#define  RESULT_STRING "<html><head></head><body><textarea istyle=\"4\"></textarea></body></html>"
+  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_get007;
+  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_chtml50(&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 == 0);
+
+  APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
 /*
  * vim:ts=2 et
  */