From d9a3df82778052fa5cbe04d32eab1c0ca1600e63 Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Sat, 26 Sep 2015 10:44:03 +0200 Subject: [PATCH] multiple resultswriter implementations --- .../autounit/results/JUnitSourceWriter.java | 90 +++++++++++++++++++ .../jssl/autounit/results/ResultsWriter.java | 16 ++++ .../results/XStreamResultsWriter.java | 32 +++++++ 3 files changed, 138 insertions(+) create mode 100644 src/main/java/nl/jssl/autounit/results/JUnitSourceWriter.java create mode 100644 src/main/java/nl/jssl/autounit/results/ResultsWriter.java create mode 100644 src/main/java/nl/jssl/autounit/results/XStreamResultsWriter.java diff --git a/src/main/java/nl/jssl/autounit/results/JUnitSourceWriter.java b/src/main/java/nl/jssl/autounit/results/JUnitSourceWriter.java new file mode 100644 index 0000000..432bd1a --- /dev/null +++ b/src/main/java/nl/jssl/autounit/results/JUnitSourceWriter.java @@ -0,0 +1,90 @@ +package nl.jssl.autounit.results; + +import java.io.PrintStream; + +import nl.jssl.autounit.classanalyser.ClassResults; +import nl.jssl.autounit.classanalyser.InAndOutput; +import nl.jssl.autounit.classanalyser.MethodCallResults; + +public class JUnitSourceWriter extends ResultsWriter { + + public JUnitSourceWriter(PrintStream out) { + super(out); + } + + @Override + public void write(ClassResults results) { + writeTestClass(results); + } + + private void writeTestClass(ClassResults results) { + out.println("package " + results.getType().getPackage().getName() + ";"); + out.println(); + out.println("import static org.junit.Assert.assertEquals;"); + out.println("import org.junit.Test;"); + out.println(); + out.println("public class " + results.getType().getSimpleName() + "Tests {"); + Count index = new Count(1); + for (MethodCallResults mcr : results.getMethodCallResults()) { + for (InAndOutput inout : mcr.getContents()) { + writeMethod(index, results, mcr, inout); + } + } + + out.println("}"); + } + + private void writeMethod(Count index, ClassResults results, MethodCallResults mcr, InAndOutput inout) { + out.println("\t@Test"); + out.println("\tpublic void " + mcr.getMethodName() + index.getValue() + "(){"); + index.increment(); + out.print("\t\tassertEquals(new " + results.getType().getSimpleName() + "()." + mcr.getMethodName() + "("); + int nrArguments = inout.getInput().depth(); + int argumentCount = 1; + for (Object o : inout.getInput()) { + out.print(toString(o.getClass(), o)); + if ((argumentCount++) < nrArguments) { + out.print(","); + } + } + out.print("), "); + out.print(toString(mcr.getMethodReturnType(), inout.getOutput())); + out.println(");"); + out.println("\t}"); + } + + private String toString(Class type, Object object) { + if (type == String.class) { + return "\"" + object + "\""; + } else if (type == Double.class || type == double.class) { + return object.toString() + "D"; + } else if (type == Byte.class || type == byte.class) { + return "(byte)" + object.toString(); + } else if (type == Integer.class || type == int.class) { + return object.toString(); + } else if (type == Float.class || type == float.class) { + return object.toString() + "F"; + } else if (type == Short.class || type == short.class) { + return "(short)" + object.toString(); + } else if (type == Character.class || type == char.class) { + return "'" + object.toString() + "'"; + } else + return object.toString(); + } + + static class Count { + private int value; + + public Count(int value) { + this.value = value; + } + + public void increment() { + value++; + } + + public int getValue() { + return value; + } + } +} diff --git a/src/main/java/nl/jssl/autounit/results/ResultsWriter.java b/src/main/java/nl/jssl/autounit/results/ResultsWriter.java new file mode 100644 index 0000000..8a8eb10 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/results/ResultsWriter.java @@ -0,0 +1,16 @@ +package nl.jssl.autounit.results; + +import java.io.PrintStream; + +import nl.jssl.autounit.classanalyser.ClassResults; + +public abstract class ResultsWriter { + protected PrintStream out; + + public ResultsWriter(PrintStream out) { + super(); + this.out = out; + } + + public abstract void write(ClassResults classResults); +} diff --git a/src/main/java/nl/jssl/autounit/results/XStreamResultsWriter.java b/src/main/java/nl/jssl/autounit/results/XStreamResultsWriter.java new file mode 100644 index 0000000..187385a --- /dev/null +++ b/src/main/java/nl/jssl/autounit/results/XStreamResultsWriter.java @@ -0,0 +1,32 @@ +package nl.jssl.autounit.results; + +import java.io.PrintStream; + +import com.thoughtworks.xstream.XStream; + +import nl.jssl.autounit.classanalyser.ClassResults; +import nl.jssl.autounit.classanalyser.InAndOutput; +import nl.jssl.autounit.classanalyser.MethodCallResults; +import nl.jssl.autounit.util.Pair; +import nl.jssl.autounit.util.XStreamArgumentsConverter; + +public class XStreamResultsWriter extends ResultsWriter { + private XStream xstream = new XStream(); + + public XStreamResultsWriter(PrintStream out) { + super(out); + setup(); + } + + @Override + public void write(ClassResults results) { + xstream.toXML(results, out); + } + + private void setup() { + xstream.alias("case", InAndOutput.class); + xstream.alias("results", MethodCallResults.class); + xstream.alias("args", Pair.class); + xstream.registerConverter(new XStreamArgumentsConverter()); + } +}