summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan@13f79535-47bb-0310-9956-ffa450edef68>2019-05-12 15:18:58 +0000
committerivan <ivan@13f79535-47bb-0310-9956-ffa450edef68>2019-05-12 15:18:58 +0000
commit6e7404ff7cae37e304a3dcbc8a983db3d84dbe16 (patch)
tree540c538aa88be898bcad32c74476b7319deea9ee
parentbd1e1eb4758023699242efbd287bb682c695075d (diff)
downloadlibapr-6e7404ff7cae37e304a3dcbc8a983db3d84dbe16.tar.gz
On 'xmllite' branch: Merge changes from trunk.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/xmllite@1859155 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--test/testxml.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/testxml.c b/test/testxml.c
index 452e08abf..65e247be6 100644
--- a/test/testxml.c
+++ b/test/testxml.c
@@ -192,6 +192,8 @@ static void roundtrip(abts_case* tc, char* xml, char* expected, int lineno)
if (rv != APR_SUCCESS)
return;
+ apr_xml_quote_elem(pool, doc->root);
+
apr_xml_to_text(pool, doc->root, APR_XML_X2T_FULL_NS_LANG, doc->namespaces, NULL, &actual, NULL);
abts_str_equal(tc, expected, actual, lineno);
@@ -236,6 +238,90 @@ static void test_xml_roundtrip(abts_case *tc, void *data)
"aa<ns1:q/>"
"</ns2:test>",
__LINE__);
+
+ roundtrip(tc,
+ "<test>"
+ "&lt;sender&gt;John Smith&lt;/sender&gt;"
+ "</test>",
+ "<test xmlns:ns0=\"DAV:\">"
+ "&lt;sender&gt;John Smith&lt;/sender&gt;"
+ "</test>",
+ __LINE__);
+
+ roundtrip(tc,
+ "<test>"
+ "<![CDATA[<sender>John Smith</sender>]]>"
+ "</test>",
+ "<test xmlns:ns0=\"DAV:\">"
+ "&lt;sender&gt;John Smith&lt;/sender&gt;"
+ "</test>",
+ __LINE__);
+
+ roundtrip(tc,
+ "<elem> abc def </elem>",
+ "<elem xmlns:ns0=\"DAV:\"> abc def </elem>",
+ __LINE__);
+
+ roundtrip(tc,
+ "<elem> </elem>",
+ "<elem xmlns:ns0=\"DAV:\"> </elem>",
+ __LINE__);
+
+ roundtrip(tc,
+ "<?xml version='1.0' ?>\n"
+ "<elem> </elem>",
+ "<elem xmlns:ns0=\"DAV:\"> </elem>",
+ __LINE__);
+}
+
+static void get_xml_error(abts_case* tc,
+ char *errbuf,
+ apr_size_t errbufsize,
+ const char* xml)
+{
+ apr_xml_parser *parser;
+ apr_xml_doc *doc;
+ apr_status_t rv;
+ apr_size_t len = strlen(xml);
+ apr_pool_t *pool;
+
+ strcpy(errbuf, "");
+
+ apr_pool_create(&pool, p);
+
+ parser = apr_xml_parser_create(pool);
+
+ rv = apr_xml_parser_feed(parser, xml, len);
+
+ if (rv == APR_SUCCESS) {
+ rv = apr_xml_parser_done(parser, &doc);
+ ABTS_INT_EQUAL(tc, APR_EGENERAL, rv);
+ }
+
+ if (rv != APR_SUCCESS) {
+ apr_xml_parser_geterror(parser, errbuf, errbufsize);
+ }
+
+ apr_pool_destroy(pool);
+}
+
+static void test_xml_parser_geterror(abts_case *tc, void *data)
+{
+ char errbuf[256];
+
+ get_xml_error(tc, errbuf, sizeof(errbuf),
+ "<elem");
+
+#if APU_USE_EXPAT
+ ABTS_STR_EQUAL(tc, "XML parser error code: unclosed token (5)", errbuf);
+#endif
+
+ get_xml_error(tc, errbuf, sizeof(errbuf),
+ "<elem1><elem2></elem1>");
+
+#if APU_USE_EXPAT
+ ABTS_STR_EQUAL(tc, "XML parser error code: mismatched tag (7)", errbuf);
+#endif
}
abts_suite *testxml(abts_suite *suite)
@@ -245,6 +331,7 @@ abts_suite *testxml(abts_suite *suite)
abts_run_test(suite, test_xml_parser, NULL);
abts_run_test(suite, test_billion_laughs, NULL);
abts_run_test(suite, test_xml_roundtrip, NULL);
+ abts_run_test(suite, test_xml_parser_geterror, NULL);
return suite;
}