test_bxmlparser.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. * This is a test for bxmlparser in $package$
  3. */
  4. #include "si_test.h"
  5. #include "bxmlparser.h"
  6. int show_xml(Bxml * xml, int depth) {
  7. int index;
  8. for (index = 0; index < depth; index++) {
  9. fprintf(stderr, " ");
  10. }
  11. if (xml->kind == BXML_TAG) {
  12. fprintf(stderr, ">%s", xml->name);
  13. } else if (xml->kind == BXML_TEXT) {
  14. fprintf(stderr, ">#text: %s", xml->text);
  15. } else {
  16. fprintf(stderr, ">%s: %s", xml->name, xml->text);
  17. }
  18. if (xml->attributes) {
  19. BxmlAttribute * nattr = xml->attributes;
  20. fprintf(stderr, "(");
  21. while (nattr) {
  22. fprintf(stderr, " %s->%s", nattr->name, nattr->value);
  23. nattr = nattr->next;
  24. }
  25. fprintf(stderr, " )");
  26. }
  27. fprintf(stderr, "\n");
  28. if (xml->child) {
  29. show_xml(xml->child, depth + 1);
  30. }
  31. if (xml->sibling) {
  32. show_xml(xml->sibling, depth);
  33. }
  34. return depth;
  35. }
  36. /*
  37. TEST_FUNC(bxmlparser_1) {
  38. BxmlParser * parser = bxmlparser_new();
  39. Bxml * result = bxmlparser_parse_str(parser, input1);
  40. TEST_NOTNULL(result);
  41. TEST_NULL(((void*)bxmlparser_get_error(parser)));
  42. if (bxmlparser_get_error(parser)) {
  43. fprintf(stderr, "%s : %d %d \n\n" , bxmlparser_get_error(parser),
  44. bxmlparser_get_line(parser), bxmlparser_get_column(parser));
  45. }
  46. bxmlparser_free(parser);
  47. if (result) {
  48. show_xml(result, 0);
  49. bxml_free(result);
  50. }
  51. TEST_DONE();
  52. }
  53. */
  54. #define TEST_XML(NAME, INPUT) \
  55. TEST_FUNC(NAME) { \
  56. BxmlParser * parser = bxmlparser_new(); \
  57. Bxml * result = bxmlparser_parse_str(parser, INPUT); \
  58. TEST_NOTNULL(result); \
  59. TEST_NULL(((void*)bxmlparser_get_error(parser))); \
  60. if (bxmlparser_get_error(parser)) { \
  61. fprintf(stderr, "%s : %d %d \n\n" , bxmlparser_get_error(parser), \
  62. bxmlparser_get_line(parser), bxmlparser_get_column(parser)); \
  63. } \
  64. bxmlparser_free(parser); \
  65. if (result) { \
  66. show_xml(result, 0); \
  67. bxml_free(result); \
  68. } \
  69. TEST_DONE(); \
  70. }
  71. #define TEST_XML_FILENAME(NAME, FILENAME) \
  72. TEST_FUNC(NAME) { \
  73. BxmlParser * parser = bxmlparser_new(); \
  74. Bxml * result = bxmlparser_parse_filename(parser, FILENAME); \
  75. TEST_NOTNULL(result); \
  76. TEST_NULL(((void*)bxmlparser_get_error(parser))); \
  77. if (bxmlparser_get_error(parser)) { \
  78. fprintf(stderr, "%s : %d %d \n\n" , bxmlparser_get_error(parser), \
  79. bxmlparser_get_line(parser), bxmlparser_get_column(parser)); \
  80. } \
  81. bxmlparser_free(parser); \
  82. if (result) { \
  83. show_xml(result, 0); \
  84. bxml_free(result); \
  85. } \
  86. TEST_DONE(); \
  87. }
  88. char * input_1 = "<?xml?><tag></tag>";
  89. TEST_XML(bxmlparser_1, input_1)
  90. char * input_2 = "<?xml version=\"1.0\"?><tag attr1=\"&amp;&#97;&amp;&#x61;&amp;val1\" attr2=\"val2\"></tag>";
  91. TEST_XML(bxmlparser_2, input_2)
  92. char * input_3 = "<?xml version=\"1.0\"?><tag>hello</tag>";
  93. TEST_XML(bxmlparser_3, input_3)
  94. char * input_4 = "<?xml version=\"1.0\"?><tag>hello &amp; world</tag>";
  95. TEST_XML(bxmlparser_4, input_4)
  96. char * input_5 = "<?xml version=\"1.0\"?><tag>hello <!--comment--> world</tag>";
  97. TEST_XML(bxmlparser_5, input_5)
  98. char * input_6 = "<?xml version=\"1.0\"?><script><![CDATA[ puts 'foo!' if (a > b) and (c < f) ]]></script>";
  99. TEST_XML(bxmlparser_6, input_6)
  100. char * input_7 = "<?xml version=\"1.0\"?><a><b/><c><c1>ok</c1></c><d>ok2</d></a>";
  101. TEST_XML(bxmlparser_7, input_7)
  102. TEST_XML_FILENAME(bxmlparser_fn_1, "data/map/map_0001.tmx");
  103. int main(void) {
  104. TEST_INIT();
  105. TEST_RUN(bxmlparser_1);
  106. TEST_RUN(bxmlparser_2);
  107. TEST_RUN(bxmlparser_3);
  108. TEST_RUN(bxmlparser_4);
  109. TEST_RUN(bxmlparser_5);
  110. TEST_RUN(bxmlparser_6);
  111. TEST_RUN(bxmlparser_7);
  112. TEST_RUN(bxmlparser_fn_1);
  113. TEST_REPORT();
  114. }