Skip to content

Commit 335a313

Browse files
authored
Issue#128 Fixing failing due to passing string as part of multi state… (#132)
* Issue#128 Fixing failing due to passing string as part of multi statement result return * Fixing review comment * Fixing additional review comment
1 parent 0de2658 commit 335a313

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

marklogic-unit-test-client/src/main/java/com/marklogic/test/unit/JaxpServiceResponseUnmarshaller.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,18 @@
1717
import java.util.ArrayList;
1818
import java.util.List;
1919
import org.xml.sax.InputSource;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2022

2123
/**
2224
* JAXP-based implementation. Not the prettiest code, but doesn't have any 3rd-party dependencies,
2325
* only relies on what Java provides by itself.
2426
*/
2527
public class JaxpServiceResponseUnmarshaller implements ServiceResponseUnmarshaller {
2628

29+
protected final Logger logger = LoggerFactory.getLogger(getClass());
2730
private DocumentBuilder documentBuilder;
31+
private static int ELEMENT_TYPE = 1;
2832

2933
@Override
3034
public List<TestModule> parseTestList(String xml) {
@@ -67,10 +71,16 @@ public TestSuiteResult parseTestSuiteResult(String xml) {
6771
NodeList resultNodes = testNode.getChildNodes();
6872
String failureXml = null;
6973
for (int j = 0; j < resultNodes.getLength(); j++) {
70-
Element resultNode = (Element) resultNodes.item(j);
71-
if ("fail".equals(resultNode.getAttribute("type"))) {
72-
failureXml = toXml(resultNode);
73-
break;
74+
// An XQuery test module may return additional nodes, such as text nodes, which should be
75+
// ignored unless they are element nodes.
76+
if (resultNodes.item(j).getNodeType() == ELEMENT_TYPE) {
77+
Element resultNode = (Element) resultNodes.item(j);
78+
if ("fail".equals(resultNode.getAttribute("type"))) {
79+
failureXml = toXml(resultNode);
80+
break;
81+
}
82+
} else {
83+
logger.debug("Ignoring Node Type [" + resultNodes.item(j).getNodeType() + "]");
7484
}
7585
}
7686
testSuiteResult.addTestResult(new TestResult(testName, testTime, failureXml));
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
(:
2+
This module returns two assertions and then a text node; the intent is to verify that the text node
3+
is ignored by the Java code that parses the response into JUnit assertion results.
4+
:)
5+
import module namespace test = "http://marklogic.com/test" at "/test/test-helper.xqy";
6+
7+
let $doc1 :=
8+
<ul>
9+
<li>Supp1: Item1, Item2</li>
10+
<li>Supp2: Item1</li>
11+
<li>Supp3: Item2</li>
12+
</ul>
13+
let $doc2 :=
14+
<ul>
15+
<li>Supp1: Item1, Item2</li>
16+
<li>Supp2: Item1</li>
17+
<li>Supp3: Item2</li>
18+
</ul>
19+
let $doc3 :=
20+
<ul>
21+
<li>Supp1: Item1, Item3</li>
22+
<li>Supp2: Item1</li>
23+
<li>Supp3: Item2</li>
24+
</ul>
25+
return
26+
(test:assert-equal($doc1, $doc2), test:assert-not-equal($doc1, $doc3), "failMe")

0 commit comments

Comments
 (0)