diff --git a/core/src/main/java/cucumber/formatter/FormatterFactory.java b/core/src/main/java/cucumber/formatter/FormatterFactory.java index 8c3accd071..fe46ee1c77 100644 --- a/core/src/main/java/cucumber/formatter/FormatterFactory.java +++ b/core/src/main/java/cucumber/formatter/FormatterFactory.java @@ -7,7 +7,6 @@ import gherkin.formatter.PrettyFormatter; import java.io.File; -import java.io.FileWriter; import java.util.HashMap; import java.util.Map; @@ -38,14 +37,10 @@ private Formatter createFormatterFromClassName(String className, Object out) { Class ctorArgClass = Appendable.class; if (out instanceof File) { File file = (File) out; - if (file.isDirectory()) { - out = file; - ctorArgClass = File.class; - } else { - out = new FileWriter(file); - ctorArgClass = FileWriter.class; - } + out = file; + ctorArgClass = File.class; } + Class formatterClass = getFormatterClass(className); // TODO: Remove these if statements. We should fix PrettyFormatter and ProgressFormatter to only take a single Appendable arg. // Whether or not to use Monochrome is tricky. Maybe always enforce another 2nd argument for that diff --git a/core/src/main/java/cucumber/formatter/HTMLFormatter.java b/core/src/main/java/cucumber/formatter/HTMLFormatter.java index 44720aff29..586be3166d 100644 --- a/core/src/main/java/cucumber/formatter/HTMLFormatter.java +++ b/core/src/main/java/cucumber/formatter/HTMLFormatter.java @@ -7,23 +7,9 @@ import gherkin.formatter.Mappable; import gherkin.formatter.NiceAppendable; import gherkin.formatter.Reporter; -import gherkin.formatter.model.Background; -import gherkin.formatter.model.Examples; -import gherkin.formatter.model.Feature; -import gherkin.formatter.model.Match; -import gherkin.formatter.model.Result; -import gherkin.formatter.model.Scenario; -import gherkin.formatter.model.ScenarioOutline; -import gherkin.formatter.model.Step; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; +import gherkin.formatter.model.*; + +import java.io.*; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -181,6 +167,7 @@ private NiceAppendable jsOut() { } private OutputStream reportFileOutputStream(String fileName) { + htmlReportDir.mkdirs(); File file = new File(htmlReportDir, fileName); try { return new FileOutputStream(file); diff --git a/core/src/main/java/cucumber/formatter/UnitFormatter.java b/core/src/main/java/cucumber/formatter/UnitFormatter.java index 9b299aad28..ccdb81158e 100644 --- a/core/src/main/java/cucumber/formatter/UnitFormatter.java +++ b/core/src/main/java/cucumber/formatter/UnitFormatter.java @@ -15,7 +15,7 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.io.FileWriter; +import java.io.File; import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; @@ -28,13 +28,13 @@ * Time: 4:02 PM */ public class UnitFormatter implements Formatter, Reporter { - private FileWriter out; + private File out; private Document doc; private Element rootElement; private TestCase testCase; - public UnitFormatter(FileWriter out) { + public UnitFormatter(File out) { this.out = out; try { doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); @@ -67,14 +67,6 @@ public void scenario(Scenario scenario) { increaseAttributeValue(rootElement, "tests"); } - @Override - public void scenarioOutline(ScenarioOutline scenarioOutline) { - } - - @Override - public void examples(Examples examples) { - } - @Override public void step(Step step) { if (testCase != null) testCase.steps.add(step); @@ -85,7 +77,7 @@ public void step(Step step) { public void done() { try { //set up a transformer - rootElement.setAttribute("failed",String.valueOf(rootElement.getElementsByTagName("failure").getLength())); + rootElement.setAttribute("failed", String.valueOf(rootElement.getElementsByTagName("failure").getLength())); TransformerFactory transfac = TransformerFactory.newInstance(); Transformer trans = transfac.newTransformer(); trans.setOutputProperty(OutputKeys.INDENT, "yes"); @@ -114,7 +106,15 @@ private void increaseAttributeValue(Element element, String attribute) { value = Integer.parseInt(element.getAttribute(attribute)); } element.setAttribute(attribute, String.valueOf(++value)); + } + @Override + public void scenarioOutline(ScenarioOutline scenarioOutline) { + } + + @Override + public void examples(Examples examples) { + TestCase.examples = examples.getRows().size()-1; } @Override @@ -156,13 +156,14 @@ private TestCase() { Scenario scenario; static Feature feature; + static int examples = 0; List steps = new ArrayList(); List results = new ArrayList(); private Element writeTo(Document doc) { Element tc = doc.createElement("testcase"); - tc.setAttribute("classname", "Feature:" + feature.getName()); - tc.setAttribute("name", "Scenario:" + scenario.getName()); + tc.setAttribute("classname", feature.getName()); + tc.setAttribute("name", examples > 0 ? scenario.getName() + "_" + examples-- : scenario.getName()); long time = 0; for (Result r : results) { time += r.getDuration() != null ? r.getDuration() : 0; diff --git a/core/src/test/java/cucumber/formatter/FormatterFactoryTest.java b/core/src/test/java/cucumber/formatter/FormatterFactoryTest.java index 838ca4bbb2..6fa3c7d5bb 100644 --- a/core/src/test/java/cucumber/formatter/FormatterFactoryTest.java +++ b/core/src/test/java/cucumber/formatter/FormatterFactoryTest.java @@ -42,6 +42,11 @@ public void shouldInstantiateHtmlFormatter() { assertThat(formatterFactory.createFormatter("html", new File(System.getProperty("user.dir"))), is(HTMLFormatter.class)); } + @Test + public void shouldInstantiateUnitFormatter() { + assertThat(formatterFactory.createFormatter("unit", new File(System.getProperty("user.dir")+"report.xml")), is(UnitFormatter.class)); + } + @Test public void shouldInstantiateCustomFormatterFromClassNameWithAppender() { StringWriter writer = new StringWriter(); diff --git a/core/src/test/java/cucumber/formatter/UnitFormatterTest.java b/core/src/test/java/cucumber/formatter/UnitFormatterTest.java index 153c1f06aa..c1aed40a37 100644 --- a/core/src/test/java/cucumber/formatter/UnitFormatterTest.java +++ b/core/src/test/java/cucumber/formatter/UnitFormatterTest.java @@ -36,16 +36,16 @@ public void featureWithBackgroundTest() throws Exception { compareXML("cucumber/formatter/UnitFormatterTest_2.report.xml", "report.xml"); } -// @Test -// public void featureWithOutlineTest() throws Exception { -// runFeaturesWithFormatter(asList("cucumber/formatter/UnitFormatterTest_3.feature")); -// compareXML("cucumber/formatter/UnitFormatterTest_3.report.xml", "report.xml"); -// } + @Test + public void featureWithOutlineTest() throws Exception { + runFeaturesWithFormatter(asList("cucumber/formatter/UnitFormatterTest_3.feature")); + compareXML("cucumber/formatter/UnitFormatterTest_3.report.xml", "report.xml"); + } private void runFeaturesWithFormatter(final List featurePaths) throws IOException { File report = new File("report.xml"); - report.deleteOnExit(); - final UnitFormatter f = new UnitFormatter(new FileWriter(report)); +// report.deleteOnExit(); + final UnitFormatter f = new UnitFormatter(report); final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); final ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader(classLoader); final List gluePaths = emptyList(); diff --git a/core/src/test/resources/cucumber/formatter/UnitFormatterTest_1.report.xml b/core/src/test/resources/cucumber/formatter/UnitFormatterTest_1.report.xml index 91a6820abe..3c31ef6e66 100644 --- a/core/src/test/resources/cucumber/formatter/UnitFormatterTest_1.report.xml +++ b/core/src/test/resources/cucumber/formatter/UnitFormatterTest_1.report.xml @@ -1,12 +1,12 @@ - + - + - + - + - - - \ No newline at end of file + + + + + + + + + + + + + + +