expat/tests runtests.c,1.40,1.41
"Fred L. Drake" <[email protected]>
| Newsgroups | gmane.text.xml.expat.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/expat/expat/tests
In directory sc8-pr-cvs1:/tmp/cvs-serv27375
Modified Files:
runtests.c
Log Message:
Oops, there were more regression tests for SF bug #653180; add these
as well.
Index: runtests.c
===================================================================
RCS file: /cvsroot/expat/expat/tests/runtests.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- runtests.c 30 Dec 2002 19:20:39 -0000 1.40
+++ runtests.c 30 Dec 2002 19:33:21 -0000 1.41
@@ -377,6 +377,7 @@
"\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 @@
{
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 @@
}
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 @@
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);