simplepathinterpretertest.java
来自「JXPath」· Java 代码 · 共 650 行 · 第 1/2 页
JAVA
650 行
/*
* 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.axes;
import java.util.HashMap;
import junit.framework.TestCase;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.NestedTestBean;
import org.apache.commons.jxpath.Pointer;
import org.apache.commons.jxpath.TestNull;
import org.apache.commons.jxpath.ri.model.NodePointer;
import org.apache.commons.jxpath.ri.model.VariablePointer;
import org.apache.commons.jxpath.ri.model.beans.BeanPointer;
import org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer;
import org.apache.commons.jxpath.ri.model.beans.CollectionPointer;
import org.apache.commons.jxpath.ri.model.beans.NullElementPointer;
import org.apache.commons.jxpath.ri.model.beans.NullPointer;
import org.apache.commons.jxpath.ri.model.beans.NullPropertyPointer;
import org.apache.commons.jxpath.ri.model.beans.TestBeanFactory;
import org.apache.commons.jxpath.ri.model.dom.DOMNodePointer;
import org.apache.commons.jxpath.ri.model.dynamic.DynamicPointer;
import org.apache.commons.jxpath.ri.model.dynamic.DynamicPropertyPointer;
public class SimplePathInterpreterTest extends TestCase {
private TestBeanWithNode bean;
private JXPathContext context;
/**
* Constructor for SimplePathInterpreterTest.
*/
public SimplePathInterpreterTest(String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(SimplePathInterpreterTest.class);
}
/**
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
bean = TestBeanWithNode.createTestBeanWithDOM();
HashMap submap = new HashMap();
submap.put("key", new NestedTestBean("Name 9"));
submap.put("strings", bean.getNestedBean().getStrings());
bean.getList().add(new int[]{1, 2});
bean.getList().add(bean.getVendor());
bean.getMap().put("Key3",
new Object[]{
new NestedTestBean("some"),
new Integer(2),
bean.getVendor(),
submap
}
);
bean.getMap().put("Key4", bean.getVendor());
bean.getMap().put("Key5", submap);
bean.getMap().put("Key6", new Object[0]);
context = JXPathContext.newContext(null, bean);
context.setLenient(true);
context.setFactory(new TestBeanFactory());
}
public void testDoStepNoPredicatesPropertyOwner() {
// Existing scalar property
assertValueAndPointer("/int",
new Integer(1),
"/int",
"Bb",
"BbB");
// self::
assertValueAndPointer("/./int",
new Integer(1),
"/int",
"Bb",
"BbB");
// Missing property
assertNullPointer("/foo",
"/foo",
"Bn");
// existingProperty/existingScalarProperty
assertValueAndPointer("/nestedBean/int",
new Integer(1),
"/nestedBean/int",
"BbBb",
"BbBbB");
// existingProperty/collectionProperty
assertValueAndPointer("/nestedBean/strings",
bean.getNestedBean().getStrings(),
"/nestedBean/strings",
"BbBb",
"BbBbC");
// existingProperty/missingProperty
assertNullPointer("/nestedBean/foo",
"/nestedBean/foo",
"BbBn");
// map/missingProperty
assertNullPointer("/map/foo",
"/map[@name='foo']",
"BbDd");
// Existing property by search in collection
assertValueAndPointer("/list/int",
new Integer(1),
"/list[3]/int",
"BbBb",
"BbBbB");
// Missing property by search in collection
assertNullPointer("/list/foo",
"/list[1]/foo",
"BbBn");
// existingProperty/missingProperty/missingProperty
assertNullPointer("/nestedBean/foo/bar",
"/nestedBean/foo/bar",
"BbBnNn");
// collection/existingProperty/missingProperty
assertNullPointer("/list/int/bar",
"/list[3]/int/bar",
"BbBbBn");
// collectionProperty/missingProperty/missingProperty
assertNullPointer("/list/foo/bar",
"/list[1]/foo/bar",
"BbBnNn");
// map/missingProperty/anotherStep
assertNullPointer("/map/foo/bar",
"/map[@name='foo']/bar",
"BbDdNn");
// Existing dynamic property
assertValueAndPointer("/map/Key1",
"Value 1",
"/map[@name='Key1']",
"BbDd",
"BbDdB");
// collectionProperty
assertValueAndPointer("/integers",
bean.getIntegers(),
"/integers",
"Bb",
"BbC");
}
public void testDoStepNoPredicatesStandard() {
// Existing DOM node
assertValueAndPointer("/vendor/location/address/city",
"Fruit Market",
"/vendor/location[2]/address[1]/city[1]",
"BbMMMM");
// Missing DOM node
assertNullPointer("/vendor/location/address/pity",
"/vendor/location[1]/address[1]/pity",
"BbMMMn");
// Missing DOM node inside a missing element
assertNullPointer("/vendor/location/address/itty/bitty",
"/vendor/location[1]/address[1]/itty/bitty",
"BbMMMnNn");
// Missing DOM node by search for the best match
assertNullPointer("/vendor/location/address/city/pretty",
"/vendor/location[2]/address[1]/city[1]/pretty",
"BbMMMMn");
}
public void testDoStepPredicatesPropertyOwner() {
// missingProperty[@name=foo]
assertNullPointer("/foo[@name='foo']",
"/foo[@name='foo']",
"BnNn");
// missingProperty[index]
assertNullPointer("/foo[3]",
"/foo[3]",
"Bn");
}
public void testDoStepPredicatesStandard() {
// Looking for an actual XML attribute called "name"
// nodeProperty/name[@name=value]
assertValueAndPointer("/vendor/contact[@name='jack']",
"Jack",
"/vendor/contact[2]",
"BbMM");
// Indexing in XML
assertValueAndPointer("/vendor/contact[2]",
"Jack",
"/vendor/contact[2]",
"BbMM");
// Indexing in XML, no result
assertNullPointer("/vendor/contact[5]",
"/vendor/contact[5]",
"BbMn");
// Combination of search by name and indexing in XML
assertValueAndPointer("/vendor/contact[@name='jack'][2]",
"Jack Black",
"/vendor/contact[4]",
"BbMM");
// Combination of search by name and indexing in XML
assertValueAndPointer("/vendor/contact[@name='jack'][2]",
"Jack Black",
"/vendor/contact[4]",
"BbMM");
}
public void testDoPredicateName() {
// existingProperty[@name=existingProperty]
assertValueAndPointer("/nestedBean[@name='int']",
new Integer(1),
"/nestedBean/int",
"BbBb",
"BbBbB");
// /self::node()[@name=existingProperty]
assertValueAndPointer("/.[@name='int']",
new Integer(1),
"/int",
"Bb",
"BbB");
// dynamicProperty[@name=existingProperty]
assertValueAndPointer("/map[@name='Key1']",
"Value 1",
"/map[@name='Key1']",
"BbDd",
"BbDdB");
// existingProperty[@name=collectionProperty]
assertValueAndPointer("/nestedBean[@name='strings']",
bean.getNestedBean().getStrings(),
"/nestedBean/strings",
"BbBb",
"BbBbC");
// existingProperty[@name=missingProperty]
assertNullPointer("/nestedBean[@name='foo']",
"/nestedBean[@name='foo']",
"BbBn");
// map[@name=collectionProperty]
assertValueAndPointer("/map[@name='Key3']",
bean.getMap().get("Key3"),
"/map[@name='Key3']",
"BbDd",
"BbDdC");
// map[@name=missingProperty]
assertNullPointer("/map[@name='foo']",
"/map[@name='foo']",
"BbDd");
// collectionProperty[@name=...] (find node)
assertValueAndPointer("/list[@name='fruitco']",
context.getValue("/vendor"),
"/list[5]",
"BbCM");
// collectionProperty[@name=...] (find map entry)
assertValueAndPointer("/map/Key3[@name='key']/name",
"Name 9",
"/map[@name='Key3'][4][@name='key']/name",
"BbDdCDdBb",
"BbDdCDdBbB");
// map/collectionProperty[@name...]
assertValueAndPointer("map/Key3[@name='fruitco']",
context.getValue("/vendor"),
"/map[@name='Key3'][3]",
"BbDdCM");
// Bean property -> DOM Node, name match
assertValueAndPointer("/vendor[@name='fruitco']",
context.getValue("/vendor"),
"/vendor",
"BbM");
// Bean property -> DOM Node, name mismatch
assertNullPointer("/vendor[@name='foo']",
"/vendor[@name='foo']",
"BbMn");
assertNullPointer("/vendor[@name='foo'][3]",
"/vendor[@name='foo'][3]",
"BbMn");
// existingProperty(bean)[@name=missingProperty]/anotherStep
assertNullPointer("/nestedBean[@name='foo']/bar",
"/nestedBean[@name='foo']/bar",
"BbBnNn");
// map[@name=missingProperty]/anotherStep
assertNullPointer("/map[@name='foo']/bar",
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?