commit f9f3013222be930ad3cd072ccae8ebcaff816a87
Author: Mauro Talevi <[email protected]>
AuthorDate: Wed May 9 01:59:29 2012 +0200
Commit: Mauro Talevi <[email protected]>
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) {