aboutsummaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/reader/output
diff options
context:
space:
mode:
authorJ08nY2017-12-06 15:03:02 +0100
committerJ08nY2017-12-06 15:03:02 +0100
commite069087e36540452ea03d4f3d97ca8f8f715c799 (patch)
tree58dde804760e439fa0fa2bd81bf83c745502572c /src/cz/crcs/ectester/reader/output
parent7302ddf38c3cc322b76bbba83a0ba6943cb16bf5 (diff)
downloadECTester-e069087e36540452ea03d4f3d97ca8f8f715c799.tar.gz
ECTester-e069087e36540452ea03d4f3d97ca8f8f715c799.tar.zst
ECTester-e069087e36540452ea03d4f3d97ca8f8f715c799.zip
Extract TestWriters into common.
Diffstat (limited to 'src/cz/crcs/ectester/reader/output')
-rw-r--r--src/cz/crcs/ectester/reader/output/ResponseWriter.java8
-rw-r--r--src/cz/crcs/ectester/reader/output/TextTestWriter.java89
-rw-r--r--src/cz/crcs/ectester/reader/output/XMLTestWriter.java149
-rw-r--r--src/cz/crcs/ectester/reader/output/YAMLTestWriter.java117
4 files changed, 6 insertions, 357 deletions
diff --git a/src/cz/crcs/ectester/reader/output/ResponseWriter.java b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
index 1dbfdfa..f8837f8 100644
--- a/src/cz/crcs/ectester/reader/output/ResponseWriter.java
+++ b/src/cz/crcs/ectester/reader/output/ResponseWriter.java
@@ -29,11 +29,15 @@ public class ResponseWriter {
return String.format("%4d ms ┃ %s", r.getDuration() / 1000000, suffix);
}
- public void outputResponse(Response r) {
+ public String responseString(Response r) {
String out = "";
out += String.format("%-70s", r.getDescription()) + " ┃ ";
out += responseSuffix(r);
- output.println(out);
+ return out;
+ }
+
+ public void outputResponse(Response r) {
+ output.println(responseString(r));
output.flush();
}
}
diff --git a/src/cz/crcs/ectester/reader/output/TextTestWriter.java b/src/cz/crcs/ectester/reader/output/TextTestWriter.java
deleted file mode 100644
index b6cd51c..0000000
--- a/src/cz/crcs/ectester/reader/output/TextTestWriter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package cz.crcs.ectester.reader.output;
-
-import cz.crcs.ectester.common.output.TestWriter;
-import cz.crcs.ectester.common.test.CompoundTest;
-import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.common.test.TestSuite;
-import cz.crcs.ectester.reader.test.CommandTest;
-import cz.crcs.ectester.reader.test.CardTestSuite;
-
-import java.io.PrintStream;
-
-/**
- * @author Jan Jancar johny@neuromancer.sk
- */
-public class TextTestWriter implements TestWriter {
- private PrintStream output;
- private ResponseWriter respWriter;
-
- public static int BASE_WIDTH = 76;
-
- public TextTestWriter(PrintStream output) {
- this.output = output;
- this.respWriter = new ResponseWriter(output);
- }
-
- @Override
- public void begin(TestSuite suite) {
- output.println("=== Running test suite: " + suite.getName() + " ===");
- output.println("=== " + suite.getDescription());
- }
-
- private String testString(Test t, int offset) {
- if (!t.hasRun()) {
- return null;
- }
-
- StringBuilder out = new StringBuilder();
- if (t instanceof CommandTest) {
- CommandTest test = (CommandTest) t;
- out.append(test.ok() ? "OK " : "NOK ");
- out.append("━ ");
- int width = BASE_WIDTH - (offset + out.length());
- String widthSpec = "%-" + String.valueOf(width) + "s";
- out.append(String.format(widthSpec, t.getDescription()));
- out.append(" ┃ ");
- out.append(String.format("%-9s", test.getResultValue().name()));
- out.append(" ┃ ");
- out.append(respWriter.responseSuffix(test.getResponse()));
- } else {
- CompoundTest test = (CompoundTest) t;
- out.append(test.ok() ? "OK " : "NOK ");
- out.append("┳ ");
- int width = BASE_WIDTH - (offset + out.length());
- String widthSpec = "%-" + String.valueOf(width) + "s";
- out.append(String.format(widthSpec, t.getDescription()));
- out.append(" ┃ ");
- out.append(String.format("%-9s", test.getResultValue().name()));
- out.append(" ┃ ");
- out.append(test.getResultCause());
- out.append(System.lineSeparator());
- Test[] tests = test.getTests();
- for (int i = 0; i < tests.length; ++i) {
- if (i == tests.length - 1) {
- out.append(" ┗ ");
- } else {
- out.append(" ┣ ");
- }
- out.append(testString(tests[i], offset + 6));
- if (i != tests.length - 1) {
- out.append(System.lineSeparator());
- }
- }
- }
-
- return out.toString();
- }
-
- @Override
- public void outputTest(Test t) {
- if (!t.hasRun())
- return;
- output.println(testString(t, 0));
- output.flush();
- }
-
- @Override
- public void end() {
- }
-}
diff --git a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java b/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
deleted file mode 100644
index 19c14f1..0000000
--- a/src/cz/crcs/ectester/reader/output/XMLTestWriter.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package cz.crcs.ectester.reader.output;
-
-import cz.crcs.ectester.common.output.TestWriter;
-import cz.crcs.ectester.common.test.CompoundTest;
-import cz.crcs.ectester.common.test.TestSuite;
-import cz.crcs.ectester.common.util.ByteUtil;
-import cz.crcs.ectester.reader.command.Command;
-import cz.crcs.ectester.reader.response.Response;
-import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.CommandTest;
-import cz.crcs.ectester.reader.test.CardTestSuite;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.OutputStream;
-
-/**
- * @author Jan Jancar johny@neuromancer.sk
- */
-public class XMLTestWriter implements TestWriter {
- private OutputStream output;
- private DocumentBuilder db;
- private Document doc;
- private Node root;
-
- public XMLTestWriter(OutputStream output) throws ParserConfigurationException {
- this.output = output;
- this.db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- }
-
- @Override
- public void begin(TestSuite suite) {
- doc = db.newDocument();
- Element rootElem = doc.createElement("testSuite");
- rootElem.setAttribute("name", suite.getName());
- rootElem.setAttribute("desc", suite.getDescription());
-
- root = rootElem;
- doc.appendChild(root);
- }
-
- private Element commandElement(Command c) {
- Element commandElem = doc.createElement("command");
-
- Element apdu = doc.createElement("apdu");
- apdu.setTextContent(ByteUtil.bytesToHex(c.getAPDU().getBytes()));
- commandElem.appendChild(apdu);
-
- return commandElem;
- }
-
- private Element responseElement(Response r) {
- Element responseElem = doc.createElement("response");
- responseElem.setAttribute("successful", r.successful() ? "true" : "false");
-
- Element apdu = doc.createElement("apdu");
- apdu.setTextContent(ByteUtil.bytesToHex(r.getAPDU().getBytes()));
- responseElem.appendChild(apdu);
-
- Element naturalSW = doc.createElement("natural-sw");
- naturalSW.setTextContent(String.valueOf(Short.toUnsignedInt(r.getNaturalSW())));
- responseElem.appendChild(naturalSW);
-
- Element sws = doc.createElement("sws");
- for (int i = 0; i < r.getNumSW(); ++i) {
- Element sw = doc.createElement("sw");
- sw.setTextContent(String.valueOf(Short.toUnsignedInt(r.getSW(i))));
- sws.appendChild(sw);
- }
- responseElem.appendChild(sws);
-
- Element duration = doc.createElement("duration");
- duration.setTextContent(String.valueOf(r.getDuration()));
- responseElem.appendChild(duration);
-
- Element description = doc.createElement("desc");
- description.setTextContent(r.getDescription());
- responseElem.appendChild(description);
-
- return responseElem;
- }
-
- private Element testElement(Test t) {
- Element testElem = doc.createElement("test");
-
- if (t instanceof CommandTest) {
- CommandTest test = (CommandTest) t;
- testElem.setAttribute("type", "simple");
- testElem.appendChild(commandElement(test.getCommand()));
- testElem.appendChild(responseElement(test.getResponse()));
- } else if (t instanceof CompoundTest) {
- CompoundTest test = (CompoundTest) t;
- testElem.setAttribute("type", "compound");
- for (Test innerTest : test.getTests()) {
- testElem.appendChild(testElement(innerTest));
- }
- }
-
- Element description = doc.createElement("desc");
- description.setTextContent(t.getDescription());
- testElem.appendChild(description);
-
- Element result = doc.createElement("result");
- Element ok = doc.createElement("ok");
- ok.setTextContent(String.valueOf(t.ok()));
- Element value = doc.createElement("value");
- value.setTextContent(t.getResultValue().name());
- Element cause = doc.createElement("cause");
- cause.setTextContent(t.getResultCause());
- result.appendChild(ok);
- result.appendChild(value);
- result.appendChild(cause);
- testElem.appendChild(result);
-
- return testElem;
- }
-
- @Override
- public void outputTest(Test t) {
- if (!t.hasRun())
- return;
- root.appendChild(testElement(t));
- }
-
- @Override
- public void end() {
- try {
- DOMSource domSource = new DOMSource(doc);
- StreamResult result = new StreamResult(output);
- TransformerFactory tf = TransformerFactory.newInstance();
- Transformer transformer = tf.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
- transformer.transform(domSource, result);
- } catch (TransformerException e) {
- e.printStackTrace();
- }
- }
-} \ No newline at end of file
diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
deleted file mode 100644
index 5107970..0000000
--- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package cz.crcs.ectester.reader.output;
-
-import cz.crcs.ectester.common.output.TestWriter;
-import cz.crcs.ectester.common.test.CompoundTest;
-import cz.crcs.ectester.common.test.TestSuite;
-import cz.crcs.ectester.common.util.ByteUtil;
-import cz.crcs.ectester.reader.command.Command;
-import cz.crcs.ectester.reader.response.Response;
-import cz.crcs.ectester.common.test.Test;
-import cz.crcs.ectester.reader.test.CommandTest;
-import cz.crcs.ectester.reader.test.CardTestSuite;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
-
-import java.io.PrintStream;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Jan Jancar johny@neuromancer.sk
- */
-public class YAMLTestWriter implements TestWriter {
- private PrintStream output;
- private Map<String, Object> testRun;
- private Map<String, String> testSuite;
- private List<Object> tests;
-
- public YAMLTestWriter(PrintStream output) {
- this.output = output;
- }
-
- @Override
- public void begin(TestSuite suite) {
- output.println("---");
- testRun = new HashMap<>();
- testSuite = new HashMap<>();
- tests = new LinkedList<>();
- testSuite.put("name", suite.getName());
- testSuite.put("desc", suite.getDescription());
-
- testRun.put("suite", testSuite);
- testRun.put("tests", tests);
- }
-
- private Map<String, Object> commandObject(Command c) {
- Map<String, Object> commandObj = new HashMap<>();
- commandObj.put("apdu", ByteUtil.bytesToHex(c.getAPDU().getBytes()));
- return commandObj;
- }
-
- private Map<String, Object> responseObject(Response r) {
- Map<String, Object> responseObj = new HashMap<>();
- responseObj.put("successful", r.successful());
- responseObj.put("apdu", ByteUtil.bytesToHex(r.getAPDU().getBytes()));
- responseObj.put("natural_sw", Short.toUnsignedInt(r.getNaturalSW()));
- List<Integer> sws = new LinkedList<>();
- for (int i = 0; i < r.getNumSW(); ++i) {
- sws.add(Short.toUnsignedInt(r.getSW(i)));
- }
- responseObj.put("sws", sws);
- responseObj.put("duration", r.getDuration());
- responseObj.put("desc", r.getDescription());
- return responseObj;
- }
-
- private Map<String, Object> testObject(Test t) {
- Map<String, Object> testObj = new HashMap<>();
-
- if (t instanceof CommandTest) {
- CommandTest test = (CommandTest) t;
- testObj.put("type", "simple");
- testObj.put("command", commandObject(test.getCommand()));
- testObj.put("response", responseObject(test.getResponse()));
- } else if (t instanceof CompoundTest) {
- CompoundTest test = (CompoundTest) t;
- testObj.put("type", "compound");
- List<Map<String, Object>> tests = new LinkedList<>();
- for (Test innerTest : test.getTests()) {
- tests.add(testObject(innerTest));
- }
- testObj.put("tests", tests);
- }
-
- testObj.put("desc", t.getDescription());
- Map<String, Object> result = new HashMap<>();
- result.put("ok", t.ok());
- result.put("value", t.getResultValue().name());
- result.put("cause", t.getResultCause());
- testObj.put("result", result);
-
- return testObj;
- }
-
- @Override
- public void outputTest(Test t) {
- if (!t.hasRun())
- return;
- tests.add(testObject(t));
- }
-
- @Override
- public void end() {
- DumperOptions options = new DumperOptions();
- options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
- options.setPrettyFlow(true);
- Yaml yaml = new Yaml(options);
-
- Map<String, Object> result = new HashMap<>();
- result.put("testRun", testRun);
- String out = yaml.dump(result);
-
- output.println(out);
- output.println("---");
- }
-}