tests: Added function arguments tests, added arithmetic operators tests
git-svn-id: http://pugixml.googlecode.com/svn/trunk@181 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
parent
3472d0272c
commit
83183769c1
@ -116,10 +116,6 @@ TEST(xpath_number_round)
|
|||||||
|
|
||||||
// round with 2 arguments
|
// round with 2 arguments
|
||||||
CHECK_XPATH_FAIL("round(1, 2)");
|
CHECK_XPATH_FAIL("round(1, 2)");
|
||||||
|
|
||||||
// round with negative zero results
|
|
||||||
// $$ CHECK_XPATH_NUMBER(c, "round(-0.3)", -0)
|
|
||||||
// $$ CHECK_XPATH_NUMBER(c, "round(-0)", -0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(xpath_boolean_boolean, "<node />")
|
TEST_XML(xpath_boolean_boolean, "<node />")
|
||||||
@ -498,3 +494,31 @@ TEST(xpath_string_translate)
|
|||||||
// translate with 4 arguments
|
// translate with 4 arguments
|
||||||
CHECK_XPATH_FAIL("translate('a', 'b', 'c', 'd')");
|
CHECK_XPATH_FAIL("translate('a', 'b', 'c', 'd')");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(xpath_function_arguments)
|
||||||
|
{
|
||||||
|
xml_node c;
|
||||||
|
|
||||||
|
// conversion to string
|
||||||
|
CHECK_XPATH_NUMBER(c, "string-length(12)", 2);
|
||||||
|
|
||||||
|
// conversion to number
|
||||||
|
CHECK_XPATH_NUMBER(c, "round('1.2')", 1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "round('1.7')", 2);
|
||||||
|
|
||||||
|
// conversion to boolean
|
||||||
|
CHECK_XPATH_BOOLEAN(c, "not('1')", false);
|
||||||
|
CHECK_XPATH_BOOLEAN(c, "not('')", true);
|
||||||
|
|
||||||
|
// conversion to node set
|
||||||
|
CHECK_XPATH_FAIL("sum(1)");
|
||||||
|
|
||||||
|
// expression evaluation
|
||||||
|
CHECK_XPATH_NUMBER(c, "round((2 + 2 * 2) div 4)", 2);
|
||||||
|
|
||||||
|
// empty expressions
|
||||||
|
CHECK_XPATH_FAIL("round(,)");
|
||||||
|
CHECK_XPATH_FAIL("substring(,)");
|
||||||
|
CHECK_XPATH_FAIL("substring('a',)");
|
||||||
|
CHECK_XPATH_FAIL("substring(,'a')");
|
||||||
|
}
|
||||||
|
|||||||
65
tests/test_xpath_operators.cpp
Normal file
65
tests/test_xpath_operators.cpp
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#include "common.hpp"
|
||||||
|
|
||||||
|
TEST_XML(xpath_operators_arithmetic, "<node><foo-bar>10</foo-bar><foo>2</foo><bar>3</bar></node>")
|
||||||
|
{
|
||||||
|
xml_node c;
|
||||||
|
xml_node n = doc.child("node");
|
||||||
|
|
||||||
|
// incorrect unary operator
|
||||||
|
CHECK_XPATH_FAIL("-");
|
||||||
|
|
||||||
|
// correct unary operator
|
||||||
|
CHECK_XPATH_NUMBER(c, "-1", -1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "--1", 1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "---1", -1);
|
||||||
|
|
||||||
|
// incorrect binary operators
|
||||||
|
CHECK_XPATH_FAIL("5+");
|
||||||
|
CHECK_XPATH_FAIL("5-");
|
||||||
|
CHECK_XPATH_FAIL("5*");
|
||||||
|
CHECK_XPATH_FAIL("+5");
|
||||||
|
CHECK_XPATH_FAIL("*5");
|
||||||
|
CHECK_XPATH_FAIL("1div2");
|
||||||
|
CHECK_XPATH_FAIL("1mod");
|
||||||
|
CHECK_XPATH_FAIL("1div");
|
||||||
|
|
||||||
|
// correct trivial binary operators
|
||||||
|
CHECK_XPATH_NUMBER(c, "1 + 2", 3);
|
||||||
|
CHECK_XPATH_NUMBER(c, "1+2", 3);
|
||||||
|
CHECK_XPATH_NUMBER(c, "1 * 2", 2);
|
||||||
|
CHECK_XPATH_NUMBER(c, "1*2", 2);
|
||||||
|
CHECK_XPATH_NUMBER(c, "1 div 2", 0.5);
|
||||||
|
|
||||||
|
// operator precedence
|
||||||
|
CHECK_XPATH_NUMBER(c, "2 + 2 * 2 div 1 mod 3", 3);
|
||||||
|
CHECK_XPATH_NUMBER(c, "2 + 2 * 2 div (1 mod 3)", 6);
|
||||||
|
CHECK_XPATH_NUMBER(c, "(2 + 2) * 2 div (1 mod 3)", 8);
|
||||||
|
CHECK_XPATH_NUMBER(c, "(2 + 2) * (2 div 1) mod 3", 2);
|
||||||
|
CHECK_XPATH_NUMBER(c, "2 - -2", 4);
|
||||||
|
CHECK_XPATH_NUMBER(c, "2--2", 4);
|
||||||
|
CHECK_XPATH_NUMBER(c, "1-2-3", -4);
|
||||||
|
|
||||||
|
// infinity/nan
|
||||||
|
CHECK_XPATH_STRING(c, "1 div 0", "Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "-1 div 0", "-Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "-1 div 0 + 1 div 0", "NaN");
|
||||||
|
CHECK_XPATH_STRING(c, "0 div 0", "NaN");
|
||||||
|
CHECK_XPATH_STRING(c, "1 div 0 + 1 div 0", "Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "-1 div 0 + -1 div 0", "-Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "1 div 0 + 100", "Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "-1 div 0 + 100", "-Infinity");
|
||||||
|
CHECK_XPATH_STRING(c, "0 div 0 + 100", "NaN");
|
||||||
|
|
||||||
|
// mod, from W3C standard
|
||||||
|
CHECK_XPATH_NUMBER(c, "5 mod 2", 1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "5 mod -2", 1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "-5 mod 2", -1);
|
||||||
|
CHECK_XPATH_NUMBER(c, "-5 mod -2", -1);
|
||||||
|
|
||||||
|
// correct subtraction parsing, from W3C standard
|
||||||
|
CHECK_XPATH_NUMBER(n, "foo-bar", 10);
|
||||||
|
CHECK_XPATH_NUMBER(n, "foo -bar", -1);
|
||||||
|
CHECK_XPATH_NUMBER(n, "foo - bar", -1);
|
||||||
|
CHECK_XPATH_NUMBER(n, "-foo-bar", -10);
|
||||||
|
CHECK_XPATH_NUMBER(n, "-foo -bar", -5);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user