tests: Added support for XPath without exceptions

git-svn-id: http://pugixml.googlecode.com/svn/trunk@637 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-08-29 15:05:50 +00:00
parent 849a5a081b
commit 9292096c56
3 changed files with 24 additions and 1 deletions

View File

@ -3429,7 +3429,7 @@ namespace pugi
if (m_root->rettype() != xpath_type_node_set) if (m_root->rettype() != xpath_type_node_set)
{ {
#ifdef PUGIXML_NO_EXCEPTIONS #ifdef PUGIXML_NO_EXCEPTIONS
return xpath_node_set() return xpath_node_set();
#else #else
xpath_parse_result result = {"Expression does not evaluate to node set", 0}; xpath_parse_result result = {"Expression does not evaluate to node set", 0};
throw xpath_exception(result); throw xpath_exception(result);

View File

@ -96,6 +96,9 @@ bool test_xpath_number_nan(const pugi::xml_node& node, const pugi::char_t* query
bool test_xpath_fail_compile(const pugi::char_t* query) bool test_xpath_fail_compile(const pugi::char_t* query)
{ {
#ifdef PUGIXML_NO_EXCEPTIONS
return !pugi::xpath_query(query);
#else
try try
{ {
pugi::xpath_query q(query); pugi::xpath_query q(query);
@ -105,6 +108,7 @@ bool test_xpath_fail_compile(const pugi::char_t* query)
{ {
return true; return true;
} }
#endif
} }
void xpath_node_set_tester::check(bool condition) void xpath_node_set_tester::check(bool condition)

View File

@ -38,17 +38,21 @@ TEST_XML(xpath_api_select_single_node, "<node><head/><foo id='1'/><foo/><tail/><
CHECK(n5.node().attribute(STR("id")).as_int() == 1); CHECK(n5.node().attribute(STR("id")).as_int() == 1);
} }
#ifndef PUGIXML_NO_EXCEPTIONS
TEST(xpath_api_exception_what) TEST(xpath_api_exception_what)
{ {
try try
{ {
xpath_query q(STR("")); xpath_query q(STR(""));
CHECK(!"Expected exception");
} }
catch (const xpath_exception& e) catch (const xpath_exception& e)
{ {
CHECK(e.what()[0] != 0); CHECK(e.what()[0] != 0);
} }
} }
#endif
TEST_XML(xpath_api_node_bool_ops, "<node attr='value'/>") TEST_XML(xpath_api_node_bool_ops, "<node attr='value'/>")
{ {
@ -152,6 +156,12 @@ TEST_XML(xpath_api_evaluate, "<node attr='3'/>")
CHECK(ns.size() == 1 && ns[0].attribute() == doc.child(STR("node")).attribute(STR("attr"))); CHECK(ns.size() == 1 && ns[0].attribute() == doc.child(STR("node")).attribute(STR("attr")));
} }
#ifdef PUGIXML_NO_EXCEPTIONS
TEST(xpath_api_evaluate_node_set)
{
CHECK_XPATH_NODESET(xml_node(), STR("1"));
}
#else
TEST(xpath_api_evaluate_node_set) TEST(xpath_api_evaluate_node_set)
{ {
try try
@ -159,11 +169,14 @@ TEST(xpath_api_evaluate_node_set)
xpath_query q(STR("1")); xpath_query q(STR("1"));
q.evaluate_node_set(xml_node()); q.evaluate_node_set(xml_node());
CHECK(!"Expected exception");
} }
catch (const xpath_exception&) catch (const xpath_exception&)
{ {
} }
} }
#endif
TEST(xpath_api_return_type) TEST(xpath_api_return_type)
{ {
@ -172,4 +185,10 @@ TEST(xpath_api_return_type)
CHECK(xpath_query(STR("'s'")).return_type() == xpath_type_string); CHECK(xpath_query(STR("'s'")).return_type() == xpath_type_string);
CHECK(xpath_query(STR("true()")).return_type() == xpath_type_boolean); CHECK(xpath_query(STR("true()")).return_type() == xpath_type_boolean);
} }
// $$$
// xpath_query bool conversion
// xpath_query::result / xpath_exception::result
// result offset
// xpath_query::rettype for no root
#endif #endif