diff --git a/tests/test_xpath_functions.cpp b/tests/test_xpath_functions.cpp index 9cf8164..1ab4d71 100644 --- a/tests/test_xpath_functions.cpp +++ b/tests/test_xpath_functions.cpp @@ -688,6 +688,9 @@ TEST(xpath_function_arguments) // whitespace after function name CHECK_XPATH_BOOLEAN(c, "true ()", true); + + // too many arguments + CHECK_XPATH_FAIL("round(1, 2, 3, 4, 5, 6)"); } TEST_XML_FLAGS(xpath_string_value, "pcdata", parse_default | parse_pi | parse_comments) diff --git a/tests/test_xpath_parse.cpp b/tests/test_xpath_parse.cpp index cce3085..38032ea 100644 --- a/tests/test_xpath_parse.cpp +++ b/tests/test_xpath_parse.cpp @@ -37,6 +37,7 @@ TEST(xpath_number_error) TEST(xpath_variables) { CHECK_XPATH_FAIL("$var"); // not implemented + CHECK_XPATH_FAIL("$1"); } TEST(xpath_empty_expression) @@ -49,4 +50,36 @@ TEST(xpath_lexer_error) CHECK_XPATH_FAIL("!"); } +TEST(xpath_unmatched_braces) +{ + CHECK_XPATH_FAIL("node["); + CHECK_XPATH_FAIL("node[1"); + CHECK_XPATH_FAIL("node[]]"); + CHECK_XPATH_FAIL("node("); + CHECK_XPATH_FAIL("node(()"); + CHECK_XPATH_FAIL("(node)[1"); + CHECK_XPATH_FAIL("(1"); +} + +TEST(xpath_incorrect_step) +{ + CHECK_XPATH_FAIL("child::1"); + CHECK_XPATH_FAIL("something::*"); +} + +TEST(xpath_semantics_error) +{ + CHECK_XPATH_FAIL("1[1]"); + CHECK_XPATH_FAIL("1 | 1"); +} + +TEST(xpath_semantics_posinv) // coverage for contains() +{ + xpath_query("(node)[substring(1, 2, 3)]"); + xpath_query("(node)[concat(1, 2, 3, 4)]"); + xpath_query("(node)[count(foo)]"); + xpath_query("(node)[local-name()]"); + xpath_query("(node)[(node)[1]]"); +} + #endif