now builds test descriptions recursively
This commit is contained in:
parent
7ea8dc7ce4
commit
45d32509ef
|
@ -1,40 +1,24 @@
|
|||
package be.klak.junit.jasmine;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
import org.junit.runner.Description;
|
||||
|
||||
import be.klak.rhino.RhinoContext;
|
||||
|
||||
|
||||
class JasmineDescriptions {
|
||||
|
||||
private final Description rootDescription;
|
||||
private final Map<String, JasmineSpec> specsMap;
|
||||
private final RhinoContext rhinoContext;
|
||||
private final Collection<JasmineSpec> specs;
|
||||
|
||||
JasmineDescriptions(Description rootDescription, Map<String, JasmineSpec> specsMap, RhinoContext context) {
|
||||
public JasmineDescriptions(Description rootDescription, Collection<JasmineSpec> specs) {
|
||||
this.rootDescription = rootDescription;
|
||||
this.specsMap = specsMap;
|
||||
this.rhinoContext = context;
|
||||
this.specs = specs;
|
||||
}
|
||||
|
||||
public Description getRootDescription() {
|
||||
return rootDescription;
|
||||
}
|
||||
|
||||
public Collection<JasmineSpec> getAllSpecs() {
|
||||
return specsMap.values();
|
||||
public Collection<JasmineSpec> getSpecs() {
|
||||
return specs;
|
||||
}
|
||||
|
||||
public void executeSpec(Description description) {
|
||||
getSpec(description).execute(rhinoContext);
|
||||
}
|
||||
|
||||
public JasmineSpec getSpec(Description description) {
|
||||
return specsMap.get(description.getDisplayName());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
package be.klak.junit.jasmine;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.runner.Description;
|
||||
import org.mozilla.javascript.NativeArray;
|
||||
|
@ -11,45 +10,54 @@ import org.mozilla.javascript.NativeObject;
|
|||
|
||||
import be.klak.rhino.RhinoContext;
|
||||
|
||||
public class JasmineJSSuiteConverter {
|
||||
|
||||
class JasmineJSSuiteConverter {
|
||||
|
||||
private final NativeArray baseSuites;
|
||||
private final RhinoContext context;
|
||||
|
||||
JasmineJSSuiteConverter(NativeArray baseSuites, RhinoContext context) {
|
||||
this.baseSuites = baseSuites;
|
||||
public JasmineJSSuiteConverter(RhinoContext context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public JasmineDescriptions convertToJunitDescriptions(Class<?> testClass) {
|
||||
public JasmineDescriptions convertToJunitDescriptions(Class<?> testClass, NativeArray baseSuites) {
|
||||
Description rootDescription = Description.createSuiteDescription(testClass);
|
||||
Map<String, JasmineSpec> specsMap = convertSuiteArrayToDescriptions(this.baseSuites, rootDescription);
|
||||
return new JasmineDescriptions(rootDescription, specsMap, context);
|
||||
List<JasmineSpec> specs = convertSuiteArrayToDescriptions(baseSuites, rootDescription, new ArrayList<String>());
|
||||
return new JasmineDescriptions(rootDescription, specs);
|
||||
}
|
||||
|
||||
private Map<String, JasmineSpec> convertSuiteArrayToDescriptions(NativeArray suiteArray, Description rootDescription) {
|
||||
Map<String, JasmineSpec> specsMap = new HashMap<String, JasmineSpec>();
|
||||
private List<JasmineSpec> convertSuiteArrayToDescriptions(NativeArray suiteArray, Description rootDescription,
|
||||
List<String> processed) {
|
||||
List<JasmineSpec> specs = new ArrayList<JasmineSpec>();
|
||||
for (Object idObj : suiteArray.getIds()) {
|
||||
NativeObject suite = (NativeObject) suiteArray.get((Integer) idObj, suiteArray);
|
||||
|
||||
Description suiteDescription = Description
|
||||
.createSuiteDescription((String) suite.get("description", suite), (Annotation[]) null);
|
||||
rootDescription.addChild(suiteDescription);
|
||||
specsMap.putAll(convertToJunitDescription(suite, suiteDescription));
|
||||
String description = (String) suite.get("description", suite);
|
||||
if (!processed.contains(description)) {
|
||||
Description suiteDescription = addSuiteToDescription(rootDescription, processed, description);
|
||||
specs.addAll(convertToJunitDescription(suite, suiteDescription));
|
||||
|
||||
NativeArray subSuites = (NativeArray) context.executeFunction(suite, "suites");
|
||||
convertSuiteArrayToDescriptions(subSuites, suiteDescription, processed);
|
||||
}
|
||||
}
|
||||
|
||||
return specsMap;
|
||||
return specs;
|
||||
}
|
||||
|
||||
private Map<String, JasmineSpec> convertToJunitDescription(NativeObject suite, Description description) {
|
||||
Map<String, JasmineSpec> specsMap = new HashMap<String, JasmineSpec>();
|
||||
private Description addSuiteToDescription(Description description, List<String> processed, String suiteName) {
|
||||
processed.add(suiteName);
|
||||
Description suiteDescription = Description.createSuiteDescription(suiteName, (Annotation[]) null);
|
||||
description.addChild(suiteDescription);
|
||||
return suiteDescription;
|
||||
}
|
||||
|
||||
private List<JasmineSpec> convertToJunitDescription(NativeObject suite, Description description) {
|
||||
List<JasmineSpec> specsMap = new ArrayList<JasmineSpec>();
|
||||
NativeArray specsArray = (NativeArray) context.executeFunction(suite, "specs");
|
||||
for (Object idObj : specsArray.getIds()) {
|
||||
NativeObject spec = (NativeObject) specsArray.get((Integer) idObj, specsArray);
|
||||
|
||||
JasmineSpec jasmineSpec = new JasmineSpec(spec);
|
||||
specsMap.put(jasmineSpec.toString(), jasmineSpec);
|
||||
specsMap.add(jasmineSpec);
|
||||
description.addChild(jasmineSpec.getDescription());
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package be.klak.junit.jasmine;
|
|||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
@ -15,7 +14,6 @@ import org.mozilla.javascript.tools.debugger.Main;
|
|||
|
||||
import be.klak.rhino.RhinoContext;
|
||||
|
||||
|
||||
public class JasmineTestRunner extends Runner {
|
||||
|
||||
private static final int SLEEP_TIME_MILISECONDS = 50;
|
||||
|
@ -90,7 +88,7 @@ public class JasmineTestRunner extends Runner {
|
|||
private JasmineDescriptions getJasmineDescriptions() {
|
||||
if (this.jasmineSuite == null) {
|
||||
NativeArray baseSuites = (NativeArray) rhinoContext.evalJS("jasmine.getEnv().currentRunner().suites()");
|
||||
this.jasmineSuite = new JasmineJSSuiteConverter(baseSuites, rhinoContext).convertToJunitDescriptions(testClass);
|
||||
this.jasmineSuite = new JasmineJSSuiteConverter(rhinoContext).convertToJunitDescriptions(testClass, baseSuites);
|
||||
}
|
||||
return this.jasmineSuite;
|
||||
}
|
||||
|
@ -104,7 +102,7 @@ public class JasmineTestRunner extends Runner {
|
|||
public void run(RunNotifier notifier) {
|
||||
generateSpecRunnerIfNeeded();
|
||||
|
||||
for (JasmineSpec spec : getJasmineDescriptions().getAllSpecs()) {
|
||||
for (JasmineSpec spec : getJasmineDescriptions().getSpecs()) {
|
||||
Object testClassInstance = createTestClassInstance();
|
||||
fireMethodsWithSpecifiedAnnotationIfAny(testClassInstance, Before.class);
|
||||
|
||||
|
|
Reference in New Issue