Skip to content

Commit 51f5c95

Browse files
committed
Allow different result types in test cases.
Up to now the result section of a metamorph test case had to be specified in cg-xml. This is now changed and any format which is supported by a `Reader` can be used.
1 parent dfac467 commit 51f5c95

File tree

2 files changed

+113
-16
lines changed

2 files changed

+113
-16
lines changed

src/main/java/org/culturegraph/mf/test/TestCase.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import org.culturegraph.mf.framework.StreamPipe;
2222
import org.culturegraph.mf.framework.StreamReceiver;
2323
import org.culturegraph.mf.morph.Metamorph;
24-
import org.culturegraph.mf.stream.converter.xml.CGXmlHandler;
25-
import org.culturegraph.mf.stream.converter.xml.XmlDecoder;
2624
import org.culturegraph.mf.stream.reader.MultiFormatReader;
2725
import org.culturegraph.mf.stream.reader.Reader;
2826
import org.culturegraph.mf.stream.sink.EventList;
@@ -36,7 +34,7 @@
3634

3735
/**
3836
* @author Christoph Böhme <[email protected]>
39-
*
37+
*
4038
*/
4139
public final class TestCase {
4240

@@ -59,13 +57,13 @@ public final class TestCase {
5957

6058
private final Element config;
6159

62-
private final Reader reader;
60+
private final Reader inputReader;
6361
private final StreamPipe<StreamReceiver> transformation;
6462

6563
@SuppressWarnings("unchecked")
6664
public TestCase(final Element config) {
6765
this.config = config;
68-
reader = getReader();
66+
inputReader = getReader(INPUT_TAG);
6967
transformation = getTransformation();
7068
}
7169

@@ -81,13 +79,13 @@ public void run() {
8179

8280
final EventList resultStream = new EventList();
8381
if (transformation == null) {
84-
reader.setReceiver(resultStream);
82+
inputReader.setReceiver(resultStream);
8583
} else {
86-
reader.setReceiver(transformation).setReceiver(resultStream);
84+
inputReader.setReceiver(transformation).setReceiver(resultStream);
8785
}
8886

89-
reader.process(getInputData());
90-
reader.closeStream();
87+
inputReader.process(getInputData());
88+
inputReader.closeStream();
9189

9290
final StreamValidator validator = new StreamValidator(resultStream.getEvents());
9391

@@ -96,16 +94,16 @@ public void run() {
9694
validator.setStrictKeyOrder(Boolean.parseBoolean(result.getAttribute(STRICT_KEY_ORDER_ATTR)));
9795
validator.setStrictValueOrder(Boolean.parseBoolean(result.getAttribute(STRICT_VALUE_ORDER_ATTR)));
9896

99-
final XmlDecoder decoder = new XmlDecoder();
100-
decoder.setReceiver(new CGXmlHandler()).setReceiver(validator);
97+
final Reader resultReader = getReader(RESULT_TAG);
98+
resultReader.setReceiver(validator);
10199

102-
decoder.process(getExpectedResult());
100+
resultReader.process(getExpectedResult());
103101
validator.closeStream();
104102
}
105103

106-
private Reader getReader() {
107-
final Element input = (Element) config.getElementsByTagName(INPUT_TAG).item(0);
108-
final String mimeType = input.getAttribute(TYPE_ATTR);
104+
private Reader getReader(final String tag) {
105+
final Element element = (Element) config.getElementsByTagName(tag).item(0);
106+
final String mimeType = element.getAttribute(TYPE_ATTR);
109107
return new MultiFormatReader(mimeType);
110108
}
111109

@@ -160,7 +158,7 @@ private java.io.Reader getExpectedResult() {
160158
private java.io.Reader getDataFromSource(final String src) {
161159
try {
162160
return ResourceUtil.getReader(src);
163-
} catch (FileNotFoundException e) {
161+
} catch (final FileNotFoundException e) {
164162
throw new TestConfigurationException("Could not find input file: " + src, e);
165163
}
166164
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
* Copyright 2014 Christoph Böhme
3+
*
4+
* Licensed under the Apache License, Version 2.0 the "License";
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.culturegraph.mf.test;
17+
18+
import javax.xml.parsers.DocumentBuilder;
19+
import javax.xml.parsers.DocumentBuilderFactory;
20+
import javax.xml.parsers.ParserConfigurationException;
21+
22+
import org.culturegraph.mf.exceptions.ShouldNeverHappenException;
23+
import org.junit.Test;
24+
import org.w3c.dom.Document;
25+
import org.w3c.dom.Element;
26+
27+
/**
28+
* Test cases for class {@link TestCase}.
29+
*
30+
* @author Christoph Böhme
31+
*
32+
*/
33+
public final class TestCaseTest {
34+
35+
@Test
36+
public void shouldSupportFormetaAsInputAndResultFormat() {
37+
final Document doc = getXmlDocument();
38+
39+
final Element inputElement = doc.createElement("input");
40+
inputElement.setAttribute("type", "text/x-formeta");
41+
inputElement.setTextContent("{l: v}");
42+
43+
final Element resultElement = doc.createElement("result");
44+
resultElement.setAttribute("type", "text/x-formeta");
45+
resultElement.setTextContent("{l: v}");
46+
47+
final Element config = doc.createElement("test-case");
48+
config.appendChild(inputElement);
49+
config.appendChild(resultElement);
50+
51+
final TestCase testCase = new TestCase(config);
52+
testCase.run();
53+
54+
// The test was successful if run does not throw
55+
// an exception.
56+
}
57+
58+
@Test
59+
public void shouldSupportCGXmlAsInputAndResultFormat() {
60+
final Document doc = getXmlDocument();
61+
62+
final Element inputRecord = doc.createElement("record");
63+
inputRecord.setAttribute("id", "1");
64+
65+
final Element inputElement = doc.createElement("input");
66+
inputElement.setAttribute("type", "text/x-cg+xml");
67+
inputElement.appendChild(inputRecord);
68+
69+
final Element resultRecord = doc.createElement("record");
70+
resultRecord.setAttribute("id", "1");
71+
72+
final Element resultElement = doc.createElement("result");
73+
resultElement.setAttribute("type", "text/x-cg+xml");
74+
resultElement.appendChild(resultRecord);
75+
76+
final Element config = doc.createElement("test-case");
77+
config.appendChild(inputElement);
78+
config.appendChild(resultElement);
79+
80+
final TestCase testCase = new TestCase(config);
81+
testCase.run();
82+
83+
// The test was successful if run does not throw
84+
// an exception.
85+
}
86+
87+
private static Document getXmlDocument() {
88+
final DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
89+
final DocumentBuilder docBuilder;
90+
try {
91+
docBuilder = docBuilderFactory.newDocumentBuilder();
92+
} catch(final ParserConfigurationException e) {
93+
throw new ShouldNeverHappenException(e);
94+
}
95+
96+
return docBuilder.newDocument();
97+
}
98+
99+
}

0 commit comments

Comments
 (0)