OSDN Git Service

* Added test code of the qs_parse_attr() function.
authorkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Thu, 1 May 2008 09:52:44 +0000 (09:52 +0000)
committerkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Thu, 1 May 2008 09:52:44 +0000 (09:52 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/RELEASE_0_12_0@2594 1a406e8e-add9-4483-a2c8-d8cac5b7c224

src/qs_parse_attr.c
test/qs_parse_attr/Makefile [new file with mode: 0644]
test/qs_parse_attr/test_qs_parse_attr.c [new file with mode: 0644]

index 1428a72..3b35e51 100644 (file)
@@ -34,6 +34,15 @@ qs_parse_attr(Doc *doc, const char *s, int len, int *pos)
   int   use_quote;
   int   backslash;
 
+  if (! doc) {
+    QX_LOGGER_FATAL("runtime exception: qs_parse_attr(): doc is null");
+    return NULL;
+  }
+  if (! doc->pool) {
+    QX_LOGGER_FATAL("runtime exception: qs_parse_attr(): doc->pool is null");
+    return NULL;
+  }
+  if (! s) return NULL;
   use_quote = 0;
   backslash = 0;
 
diff --git a/test/qs_parse_attr/Makefile b/test/qs_parse_attr/Makefile
new file mode 100644 (file)
index 0000000..2f9eebf
--- /dev/null
@@ -0,0 +1,25 @@
+.SUFFIXES:
+.SUFFIXES: .c.o
+
+TARGET= test_qs_parse_attr
+
+TOP_DIR=../..
+
+INC_DIR=-I$(TOP_DIR)/include \
+  -I/usr/include/apache2 \
+  -I/usr/include/apr-1.0 \
+  -I$(TOP_DIR)/src
+
+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 
+
+
+clean:
+       rm -f ./$(TARGET)
diff --git a/test/qs_parse_attr/test_qs_parse_attr.c b/test/qs_parse_attr/test_qs_parse_attr.c
new file mode 100644 (file)
index 0000000..71f560b
--- /dev/null
@@ -0,0 +1,375 @@
+#include <CUnit/CUnit.h>
+#include <CUnit/Console.h>
+#include <CUnit/Basic.h>
+#include <stdio.h>
+#define CHXJ_TEST
+#define IMG_NOT_CONVERT_FILENAME
+
+#include "apr.h"
+#include "apr_strings.h"
+#include "chxj_apache.h"
+#include "chxj_str_util.h"
+#include "chxj_str_util.c"
+#include "qs_ignore_sp.c"
+#include "qs_log.c"
+#include "qs_malloc.c"
+#include "qs_parse_string.c"
+#include "qs_parse_attr.c"
+#include "qs_parse_tag.c"
+#include <iconv.h>
+
+
+/*===========================================================================*/
+/* qs_new_tag();                                                             */
+/*===========================================================================*/
+void test_qs_parse_attr_001();
+void test_qs_parse_attr_002();
+void test_qs_parse_attr_003();
+void test_qs_parse_attr_004();
+void test_qs_parse_attr_005();
+void test_qs_parse_attr_006();
+void test_qs_parse_attr_007();
+void test_qs_parse_attr_008();
+/* pend */
+
+void test_log_rerror(const char *file, int line, int level, apr_status_t status, const request_rec *r, const char *fmt, ...)
+{
+  va_list ap;
+  fprintf(stderr, "ERROR LOG %s:%d ", file,line);
+  va_start(ap, fmt);
+  vfprintf(stderr, fmt,ap);
+  va_end(ap);
+  fprintf(stderr, "\n");
+}
+void test_log_error(const char *file, int line, int level, apr_status_t status, const request_rec *r, const char *fmt, ...)
+{
+  va_list ap;
+  fprintf(stderr, "ERROR LOG %s:%d ", file,line);
+  va_start(ap, fmt);
+  vfprintf(stderr, fmt,ap);
+  va_end(ap);
+  fprintf(stderr, "\n");
+}
+
+int
+main()
+{
+  CU_pSuite str_util_suite;
+  CU_initialize_registry();
+  str_util_suite = CU_add_suite("test qs_parse_attr.c", NULL, NULL);
+  /*=========================================================================*/
+  /* qs_new_tag()                                                            */
+  /*=========================================================================*/
+  CU_add_test(str_util_suite, "qs_parse_attr() 001",                               test_qs_parse_attr_001);
+  CU_add_test(str_util_suite, "qs_parse_attr() 002",                               test_qs_parse_attr_002);
+  CU_add_test(str_util_suite, "qs_parse_attr() 003",                               test_qs_parse_attr_003);
+  CU_add_test(str_util_suite, "qs_parse_attr() 004",                               test_qs_parse_attr_004);
+  CU_add_test(str_util_suite, "qs_parse_attr() 005",                               test_qs_parse_attr_005);
+  CU_add_test(str_util_suite, "qs_parse_attr() 006",                               test_qs_parse_attr_006);
+  CU_add_test(str_util_suite, "qs_parse_attr() 007",                               test_qs_parse_attr_007);
+  CU_add_test(str_util_suite, "qs_parse_attr() 008",                               test_qs_parse_attr_008);
+  /* aend */
+
+  CU_basic_run_tests();
+  CU_cleanup_registry();
+
+  return(0);
+}
+
+
+
+#define APR_INIT \
+  apr_pool_t *p; \
+  Doc doc;  \
+  do { \
+    apr_initialize(); \
+    apr_pool_create(&p, NULL); \
+    memset(&doc, 0, sizeof(Doc)); \
+    doc.pool = p; \
+  } \
+  while (0)
+
+#define APR_TERM \
+  do { \
+    apr_terminate(); \
+  } while (0)
+
+#define COOKIE_INIT(X) \
+  do { \
+    X.cookie_id = "test_cookie_id"; \
+  } while (0) \
+
+#define SPEC_INIT(X) \
+  do { \
+    X.html_spec_type = CHXJ_SPEC_Chtml_1_0; \
+  } while (0)
+
+
+
+
+/*===========================================================================*/
+/* qs_parse_attr()                                                           */
+/*===========================================================================*/
+#if 0
+Attr *
+qs_parse_attr(Doc *doc, const char *s, int len, int *pos) 
+{
+  int   ii;
+  int   start_pos;
+  int   size;
+  int   novalue;
+  char  *name;
+  char  *value;
+  Attr  *attr;
+  int   use_quote;
+  int   backslash;
+
+  use_quote = 0;
+  backslash = 0;
+
+  QX_LOGGER_DEBUG("start qs_parse_attr()");
+
+  /* ignore space */
+  ii = start_pos = qs_ignore_sp_and_quote(doc, s, len);
+  QX_LOGGER_DEBUG_INT("len",len);
+
+  /* get attr name */
+  for (;ii<len; ii++) {
+    if (is_white_space(s[ii])) 
+      break;
+
+    if (s[ii] == '=')
+      break;
+  }
+
+  size = ii - start_pos;
+  QX_LOGGER_DEBUG_INT("size", size);
+
+  /* 
+   * not found 
+   */
+  if (size == 0) {
+    *pos = ii;
+    return NULL;
+  }
+
+  name = (char *)apr_palloc(doc->pool,size+1);
+  memset(name, 0, size+1);
+  memcpy(name, &s[start_pos], size);
+
+  QX_LOGGER_DEBUG((char *)name);
+
+  novalue = 0;
+  /* find '=' */
+  for (;ii<len; ii++) {
+    if (is_white_space(s[ii])) 
+      /* ignore */
+      continue;
+    if (s[ii] == '=') 
+      ii++;
+    else 
+      /* novalue */
+      novalue = 1;
+    break;
+  }
+
+  if (ii == len) 
+    novalue = 1;
+
+  size = 0;
+  if (!novalue) {
+
+    /* 
+     * ignore space
+     */
+    ii += qs_ignore_sp(doc, &s[ii], len-ii);
+
+    backslash = 0;
+    for (;ii<len; ii++) {
+      if (s[ii] == '\\') {
+        backslash = 1;
+        break;
+      }
+      if (s[ii] == '\'' || s[ii] == '"') {
+        use_quote = 1;
+        ii++;
+        break;
+      }
+      if (!is_white_space(s[ii]))
+        break;
+    }
+  
+    start_pos = ii;
+    if (backslash && ii + 2 < len)
+      ii+=2;
+    
+    backslash = 0;
+    /* 
+     * get attr value 
+     */
+    for (;ii<len; ii++) {
+      if (is_sjis_kanji(s[ii])) {
+        ii++;
+        continue;
+      }
+
+      if (is_sjis_kana(s[ii])) 
+        continue;
+
+      if (is_white_space(s[ii])) {
+        if (! use_quote) 
+          break;
+      }
+
+      if (s[ii] == '\\') {
+        ii++;
+        continue;
+      }
+
+      if (s[ii] == '"') 
+        break;
+
+      if (s[ii] == '\'') 
+        break;
+    }
+    size = ii - start_pos;
+
+    QX_LOGGER_DEBUG_INT("size",size);
+  }
+
+  value = (char *)apr_palloc(doc->pool, size+1);
+  memset(value, 0, size+1);
+  if (size != 0) 
+    memcpy(value, &s[start_pos], size);
+
+  attr = qs_new_attr(doc);
+
+  attr->name  = name;
+  attr->value = value;
+
+  QX_LOGGER_DEBUG("end qs_parse_attr()");
+  *pos = ii;
+
+  return attr;
+}
+#endif
+void test_qs_parse_attr_001()
+{
+#define TEST_STRING "aaa=\"bbb\" ccc=\"ddd\""
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, sizeof(TEST_STRING)-1, &pos);
+  CU_ASSERT(ret != NULL);
+  CU_ASSERT(strcmp(ret->name,  "aaa") == 0);
+  CU_ASSERT(strcmp(ret->value, "bbb") == 0);
+  CU_ASSERT(pos == 8);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_002()
+{
+#define TEST_STRING "aaa=bbb ccc=\"ddd\""
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, sizeof(TEST_STRING)-1, &pos);
+  CU_ASSERT(ret != NULL);
+  CU_ASSERT(strcmp(ret->name,  "aaa") == 0);
+  CU_ASSERT(strcmp(ret->value, "bbb") == 0);
+  CU_ASSERT(pos == 7);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_003()
+{
+#define TEST_STRING "aaa=bbb ccc=ddd"
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, sizeof(TEST_STRING)-1, &pos);
+  CU_ASSERT(ret != NULL);
+  CU_ASSERT(strcmp(ret->name,  "aaa") == 0);
+  CU_ASSERT(strcmp(ret->value, "bbb") == 0);
+  CU_ASSERT(pos == 7);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_004()
+{
+#define TEST_STRING ""
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, sizeof(TEST_STRING)-1, &pos);
+  CU_ASSERT(ret == NULL);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_005()
+{
+#define TEST_STRING NULL
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, 0, &pos);
+  CU_ASSERT(ret == NULL);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_006()
+{
+#define TEST_STRING "abc=def"
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(NULL,TEST_STRING, 0, &pos);
+  CU_ASSERT(ret == NULL);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_007()
+{
+#define TEST_STRING "abc=def"
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  doc.pool = NULL;
+  ret = qs_parse_attr(&doc,TEST_STRING, 0, &pos);
+  CU_ASSERT(ret == NULL);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+void test_qs_parse_attr_008()
+{
+#define TEST_STRING "abc def=bbb"
+  Attr *ret;
+  int  pos;
+  APR_INIT;
+
+  ret = qs_parse_attr(&doc,TEST_STRING, sizeof(TEST_STRING)-1, &pos);
+  CU_ASSERT(ret != NULL);
+  CU_ASSERT(strcmp(ret->name, "abc") == 0);
+  CU_ASSERT(strcmp(ret->value, "") == 0);
+  CU_ASSERT(pos == 4);
+
+  APR_TERM;
+#undef TEST_STRING
+}
+/*
+ * vim:ts=2 et
+ */