← Back to team overview

dhis2-devs team mailing list archive

[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'