dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #23886
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 11636: Added convenience method for unit testing dxf using xpath expressions
------------------------------------------------------------
revno: 11636
committer: Bob Jolliffe <bobjolliffe@xxxxxxxxx>
branch nick: dhis2
timestamp: Mon 2013-08-12 14:41:59 +0100
message:
Added convenience method for unit testing dxf using xpath expressions
added:
dhis-2/dhis-support/dhis-support-test/src/test/
dhis-2/dhis-support/dhis-support-test/src/test/java/
dhis-2/dhis-support/dhis-support-test/src/test/java/org/
dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/
dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis/
dhis-2/dhis-support/dhis-support-test/src/test/java/org/hisp/dhis/TestDhisTest.java
dhis-2/dhis-support/dhis-support-test/src/test/resources/
modified:
dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== 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 =
+ "<dxf xmlns='http://dhis2.org/schema/dxf/2.0'>"
+ + "<dataElements>"
+ + "<dataElement code='MAL_CASES' name='Malaria cases' />"
+ + "<dataElement code='MAL_DEATHS' name='Malaria deaths' />"
+ + "</dataElements>"
+ + "</dxf>";
+
+ @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'