package jetbrains.mps.lang.test.pluginSolution.plugin;
/*Generated by MPS */
import jetbrains.mps.workbench.action.BaseAction;
import javax.swing.Icon;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.ide.actions.MPSCommonDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import java.util.Set;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.HashSet;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.baseLanguage.unitTest.behavior.ITestCase__BehaviorDescriptor;
import jetbrains.mps.baseLanguage.unitTest.behavior.ITestMethod__BehaviorDescriptor;
import jetbrains.mps.classloading.ClassLoaderManager;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
import jetbrains.mps.lang.test.behavior.NodesTestCase__BehaviorDescriptor;
public class RunTestInMPS_Action extends BaseAction {
private static final Icon ICON = null;
public RunTestInMPS_Action() {
super("Run Test in MPS Process", "", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(false);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
public boolean isApplicable(AnActionEvent event, final Map<String, Object> _params) {
return SNodeOperations.isInstanceOf(((SNode) MapSequence.fromMap(_params).get("node")), MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b55b49e46L, "jetbrains.mps.lang.test.structure.NodesTestCase"));
}
@Override
public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) {
this.setEnabledState(event.getPresentation(), this.isApplicable(event, _params));
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
SModel model = event.getData(MPSCommonDataKeys.CONTEXT_MODEL);
MapSequence.fromMap(_params).put("model", model);
if (model == null) {
return false;
}
}
{
SNode node = event.getData(MPSCommonDataKeys.NODE);
MapSequence.fromMap(_params).put("node", node);
if (node == null) {
return false;
}
}
{
Project p = event.getData(CommonDataKeys.PROJECT);
MapSequence.fromMap(_params).put("project", p);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
final Set<SNode> tests = SetSequence.fromSet(new HashSet<SNode>());
SetSequence.fromSet(tests).addSequence(ListSequence.fromList(ITestCase__BehaviorDescriptor.getTestSet_idhGB2z8L.invoke(SNodeOperations.cast(((SNode) MapSequence.fromMap(_params).get("node")), MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b55b49e46L, "jetbrains.mps.lang.test.structure.NodesTestCase")))).toListSequence());
for (SNode test : SetSequence.fromSet(tests)) {
RunTestInMPS_Action.this.runTest(test, _params);
}
}
/*package*/ void runTest(final SNode test, final Map<String, Object> _params) {
try {
final String className = ITestCase__BehaviorDescriptor.getClassName_idhGBnqtL.invoke(ITestMethod__BehaviorDescriptor.getTestCase_idhGBgWVd.invoke(test));
final String testName = ITestMethod__BehaviorDescriptor.getTestName_idhGBohAB.invoke(test);
System.out.println("Test " + className + "." + testName);
final Class c = ClassLoaderManager.getInstance().getClass(((SModel) MapSequence.fromMap(_params).get("model")).getModule(), ITestCase__BehaviorDescriptor.getClassName_idhGBnqtL.invoke(ITestMethod__BehaviorDescriptor.getTestCase_idhGBgWVd.invoke(test)));
final Method meth = c.getMethod("runTest", String.class, String.class, Boolean.TYPE);
Constructor ctor = c.getConstructor(Project.class, SModel.class);
final Object testClass = ctor.newInstance(((Project) MapSequence.fromMap(_params).get("project")), ((SModel) MapSequence.fromMap(_params).get("model")));
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
meth.invoke(testClass, className + "$" + NodesTestCase__BehaviorDescriptor.getTestBodyName_idhOw0ICJ.invoke(SNodeOperations.asSConcept(MetaAdapterFactory.getConcept(0x8585453e6bfb4d80L, 0x98deb16074f1d86cL, 0x11b55b49e46L, "jetbrains.mps.lang.test.structure.NodesTestCase"))), testName, true);
} catch (Throwable e) {
e.printStackTrace();
}
}
});
thread.start();
} catch (Throwable e) {
e.printStackTrace();
}
}
}