package jetbrains.mps.execution.impl.configurations.tests.inprocess; /*Generated by MPS */ import jetbrains.mps.MPSLaunch; import jetbrains.mps.lang.test.runtime.BaseTransformationTest; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.junit.Test; import jetbrains.mps.lang.test.runtime.BaseTestBody; import java.util.List; import jetbrains.mps.baseLanguage.unitTest.execution.client.ITestNodeWrapper; import jetbrains.mps.execution.impl.configurations.util.JUnitWrapHelper; import jetbrains.mps.internal.collections.runtime.Sequence; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.smodel.SNodePointer; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.ModuleRepositoryFacade; import jetbrains.mps.baseLanguage.unitTest.execution.client.TestRunState; import jetbrains.mps.baseLanguage.unitTest.execution.client.TestEventsDispatcher; import jetbrains.mps.execution.configurations.implementation.plugin.plugin.Executor; import jetbrains.mps.execution.configurations.implementation.plugin.plugin.JUnitInProcessExecutor; import com.intellij.execution.process.ProcessHandler; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.execution.impl.configurations.tests.commands.CheckTestStateListener; import jetbrains.mps.execution.api.commands.OutputRedirector; import jetbrains.mps.baseLanguage.unitTest.execution.client.UnitTestProcessListener; import jetbrains.mps.execution.api.commands.ProcessHandlerBuilder; import junit.framework.Assert; import com.intellij.execution.ExecutionException; @MPSLaunch public class JUnitInProcess_Test extends BaseTransformationTest { private static final Logger LOG = LogManager.getLogger(JUnitInProcess_Test.class); @Test public void test_startSimpleTestCase() throws Throwable { initTest("${mps_home}", "r:ff98d12f-bc65-4639-94c3-dee022b33791(jetbrains.mps.execution.impl.configurations.tests.inprocess@tests)", false); runTest("jetbrains.mps.execution.impl.configurations.tests.inprocess.JUnitInProcess_Test$TestBody", "test_startSimpleTestCase", false); } @Test public void test_startFailedTestCase() throws Throwable { initTest("${mps_home}", "r:ff98d12f-bc65-4639-94c3-dee022b33791(jetbrains.mps.execution.impl.configurations.tests.inprocess@tests)", false); runTest("jetbrains.mps.execution.impl.configurations.tests.inprocess.JUnitInProcess_Test$TestBody", "test_startFailedTestCase", false); } @MPSLaunch public static class TestBody extends BaseTestBody { public void test_startSimpleTestCase() throws Exception { List<ITestNodeWrapper> wrappedTests = new JUnitWrapHelper(myProject.getModelAccess()).wrapTests(this.getMyModel(), Sequence.<SNodeReference>singleton(new SNodePointer("r:bbc844ac-dcda-4460-9717-8eb5d64b4778(jetbrains.mps.execution.impl.configurations.tests.commands.sandbox2@tests)", "6937584626643047380"))); this.checkTests(wrappedTests, ListSequence.fromList(new ArrayList<ITestNodeWrapper>())); } public void test_startFailedTestCase() throws Exception { List<ITestNodeWrapper> wrappedTests = new JUnitWrapHelper(myProject.getModelAccess()).wrapTests(this.getMyModel(), Sequence.<SNodeReference>singleton(new SNodePointer("r:bbc844ac-dcda-4460-9717-8eb5d64b4778(jetbrains.mps.execution.impl.configurations.tests.commands.sandbox2@tests)", "6339244025082034140"))); this.checkTests(ListSequence.fromList(new ArrayList<ITestNodeWrapper>()), wrappedTests); } public SModel getMyModel() { return new ModuleRepositoryFacade(myProject.getRepository()).getModelByName("jetbrains.mps.execution.impl.configurations.tests.commands.sandbox2@tests"); } public void checkTests(final List<ITestNodeWrapper> success, final List<ITestNodeWrapper> failure) { try { List<ITestNodeWrapper> testNodes = ListSequence.fromList(success).union(ListSequence.fromList(failure)).toListSequence(); final TestRunState runState = new TestRunState(testNodes, myProject); TestEventsDispatcher eventsDispatcher = new TestEventsDispatcher(runState); Executor processExecutor; processExecutor = new JUnitInProcessExecutor(testNodes, eventsDispatcher); if (LOG.isInfoEnabled()) { LOG.info("Starting in-process-execution"); } ProcessHandler process = processExecutor.execute(); final Wrappers._T<CheckTestStateListener> checkListener = new Wrappers._T<CheckTestStateListener>(); myProject.getModelAccess().runReadAction(new Runnable() { public void run() { checkListener.value = new CheckTestStateListener(success, failure); runState.addListener(checkListener.value); } }); OutputRedirector.redirect(process, new UnitTestProcessListener(eventsDispatcher)); int exitCode = ProcessHandlerBuilder.startAndWait(process, 30 * 1000); int failedMustBe = ListSequence.fromList(failure).count(); if (exitCode != failedMustBe) { Assert.fail("Exit code must be equal to " + ListSequence.fromList(failure).count() + ", but " + exitCode); } else if (exitCode < 0) { Assert.fail("Process is running for too long"); } if (runState.getFailedTests() != failedMustBe) { Assert.fail("The number of failed tests be equal to " + failedMustBe + ", but " + runState.getFailedTests()); } int completedMustBe = ListSequence.fromList(failure).count() + ListSequence.fromList(success).count(); if (runState.getCompletedTests() != completedMustBe) { Assert.fail("The number of completed tests be equal to " + ListSequence.fromList(failure).count() + ", but " + runState.getFailedTests()); } if (!(checkListener.value.getMessages().equals(""))) { Assert.fail(checkListener.value.getMessages()); } } catch (ExecutionException e) { Assert.fail(e.getMessage()); } } } }