|
What this is
Other links
The source code
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jxpath.ri;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.JXPathTestCase;
import org.apache.commons.jxpath.ri.compiler.Constant;
import org.apache.commons.jxpath.ri.compiler.CoreFunction;
import org.apache.commons.jxpath.ri.compiler.CoreOperationAdd;
import org.apache.commons.jxpath.ri.compiler.CoreOperationAnd;
import org.apache.commons.jxpath.ri.compiler.CoreOperationDivide;
import org.apache.commons.jxpath.ri.compiler.CoreOperationEqual;
import org.apache.commons.jxpath.ri.compiler.CoreOperationGreaterThan;
import org.apache.commons.jxpath.ri.compiler.CoreOperationGreaterThanOrEqual;
import org.apache.commons.jxpath.ri.compiler.CoreOperationLessThan;
import org.apache.commons.jxpath.ri.compiler.CoreOperationLessThanOrEqual;
import org.apache.commons.jxpath.ri.compiler.CoreOperationMod;
import org.apache.commons.jxpath.ri.compiler.CoreOperationMultiply;
import org.apache.commons.jxpath.ri.compiler.CoreOperationNegate;
import org.apache.commons.jxpath.ri.compiler.CoreOperationNotEqual;
import org.apache.commons.jxpath.ri.compiler.CoreOperationOr;
import org.apache.commons.jxpath.ri.compiler.CoreOperationSubtract;
import org.apache.commons.jxpath.ri.compiler.CoreOperationUnion;
import org.apache.commons.jxpath.ri.compiler.ExpressionPath;
import org.apache.commons.jxpath.ri.compiler.ExtensionFunction;
import org.apache.commons.jxpath.ri.compiler.LocationPath;
import org.apache.commons.jxpath.ri.compiler.NameAttributeTest;
import org.apache.commons.jxpath.ri.compiler.VariableReference;
/**
* Test compiler.
*
* @author Dmitri Plotnikov
* @version $Revision: 1.5 $ $Date: 2004/02/29 14:17:44 $
*/
public class JXPathCompiledExpressionTest extends JXPathTestCase {
/**
* Construct a new instance of this test case.
*
* @param name Name of the test case
*/
public JXPathCompiledExpressionTest(String name) {
super(name);
}
public void testConstant() {
assertXPathExpression("1", Constant.class);
assertXPathExpression("1.5", Constant.class);
assertXPathExpression("'foo'", Constant.class);
}
public void testCoreFunction() {
assertXPathExpression("last()", CoreFunction.class);
assertXPathExpression("position()", CoreFunction.class);
assertXPathExpression("count(book)", CoreFunction.class);
assertXPathExpression("id(13)", CoreFunction.class);
assertXPathExpression("local-name()", CoreFunction.class);
assertXPathExpression("local-name(book)", CoreFunction.class);
assertXPathExpression("namespace-uri()", CoreFunction.class);
assertXPathExpression("namespace-uri(book)", CoreFunction.class);
assertXPathExpression("name()", CoreFunction.class);
assertXPathExpression("name(book)", CoreFunction.class);
assertXPathExpression("string(3)", CoreFunction.class);
assertXPathExpression("concat('a', 'b')", CoreFunction.class);
assertXPathExpression("starts-with('a', 'b')", CoreFunction.class);
assertXPathExpression("contains('a', 'b')", CoreFunction.class);
assertXPathExpression("substring-before('a', 1)", CoreFunction.class);
assertXPathExpression("substring-after('a', 2)", CoreFunction.class);
assertXPathExpression("substring('a', 2)", CoreFunction.class);
assertXPathExpression("substring('a', 2, 3)", CoreFunction.class);
assertXPathExpression("string-length('a')", CoreFunction.class);
assertXPathExpression("normalize-space('a')", CoreFunction.class);
assertXPathExpression("translate('a', 'b', 'c')", CoreFunction.class);
assertXPathExpression("boolean('true')", CoreFunction.class);
assertXPathExpression("not(1)", CoreFunction.class);
assertXPathExpression("true()", CoreFunction.class);
assertXPathExpression("false()", CoreFunction.class);
assertXPathExpression("lang('fr')", CoreFunction.class);
assertXPathExpression("number('12')", CoreFunction.class);
assertXPathExpression("sum(book/price)", CoreFunction.class);
assertXPathExpression("floor(11.4)", CoreFunction.class);
assertXPathExpression("ceiling(11.4)", CoreFunction.class);
assertXPathExpression("round(11.4)", CoreFunction.class);
assertXPathExpression("key('title', 'Hobbit')", CoreFunction.class);
assertXPathExpression("format-number(12, '##')", CoreFunction.class);
}
public void testCoreOperationAnd() {
assertXPathExpression(
"2 and 4",
CoreOperationAnd.class);
assertXPathExpression(
"2 > 1 and 4 < 5",
CoreOperationAnd.class);
}
public void testCoreOperationOr() {
assertXPathExpression(
"2 or 4",
CoreOperationOr.class);
assertXPathExpression(
"2 > 1 or 4 < 5",
CoreOperationOr.class);
assertXPathExpression(
"1 > 1 and 2 <= 2 or 3 = 4",
CoreOperationOr.class);
}
public void testCoreOperationEqual() {
assertXPathExpression(
"2 = 4",
CoreOperationEqual.class);
assertXPathExpression(
"2 + 1 = 3",
CoreOperationEqual.class);
}
public void testCoreOperationNameAttributeTest() {
assertXPathExpression(
"@name = 'bar'",
NameAttributeTest.class);
}
public void testCoreOperationNotEqual() {
assertXPathExpression(
"2 != 4",
CoreOperationNotEqual.class);
assertXPathExpression(
"2 + 1 != 3",
CoreOperationNotEqual.class);
}
public void testCoreOperationLessThan() {
assertXPathExpression(
"3<4",
CoreOperationLessThan.class,
"3 < 4");
assertXPathExpression(
"3<(2>=1)",
CoreOperationLessThan.class,
"3 < (2 >= 1)");
}
public void testCoreOperationLessThanOrEqual() {
assertXPathExpression(
"3<=4",
CoreOperationLessThanOrEqual.class,
"3 <= 4");
assertXPathExpression(
"3<=(2>=1)",
CoreOperationLessThanOrEqual.class,
"3 <= (2 >= 1)");
}
public void testCoreOperationGreaterThan() {
assertXPathExpression(
"3>4",
CoreOperationGreaterThan.class,
"3 > 4");
assertXPathExpression(
"3>(2>=1)",
CoreOperationGreaterThan.class,
"3 > (2 >= 1)");
assertXPathExpression(
"1 > (1 and 2 <= (2 or 3) = 4)",
CoreOperationGreaterThan.class);
}
public void testCoreOperationGreaterThanOrEqual() {
assertXPathExpression(
"3>=4",
CoreOperationGreaterThanOrEqual.class,
"3 >= 4");
assertXPathExpression(
"3>=(2>=1)",
CoreOperationGreaterThanOrEqual.class,
"3 >= (2 >= 1)");
}
public void testCoreOperationDivide() {
assertXPathExpression(
"2 div 4",
CoreOperationDivide.class);
assertXPathExpression(
"2|3 div -3",
CoreOperationDivide.class,
"2 | 3 div -3");
}
public void testCoreOperationMod() {
assertXPathExpression(
"2 mod 4",
CoreOperationMod.class);
assertXPathExpression(
"2|3 mod -3",
CoreOperationMod.class,
"2 | 3 mod -3");
}
public void testCoreOperationMultiply() {
assertXPathExpression(
"2*4",
CoreOperationMultiply.class,
"2 * 4");
assertXPathExpression(
"2*(3 + 1)",
CoreOperationMultiply.class,
"2 * (3 + 1)");
}
public void testCoreOperationMinus() {
assertXPathExpression(
"1 - 1",
CoreOperationSubtract.class);
assertXPathExpression(
"1 - 1 - 2",
CoreOperationSubtract.class);
assertXPathExpression(
"1 - (1 - 2)",
CoreOperationSubtract.class);
}
public void testCoreOperationSum() {
assertXPathExpression(
"3 + 1 + 4",
CoreOperationAdd.class);
assertXPathExpression(
"(3 + 1) + 4",
CoreOperationAdd.class,
"3 + 1 + 4");
assertXPathExpression(
"3 + (1 + 4)",
CoreOperationAdd.class,
"3 + 1 + 4");
assertXPathExpression(
"3 + -1",
CoreOperationAdd.class,
"3 + -1");
assertXPathExpression(
"2*-3 + -1",
CoreOperationAdd.class,
"2 * -3 + -1");
}
public void testCoreOperationUnaryMinus() {
assertXPathExpression("-3", CoreOperationNegate.class);
assertXPathExpression("-(3 + 1)", CoreOperationNegate.class);
}
public void testCoreOperationUnion() {
assertXPathExpression(
"3 | 1 | 4",
CoreOperationUnion.class);
}
public void testExpressionPath() {
assertXPathExpression(
"$x/foo/bar",
ExpressionPath.class);
assertXPathExpression(
"(2 + 2)/foo/bar",
ExpressionPath.class);
assertXPathExpression(
"$x[3][2 + 2]/foo/bar",
ExpressionPath.class);
}
public void testExtensionFunction() {
assertXPathExpression(
"my:function(3, other.function())",
ExtensionFunction.class);
}
public void testLocationPathAxisSelf() {
assertXPathExpression(
"self::foo:bar",
LocationPath.class);
assertXPathExpression(
".",
LocationPath.class);
}
public void testLocationPathAxisChild() {
assertXPathExpression(
"child::foo:bar",
LocationPath.class,
"foo:bar");
assertXPathExpression(
"foo:bar",
LocationPath.class);
assertXPathExpression(
"/foo:bar",
LocationPath.class);
assertXPathExpression(
"/foo/bar",
LocationPath.class);
assertXPathExpression(
"*",
LocationPath.class);
assertXPathExpression(
"foo:*",
LocationPath.class);
}
public void testLocationPathAxisParent() {
assertXPathExpression(
"parent::foo:bar",
LocationPath.class);
assertXPathExpression(
"..",
LocationPath.class);
}
public void testLocationPathAxisAttribute() {
assertXPathExpression(
"attribute::foo:bar",
LocationPath.class,
"@foo:bar");
assertXPathExpression(
"@foo:bar",
LocationPath.class);
assertXPathExpression(
"../@foo:bar",
LocationPath.class);
assertXPathExpression(
"@*",
LocationPath.class);
assertXPathExpression(
"@*[last()]",
LocationPath.class);
}
public void testLocationPathAxisDescendant() {
assertXPathExpression(
"descendant::foo:bar",
LocationPath.class);
}
public void testLocationPathAxisDescendantOrSelf() {
assertXPathExpression(
"descendant-or-self::foo:bar",
LocationPath.class);
assertXPathExpression(
"//foo",
LocationPath.class);
assertXPathExpression(
"foo//bar",
LocationPath.class);
}
public void testLocationPathAxisOther() {
assertXPathExpression(
"ancestor::foo:bar",
LocationPath.class);
assertXPathExpression(
"ancestor-or-self::foo:bar",
LocationPath.class);
assertXPathExpression(
"namespace::foo:bar",
LocationPath.class);
assertXPathExpression(
"preceding::foo:bar",
LocationPath.class);
assertXPathExpression(
"preceding-sibling::foo:bar",
LocationPath.class);
assertXPathExpression(
"following::foo:bar",
LocationPath.class);
assertXPathExpression(
"following-sibling::foo:bar",
LocationPath.class);
}
public void testLocationPathNodeTest() {
assertXPathExpression(
"node()",
LocationPath.class);
assertXPathExpression(
"text()",
LocationPath.class);
assertXPathExpression(
"comment()",
LocationPath.class);
assertXPathExpression(
"processing-instruction()",
LocationPath.class);
assertXPathExpression(
"processing-instruction('test')",
LocationPath.class);
}
public void testVariableReference() {
assertXPathExpression(
"$x",
VariableReference.class);
assertXPathExpression(
"$x:y",
VariableReference.class);
}
/**
* Compiles the xpath into an Expression, checks the expression
* class, converts the expression to string and checks that the string
* matches the expected one.
*/
private void assertXPathExpression(
String xpath,
Class expectedClass,
String expected)
{
JXPathCompiledExpression expression =
(JXPathCompiledExpression) JXPathContext.compile(xpath);
assertEquals(
"Expression class for " + xpath,
expectedClass,
expression.getExpression().getClass());
assertEquals(
"Expression toString() for " + xpath,
expected,
expression.getExpression().toString());
}
private void assertXPathExpression(
String xpath,
Class expectedClass)
{
assertXPathExpression(xpath, expectedClass, xpath);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.