This repository has been archived on 2022-07-06. You can view files and clone it, but cannot push or open issues or pull requests.
jasmine-junit-runner/src/main/java/be/klak/junit/jasmine/JasmineJSSuiteConverter.java

68 lines
2.5 KiB
Java

package be.klak.junit.jasmine;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
import org.junit.runner.Description;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.NativeObject;
import be.klak.rhino.RhinoContext;
class JasmineJSSuiteConverter {
private final RhinoContext context;
public JasmineJSSuiteConverter(RhinoContext context) {
this.context = context;
}
public JasmineDescriptions convertToJunitDescriptions(Class<?> testClass, NativeArray baseSuites) {
Description rootDescription = Description.createSuiteDescription(testClass);
List<JasmineSpec> specs = convertSuiteArrayToDescriptions(baseSuites, rootDescription, new ArrayList<String>());
return new JasmineDescriptions(rootDescription, specs);
}
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);
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");
specs.addAll(convertSuiteArrayToDescriptions(subSuites, suiteDescription, processed));
}
}
return specs;
}
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.add(jasmineSpec);
description.addChild(jasmineSpec.getDescription());
}
return specsMap;
}
}