commit f9f3013222be930ad3cd072ccae8ebcaff816a87 Author: Mauro Talevi <mauro.tal...@aquilonia.org> AuthorDate: Wed May 9 01:59:29 2012 +0200 Commit: Mauro Talevi <mauro.tal...@aquilonia.org> CommitDate: Wed May 9 01:59:29 2012 +0200
JBEHAVE-777: Added serialisation of performable tree root. diff --git a/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java b/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java index 7378a30..67d776f 100644 --- a/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java +++ b/jbehave-core/src/main/java/org/jbehave/core/embedder/PerformableTree.java @@ -1,5 +1,9 @@ package org.jbehave.core.embedder; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,6 +35,9 @@ import org.jbehave.core.steps.StepCreator.ParameterisedStep; import org.jbehave.core.steps.StepCreator.PendingStep; import org.jbehave.core.steps.StepResult; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; + /** * Creates a tree of {@link Performable} objects. */ @@ -42,6 +49,26 @@ public class PerformableTree { return root; } + public synchronized void serialiseRoot(File outputDirectory) { + serialiseRoot("xml", outputDirectory); + serialiseRoot("json", outputDirectory); + } + + private void serialiseRoot(String ext, File outputDirectory) { + XStream xstream = (ext.equals("json") ? new XStream(new JsonHierarchicalStreamDriver()) : new XStream()); + File outputDir = new File(outputDirectory, "view"); + outputDir.mkdirs(); + String name = "tree."+ext; + try { + Writer writer = new FileWriter(new File(outputDir, name)); + writer.write(xstream.toXML(root)); + writer.flush(); + writer.close(); + } catch (IOException e) { + throw new RuntimeException(ext, e); + } + } + public void addStories(RunContext context, List<String> storyPaths) { root.addBeforeSteps(context.beforeOrAfterStoriesSteps(Stage.BEFORE)); for (String storyPath : storyPaths) { @@ -701,7 +728,8 @@ public class PerformableTree { } } if (!pendingSteps.isEmpty()) { - PendingStepMethodGenerator generator = new PendingStepMethodGenerator(context.configuration().keywords()); + PendingStepMethodGenerator generator = new PendingStepMethodGenerator(context.configuration() + .keywords()); List<String> methods = new ArrayList<String>(); for (PendingStep pendingStep : pendingSteps) { if (!pendingStep.annotated()) { diff --git a/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java b/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java index 01d1470..f102139 100644 --- a/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java +++ b/jbehave-core/src/main/java/org/jbehave/core/embedder/StoryManager.java @@ -92,6 +92,7 @@ public class StoryManager { // collect failures failures.putAll(context.getFailures()); + performableTree.serialiseRoot(configuration.storyReporterBuilder().outputDirectory()); } public Map<String, RunningStory> runningStoriesAsPaths(RunContext context, List<String> storyPaths) {