-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Wojciech Diakowski <wojciech.diakowski@fingo.pl>
- Loading branch information
1 parent
d823193
commit 4d8685c
Showing
2 changed files
with
375 additions
and
0 deletions.
There are no files selected for viewing
270 changes: 270 additions & 0 deletions
270
src/test/java/info/fingo/xactus/processor/test/ConformanceNodeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,270 @@ | ||
package info.fingo.xactus.processor.test; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
||
import org.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.ValueSource; | ||
|
||
import info.fingo.xactus.api.ResultSequence; | ||
|
||
/** | ||
* Inspired by NodeTestTest | ||
* but do not use variables and tests several context values instead | ||
* | ||
* '_B' - run on root as context | ||
* | ||
* @author Wojciech Diakowski <wojciech.diakowski@fingo.pl> | ||
* | ||
*/ | ||
public class ConformanceNodeTest extends ConformanceTestAbstract { | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
public void test_NodeTest001(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/bib2.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest001.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest001.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "/comment()"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = buildXMLResultString(rs); | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
public void test_NodeTest002(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/bib2.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest002.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest002.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "/processing-instruction()"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = buildXMLResultString(rs); | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
public void test_NodeTest006(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/bib.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest006.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest006.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "/bib/book/editor/affiliation/text()"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<result>" + buildXMLResultString(rs) + "</result>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 1 }) | ||
public void test_NodeTest006_B(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/bib.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest006.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest006.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "book/editor/affiliation/text()"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<result>" + buildXMLResultString(rs) + "</result>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1 }) | ||
// processing-instruction() finds no descendant PIs of the given name anywhere. | ||
public void test_NodeTest007_1(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TreeEmpty.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest007.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest007-1.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//processing-instruction('a-pi'))"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
// processing-instruction() gets all PIs of the given name, including those off | ||
// root. | ||
public void test_NodeTest007_2(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TopMany.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest007.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest007-2.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//processing-instruction('a-pi'))"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
// text() gets no descendant text nodes. | ||
public void test_NodeTest008_1(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/Tree1Child.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest008.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest008-1.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//center/text())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 1 }) | ||
// text() gets no descendant text nodes. | ||
public void test_NodeTest008_1_B(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/Tree1Child.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest008.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest008-1.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(north/near-north/center/text())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
// text() gets text nodes. | ||
public void test_NodeTest008_2(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TreeCompass.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest008.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest008-2.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//center/text())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 1 }) | ||
// text() gets text nodes. | ||
public void test_NodeTest008_2_B(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TreeCompass.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest008.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest008-2.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(north/near-north/center/text())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
// comment() gets no descendant comment nodes. | ||
public void test_NodeTest009_1(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/Tree1Child.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest009.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest009-1.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//center/comment())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 1 }) | ||
// comment() gets no descendant comment nodes. | ||
public void test_NodeTest009_1_B(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/Tree1Child.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest009.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest009-1.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(north/near-north/center/comment())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 0, 1, 2 }) | ||
// comment() gets comment nodes. | ||
public void test_NodeTest009_2(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TreeCompass.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest009.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest009-2.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(//center/comment())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
@ParameterizedTest | ||
@ValueSource(ints = { 1 }) | ||
// comment() gets comment nodes. | ||
public void test_NodeTest009_2_B(int context) throws Exception { | ||
|
||
String inputFile = "/TestSources/TreeCompass.xml"; | ||
// String xqFile = | ||
// "/Queries/XQuery/Expressions/PathExpr/Steps/NodeTest/NodeTest009.xq"; | ||
String resultFile = "/ExpectedTestResults/Expressions/PathExpr/Steps/NodeTest/NodeTest009-2.xml"; | ||
String expectedResult = getExpectedResult(resultFile); | ||
|
||
String xpath = "fn:count(north/near-north/center/comment())"; | ||
ResultSequence rs = evaluate(inputFile, xpath, context); | ||
|
||
String actual = "<out>" + buildResultString(rs) + "</out>"; | ||
assertEquals(expectedResult, actual); | ||
} | ||
|
||
} |
105 changes: 105 additions & 0 deletions
105
src/test/java/info/fingo/xactus/processor/test/ConformanceTestAbstract.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package info.fingo.xactus.processor.test; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.io.InputStreamReader; | ||
|
||
import org.w3c.dom.Document; | ||
import org.w3c.dom.Element; | ||
import org.w3c.dom.Node; | ||
import org.w3c.dom.NodeList; | ||
|
||
import info.fingo.xactus.api.DynamicContext; | ||
import info.fingo.xactus.api.ResultSequence; | ||
import info.fingo.xactus.api.XPath2Expression; | ||
import info.fingo.xactus.processor.DOMLoader; | ||
import info.fingo.xactus.processor.Engine; | ||
import info.fingo.xactus.processor.XercesLoader; | ||
import info.fingo.xactus.processor.testutil.ResultSequenceFormatter; | ||
import info.fingo.xactus.processor.testutil.bundle.Bundle; | ||
import info.fingo.xactus.processor.testutil.bundle.Platform; | ||
import info.fingo.xactus.processor.util.DynamicContextBuilder; | ||
import info.fingo.xactus.processor.util.StaticContextBuilder; | ||
|
||
public abstract class ConformanceTestAbstract { | ||
|
||
private final Bundle bundle; | ||
|
||
public ConformanceTestAbstract() { | ||
bundle = Platform | ||
.getBundle("org.w3c.xqts.testsuite"); | ||
} | ||
|
||
protected String getExpectedResult(String resultFile) throws IOException { | ||
|
||
try (InputStream isrf = bundle.getEntry(resultFile).openStream(); | ||
BufferedReader rfreader = new BufferedReader(new InputStreamReader(isrf, "UTF-8"))) { | ||
|
||
int bufferLength = 40000; | ||
char[] cbuf = new char[bufferLength]; | ||
rfreader.read(cbuf); | ||
|
||
return new String(cbuf).trim(); | ||
} | ||
} | ||
|
||
private Document loadInputFile(String inputFile) throws IOException { | ||
|
||
try (InputStream is = bundle.getEntry(inputFile).openStream()) { | ||
|
||
DOMLoader domloader = new XercesLoader(); | ||
domloader.set_validating(false); | ||
return domloader.load(is); | ||
} | ||
} | ||
|
||
protected String buildResultString(ResultSequence rs) { | ||
return ResultSequenceFormatter.buildResultString(rs); | ||
} | ||
|
||
protected String buildXMLResultString(ResultSequence rs) throws Exception { | ||
return ResultSequenceFormatter.buildXMLResultString(rs); | ||
} | ||
|
||
protected ResultSequence evaluate(String inputFile, String xpath) { | ||
return evaluate(inputFile, xpath); | ||
} | ||
|
||
protected ResultSequence evaluate(String inputFile, String xpath, int context) throws IOException { | ||
|
||
StaticContextBuilder staticContextBuilder = new StaticContextBuilder(); | ||
staticContextBuilder.withNamespace("xs", "http://www.w3.org/2001/XMLSchema"); | ||
staticContextBuilder.withNamespace("xsd", "http://www.w3.org/2001/XMLSchema"); | ||
staticContextBuilder.withNamespace("fn", "http://www.w3.org/2005/xpath-functions"); | ||
staticContextBuilder.withNamespace("xml", "http://www.w3.org/XML/1998/namespace"); | ||
|
||
XPath2Expression xpathExp = new Engine().parseExpression(xpath, staticContextBuilder); | ||
|
||
DynamicContext dynamicContextBuilder = new DynamicContextBuilder(staticContextBuilder); | ||
|
||
final Document document = loadInputFile(inputFile); | ||
final Node contextNode; | ||
if (context > 0) { | ||
Element elem = document.getDocumentElement(); | ||
for (int i = 1; i < context; i++) { | ||
elem = findFirstChildElement(elem); | ||
} | ||
contextNode = elem; | ||
} else { | ||
contextNode = document; | ||
} | ||
return xpathExp.evaluate(dynamicContextBuilder, new Object[] { contextNode }); | ||
} | ||
|
||
private static Element findFirstChildElement(Element elem) { | ||
|
||
NodeList childNodes = elem.getChildNodes(); | ||
for (int i = 0; i < childNodes.getLength(); i++) { | ||
if (childNodes.item(i) instanceof Element) | ||
return (Element) childNodes.item(i); | ||
} | ||
return null; | ||
} | ||
|
||
} |