Author: mbenson Date: Mon Jul 23 14:32:41 2007 New Revision: 558866 URL: http://svn.apache.org/viewvc?view=rev&rev=558866 Log: [JXPATH-97] implement prefix matching for undeclared XML namespaces
Added: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml (with props) jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java (with props) Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/JXPathTestSuite.java Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java?view=diff&rev=558866&r1=558865&r2=558866 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java Mon Jul 23 14:32:41 2007 @@ -101,12 +101,12 @@ if (wildcard && testPrefix == null) { return true; } - if (wildcard || testName.getName() .equals(DOMNodePointer.getLocalName(node))) { String nodeNS = DOMNodePointer.getNamespaceURI(node); - return equalStrings(namespaceURI, nodeNS); + return equalStrings(namespaceURI, nodeNS) || nodeNS == null + && equalStrings(testPrefix, getPrefix(node)); } return false; } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java?view=diff&rev=558866&r1=558865&r2=558866 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java Mon Jul 23 14:32:41 2007 @@ -363,12 +363,12 @@ if (wildcard && testPrefix == null) { return true; } - if (wildcard || testName.getName() .equals(JDOMNodePointer.getLocalName(node))) { String nodeNS = JDOMNodePointer.getNamespaceURI(node); - return equalStrings(namespaceURI, nodeNS); + return equalStrings(namespaceURI, nodeNS) || nodeNS == null + && equalStrings(testPrefix, getPrefix(node)); } return false; } Added: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml?view=auto&rev=558866 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml (added) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml Mon Jul 23 14:32:41 2007 @@ -0,0 +1,20 @@ +<?xml version="1.0" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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. +--> +<ElementA A:myAttr="Mytype"> + <B:ElementB>MY VALUE</B:ElementB> +</ElementA> Propchange: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ExternalNS.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/JXPathTestSuite.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/JXPathTestSuite.java?view=diff&rev=558866&r1=558865&r2=558866 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/JXPathTestSuite.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/JXPathTestSuite.java Mon Jul 23 14:32:41 2007 @@ -29,7 +29,9 @@ import org.apache.commons.jxpath.ri.compiler.CoreOperationTest; import org.apache.commons.jxpath.ri.compiler.ExtensionFunctionTest; import org.apache.commons.jxpath.ri.compiler.VariableTest; +import org.apache.commons.jxpath.ri.model.ExternalXMLNamespaceTest; import org.apache.commons.jxpath.ri.model.MixedModelTest; +import org.apache.commons.jxpath.ri.model.XMLPreserveSpaceTest; import org.apache.commons.jxpath.ri.model.XMLSpaceTest; import org.apache.commons.jxpath.ri.model.beans.BeanModelTest; import org.apache.commons.jxpath.ri.model.container.ContainerModelTest; @@ -91,6 +93,8 @@ suite.addTestSuite(BasicTypeConverterTest.class); suite.addTestSuite(RecursiveAxesTest.class); suite.addTestSuite(XMLSpaceTest.class); + suite.addTestSuite(XMLPreserveSpaceTest.class); + suite.addTestSuite(ExternalXMLNamespaceTest.class); return suite; } } Added: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java?view=auto&rev=558866 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java (added) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java Mon Jul 23 14:32:41 2007 @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.model; + +import org.apache.commons.jxpath.JXPathContext; +import org.apache.commons.jxpath.JXPathTestCase; +import org.apache.commons.jxpath.xml.DocumentContainer; + +/** + * Test externally registered XML namespaces; JXPATH-97. + * + * @author Matt Benson + * @version $Revision$ $Date$ + */ +public class ExternalXMLNamespaceTest extends JXPathTestCase { + protected JXPathContext context; + + /** + * Construct a new instance of this test case. + * + * @param name Name of the test case + */ + public ExternalXMLNamespaceTest(String name) { + super(name); + } + + protected DocumentContainer createDocumentContainer(String model) { + DocumentContainer result = new DocumentContainer(JXPathTestCase.class + .getResource("ExternalNS.xml"), model); + //this setting only works for DOM, so no JDOM tests :| + result.setNamespaceAware(false); + return result; + } + + protected void doTest(String xpath, String model, String expected) { + JXPathContext context = JXPathContext + .newContext(createDocumentContainer(model)); + context.registerNamespace("A", "foo"); + context.registerNamespace("B", "bar"); + assertXPathValue(context, xpath, expected); + } + + protected void doTestAttribute(String model) { + doTest("/ElementA/@A:myAttr", model, "Mytype"); + } + + protected void doTestElement(String model) { + doTest("/ElementA/B:ElementB", model, "MY VALUE"); + } + + public void testAttributeDOM() { + doTestAttribute(DocumentContainer.MODEL_DOM); + } + + public void testElementDOM() { + doTestElement(DocumentContainer.MODEL_DOM); + } + +} \ No newline at end of file Propchange: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/ExternalXMLNamespaceTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]