You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2017/07/16 18:08:47 UTC

svn commit: r1802078 - in /jmeter/trunk: bin/testfiles/XPathTest2.xml src/core/org/apache/jmeter/util/XPathUtil.java src/functions/org/apache/jmeter/functions/XPathFileContainer.java test/src/org/apache/jmeter/functions/PackageTest.java xdocs/changes.xml

Author: pmouawad
Date: Sun Jul 16 18:08:47 2017
New Revision: 1802078

URL: http://svn.apache.org/viewvc?rev=1802078&view=rev
Log:
Bug 61260 - __XPath function returns null despite xpath checker founds matches
Bugzilla Id: 61260

Added:
    jmeter/trunk/bin/testfiles/XPathTest2.xml   (with props)
Modified:
    jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java
    jmeter/trunk/src/functions/org/apache/jmeter/functions/XPathFileContainer.java
    jmeter/trunk/test/src/org/apache/jmeter/functions/PackageTest.java
    jmeter/trunk/xdocs/changes.xml

Added: jmeter/trunk/bin/testfiles/XPathTest2.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/XPathTest2.xml?rev=1802078&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/XPathTest2.xml (added)
+++ jmeter/trunk/bin/testfiles/XPathTest2.xml Sun Jul 16 18:08:47 2017
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<note>
+  <to>Tove</to>
+  <from>Jani</from>
+  <heading>Reminder</heading>
+  <body>Don't forget me this weekend!</body>
+</note>
\ No newline at end of file

Propchange: jmeter/trunk/bin/testfiles/XPathTest2.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jmeter/trunk/bin/testfiles/XPathTest2.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java?rev=1802078&r1=1802077&r2=1802078&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java Sun Jul 16 18:08:47 2017
@@ -274,11 +274,11 @@ public class XPathUtil {
     }
     
     /**
-     * Return value for node
+     * Return value for node including node element
      * @param node Node
      * @return String
      */
-    private static String getValueForNode(Node node) {
+    private static String getNodeContent(Node node) {
         StringWriter sw = new StringWriter();
         try {
             Transformer t = TransformerFactory.newInstance().newTransformer();
@@ -289,6 +289,20 @@ public class XPathUtil {
         }
         return sw.toString();
     }
+    
+    /**
+     * @param node {@link Node}
+     * @return String content of node
+     */
+    public static String getValueForNode(Node node) {
+        // elements have empty nodeValue, but we are usually interested in their content
+        final Node firstChild = node.getFirstChild();
+        if (firstChild != null) {
+            return firstChild.getNodeValue();
+        } else {
+            return node.getNodeValue();
+        }
+    }
 
     /**
      * Extract NodeList using expression
@@ -347,15 +361,9 @@ public class XPathUtil {
                 }
                 if ( match instanceof Element ){
                     if (fragment){
-                        val = getValueForNode(match);
+                        val = getNodeContent(match);
                     } else {
-                        // elements have empty nodeValue, but we are usually interested in their content
-                        final Node firstChild = match.getFirstChild();
-                        if (firstChild != null) {
-                            val = firstChild.getNodeValue();
-                        } else {
-                            val = match.getNodeValue(); // TODO is this correct?
-                        }
+                        val = getValueForNode(match);
                     }
                 } else {
                    val = match.getNodeValue();

Modified: jmeter/trunk/src/functions/org/apache/jmeter/functions/XPathFileContainer.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/functions/org/apache/jmeter/functions/XPathFileContainer.java?rev=1802078&r1=1802077&r2=1802078&view=diff
==============================================================================
--- jmeter/trunk/src/functions/org/apache/jmeter/functions/XPathFileContainer.java (original)
+++ jmeter/trunk/src/functions/org/apache/jmeter/functions/XPathFileContainer.java Sun Jul 16 18:08:47 2017
@@ -83,7 +83,7 @@ public class XPathFileContainer {
     }
 
     public String getXPathString(int num) {
-        return nodeList.item(num).getNodeValue();
+        return XPathUtil.getValueForNode(nodeList.item(num));
     }
 
     /**

Modified: jmeter/trunk/test/src/org/apache/jmeter/functions/PackageTest.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/functions/PackageTest.java?rev=1802078&r1=1802077&r2=1802078&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/functions/PackageTest.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/functions/PackageTest.java Sun Jul 16 18:08:47 2017
@@ -97,6 +97,7 @@ public class PackageTest extends JMeterT
         xpath.addTest(new PackageTest("XPathtestNull"));
         xpath.addTest(new PackageTest("XPathtestrowNum"));
         xpath.addTest(new PackageTest("XPathEmpty"));
+        xpath.addTest(new PackageTest("XPathFile"));
         xpath.addTest(new PackageTest("XPathFile1"));
         xpath.addTest(new PackageTest("XPathFile2"));
         xpath.addTest(new PackageTest("XPathNoFile"));
@@ -348,6 +349,17 @@ public class PackageTest extends JMeterT
         String val=xp.execute();
         assertEquals("",val); // TODO - should check that error has been logged...
     }
+
+    public void XPathFile() throws Exception{
+        XPath xp = setupXPath("testfiles/XPathTest2.xml","note/body");
+        assertEquals("Don't forget me this weekend!",xp.execute());
+        
+        xp = setupXPath("testfiles/XPathTest2.xml","//note2");
+        assertEquals("", xp.execute());
+        
+        xp = setupXPath("testfiles/XPathTest2.xml","//note/to");
+        assertEquals("Tove", xp.execute());
+    }
     
     public void XPathFile1() throws Exception{
         XPath xp = setupXPath("testfiles/XPathTest.xml","//user/@username");

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1802078&r1=1802077&r2=1802078&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Sun Jul 16 18:08:47 2017
@@ -182,6 +182,7 @@ Summary
 <h3>Functions</h3>
 <ul>
     <li><bug>61258</bug>StringFromFile function is mentioned twice in the Function helper dialog</li>
+    <li><bug>61260</bug><code>__XPath</code> function returns null despite xpath checker founds matches</li>
 </ul>
 
 <h3>I18N</h3>