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

60 lines
2.3 KiB
Java
Executable File

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