summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorfdrake <fdrake>2002-12-30 19:33:21 +0000
committerfdrake <fdrake>2002-12-30 19:33:21 +0000
commit27f0794cd9837819091200c9b7e9ac617d86fea0 (patch)
treeded3237a93a855616d5979db569fb5eacd25a5d7 /tests
parent7c45200f5b88158fe09a32e6bf8f35e47641654a (diff)
downloadlibexpat-27f0794cd9837819091200c9b7e9ac617d86fea0.tar.gz
Oops, there were more regression tests for SF bug #653180; add these
as well.
Diffstat (limited to 'tests')
-rw-r--r--tests/runtests.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/runtests.c b/tests/runtests.c
index d282c23..9cfae4e 100644
--- a/tests/runtests.c
+++ b/tests/runtests.c
@@ -377,6 +377,7 @@ START_TEST(test_line_number_after_parse)
"\n"
"\n</tag>";
int lineno;
+
if (XML_Parse(parser, text, strlen(text), 0) == XML_STATUS_ERROR)
xml_failure(parser);
lineno = XML_GetCurrentLineNumber(parser);
@@ -393,6 +394,7 @@ START_TEST(test_column_number_after_parse)
{
char *text = "<tag></tag>";
int colno;
+
if (XML_Parse(parser, text, strlen(text), 0) == XML_STATUS_ERROR)
xml_failure(parser);
colno = XML_GetCurrentColumnNumber(parser);
@@ -404,6 +406,107 @@ START_TEST(test_column_number_after_parse)
}
END_TEST
+static void
+start_element_event_handler2(void *userData, const XML_Char *name,
+ const XML_Char **attr)
+{
+ CharData *storage = (CharData *) userData;
+ char buffer[100];
+
+ sprintf(buffer, "<%s> at col:%d line:%d\n", name,
+ XML_GetCurrentColumnNumber(parser),
+ XML_GetCurrentLineNumber(parser));
+ CharData_AppendString(storage, buffer);
+}
+
+static void
+end_element_event_handler2(void *userData, const XML_Char *name)
+{
+ CharData *storage = (CharData *) userData;
+ char buffer[100];
+
+ sprintf(buffer, "</%s> at col:%d line:%d\n", name,
+ XML_GetCurrentColumnNumber(parser),
+ XML_GetCurrentLineNumber(parser));
+ CharData_AppendString(storage, buffer);
+}
+
+/* Regression test #3 for SF bug #653180. */
+START_TEST(test_line_and_column_numbers_inside_handlers)
+{
+ char *text =
+ "<a>\n" /* Unix end-of-line */
+ " <b>\r\n" /* Windows end-of-line */
+ " <c/>\r" /* Mac OS end-of-line */
+ " </b>\n"
+ " <d>\n"
+ " <f/>\n"
+ " </d>\n"
+ "</a>";
+ char *expected =
+ "<a> at col:0 line:1\n"
+ "<b> at col:2 line:2\n"
+ "<c> at col:4 line:3\n"
+ "</c> at col:8 line:3\n"
+ "</b> at col:2 line:4\n"
+ "<d> at col:2 line:5\n"
+ "<f> at col:4 line:6\n"
+ "</f> at col:8 line:6\n"
+ "</d> at col:2 line:7\n"
+ "</a> at col:0 line:8\n";
+ CharData storage;
+
+ CharData_Init(&storage);
+ XML_SetUserData(parser, &storage);
+ XML_SetStartElementHandler(parser, start_element_event_handler2);
+ XML_SetEndElementHandler(parser, end_element_event_handler2);
+ if (XML_Parse(parser, text, strlen(text), 1) == XML_STATUS_ERROR)
+ xml_failure(parser);
+
+ CharData_CheckString(&storage, expected);
+}
+END_TEST
+
+/* Regression test #4 for SF bug #653180. */
+START_TEST(test_line_number_after_error)
+{
+ char *text =
+ "<a>\n"
+ " <b>\n"
+ " </a>"; /* missing </b> */
+ int lineno;
+ if (XML_Parse(parser, text, strlen(text), 0) != XML_STATUS_ERROR)
+ fail("Expected a parse error");
+
+ lineno = XML_GetCurrentLineNumber(parser);
+ if (lineno != 3) {
+ char buffer[100];
+ sprintf(buffer, "expected 3 lines, saw %d", lineno);
+ fail(buffer);
+ }
+}
+END_TEST
+
+/* Regression test #5 for SF bug #653180. */
+START_TEST(test_column_number_after_error)
+{
+ char *text =
+ "<a>\n"
+ " <b>\n"
+ " </a>"; /* missing </b> */
+ int colno;
+ if (XML_Parse(parser, text, strlen(text), 0) != XML_STATUS_ERROR)
+ fail("Expected a parse error");
+
+ colno = XML_GetCurrentColumnNumber(parser);
+ if (colno != 4) {
+ char buffer[100];
+ sprintf(buffer, "expected 4 columns, saw %d", colno);
+ fail(buffer);
+ }
+}
+END_TEST
+
/* Regression test for SF bug #478332. */
START_TEST(test_really_long_lines)
{
@@ -1049,6 +1152,9 @@ make_basic_suite(void)
tcase_add_test(tc_basic, test_utf8_false_rejection);
tcase_add_test(tc_basic, test_line_number_after_parse);
tcase_add_test(tc_basic, test_column_number_after_parse);
+ tcase_add_test(tc_basic, test_line_and_column_numbers_inside_handlers);
+ tcase_add_test(tc_basic, test_line_number_after_error);
+ tcase_add_test(tc_basic, test_column_number_after_error);
tcase_add_test(tc_basic, test_really_long_lines);
tcase_add_test(tc_basic, test_end_element_events);
tcase_add_test(tc_basic, test_attr_whitespace_normalization);