=== modified file 'dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java' --- dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java 2013-05-19 18:49:47 +0000 +++ dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java 2013-08-12 13:41:59 +0000 @@ -28,13 +28,14 @@ */ import java.io.File; +import java.io.StringReader; import java.lang.reflect.Method; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; +import javax.xml.XMLConstants; +import javax.xml.namespace.NamespaceContext; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; import org.hisp.dhis.aggregation.AggregatedDataValueService; import org.hisp.dhis.aggregation.AggregatedOrgUnitDataValueService; @@ -101,6 +102,7 @@ import org.hisp.dhis.validation.ValidationRuleService; import org.springframework.aop.framework.Advised; import org.springframework.aop.support.AopUtils; +import org.xml.sax.InputSource; /** * @author Lars Helge Overland @@ -1039,6 +1041,61 @@ } // ------------------------------------------------------------------------- + // Allow xpath testing of dxf2 + // ------------------------------------------------------------------------- + + protected String xpathTest( String xpathString, String xml ) + throws XPathExpressionException + { + InputSource source = new InputSource( new StringReader( xml ) ); + XPathFactory factory = XPathFactory.newInstance(); + XPath xpath = factory.newXPath(); + xpath.setNamespaceContext( new Dxf2NamespaceResolver() ); + + return (String) xpath.evaluate( xpathString, source ); + } + + // we need this to resolve dxf2 namespace in xpath + protected class Dxf2NamespaceResolver + implements NamespaceContext + { + + @Override + public String getNamespaceURI( String prefix ) + { + if ( prefix == null ) + { + throw new IllegalArgumentException( "No prefix provided!" ); + } + else + { + if ( prefix.equals( "d" ) ) + { + return "http://dhis2.org/schema/dxf/2.0"; + } + else + { + return XMLConstants.NULL_NS_URI; + } + } + } + + @Override + public String getPrefix( String namespaceURI ) + { + // Not needed in this context. + return null; + } + + @Override + public Iterator getPrefixes( String namespaceURI ) + { + // Not needed in this context. + return null; + } + } + + // ------------------------------------------------------------------------- // Validation Criteria // ------------------------------------------------------------------------- === added directory 'dhis-2/dhis-support/dhis-support-test/src/test' === added directory 'dhis-2/dhis-support/dhis-support-test/src/test/java' === added directory 'dhis-2/dhis-support/dhis-support-test/src/test/java/org' === added directory 'dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp' === added directory 'dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis' === added file 'dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis/TestDhisTest.java' --- dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis/TestDhisTest.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis/TestDhisTest.java 2013-08-12 13:41:59 +0000 @@ -0,0 +1,50 @@ +package org.hisp.dhis; + + +import javax.xml.xpath.XPathExpressionException; +import org.hisp.dhis.dataelement.DataElement; +import org.junit.Test; + +/* + * Copyright (c) 2004-2012, University of Oslo All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the + * following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or other materials provided with the + * distribution. * Neither the name of the HISP project nor the names of its contributors may be used to endorse or + * promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/** + * + * @author bobj + */ + +import static org.junit.Assert.assertEquals; + +public class TestDhisTest + extends DhisConvenienceTest +{ + private static String XML = + "" + + "" + + "" + + "" + + "" + + ""; + + @Test + public void testXpath() throws XPathExpressionException + { + assertEquals("2", xpathTest("count(//d:dataElement)", XML)); + assertEquals("MAL_DEATHS", xpathTest("//d:dataElement[@name='Malaria deaths']/@code", XML)); + } +} === added directory 'dhis-2/dhis-support/dhis-support-test/src/test/resources'