package jetbrains.mps.tool.gentest.plugin;
/*Generated by MPS */
import jetbrains.mps.make.facet.IFacet;
import java.util.List;
import jetbrains.mps.make.facet.ITarget;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.make.resources.IPropertiesPersistence;
import jetbrains.mps.make.facet.ITargetEx2;
import jetbrains.mps.make.script.IJob;
import jetbrains.mps.make.script.IResult;
import jetbrains.mps.make.resources.IResource;
import jetbrains.mps.make.script.IJobMonitor;
import jetbrains.mps.make.resources.IPropertiesAccessor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.smodel.resources.GResource;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.smodel.ModelAccess;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.make.script.IConfig;
import jetbrains.mps.make.facet.ITargetEx;
import java.util.stream.IntStream;
import jetbrains.mps.make.script.IFeedback;
import jetbrains.mps.tool.builder.unittest.UnitTestOutputReader;
import java.io.IOException;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import jetbrains.mps.make.script.IPropertiesPool;
import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple;
import jetbrains.mps.tool.builder.unittest.UnitTestListener;
import java.util.Map;
import jetbrains.mps.internal.collections.runtime.MapSequence;
public class Test_Facet extends IFacet.Stub {
private List<ITarget> targets = ListSequence.fromList(new ArrayList<ITarget>());
private IFacet.Name name = new IFacet.Name("jetbrains.mps.tool.gentest.Test");
public Test_Facet() {
ListSequence.fromList(targets).addElement(new Test_Facet.Target_collectTest());
ListSequence.fromList(targets).addElement(new Test_Facet.Target_runTests());
}
public Iterable<ITarget> targets() {
return targets;
}
public Iterable<IFacet.Name> optional() {
return null;
}
public Iterable<IFacet.Name> required() {
return Sequence.fromArray(new IFacet.Name[]{new IFacet.Name("jetbrains.mps.lang.core.Generate"), new IFacet.Name("jetbrains.mps.lang.core.TextGen")});
}
public Iterable<IFacet.Name> extended() {
return null;
}
public IFacet.Name getName() {
return this.name;
}
public IPropertiesPersistence propertiesPersistence() {
return new Test_Facet.TargetProperties();
}
public static class Target_collectTest implements ITargetEx2 {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Test.collectTest");
public Target_collectTest() {
}
public IJob createJob() {
return new IJob.Stub() {
@Override
public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) {
Iterable<IResource> _output_rwbd_a0a = null;
final Iterable<GResource> input = (Iterable<GResource>) (Iterable) rawInput;
switch (0) {
case 0:
for (final GResource gr : Sequence.fromIterable(input)) {
final Wrappers._T<List<String>> tests = new Wrappers._T<List<String>>();
// FIXME here, shall not use makeSession.getProject().getModelAccess(), but instead, shall lock
// repository of a transient model. Expose it either with GenerationStatus or GResource
ModelAccess.instance().runReadAction(new Runnable() {
public void run() {
SModel outModel = gr.status().getOutputModel();
tests.value = Sequence.fromIterable(new TestCollector(Sequence.<SModel>singleton(outModel)).collectTests()).toListSequence();
}
});
if (ListSequence.fromList(tests.value).isNotEmpty()) {
_output_rwbd_a0a = Sequence.fromIterable(_output_rwbd_a0a).concat(Sequence.fromIterable(Sequence.<IResource>singleton(new Tester(gr.module(), tests.value))));
}
}
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_rwbd_a0a);
}
}
};
}
public IConfig createConfig() {
return null;
}
public Iterable<ITarget.Name> notAfter() {
return null;
}
public Iterable<ITarget.Name> after() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.Generate.generate")});
}
public Iterable<ITarget.Name> notBefore() {
return null;
}
public Iterable<ITarget.Name> before() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.lang.core.TextGen.textGen")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return false;
}
public boolean requiresInput() {
return true;
}
public boolean producesOutput() {
return true;
}
public Iterable<Class<? extends IResource>> expectedInput() {
List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>());
ListSequence.fromList(rv).addElement(GResource.class);
return rv;
}
public Iterable<Class<? extends IResource>> expectedOutput() {
return null;
}
public <T> T createParameters(Class<T> cls) {
return null;
}
public <T> T createParameters(Class<T> cls, T copyFrom) {
T t = createParameters(cls);
return t;
}
public int workEstimate() {
return 1000;
}
}
public static class Target_runTests implements ITargetEx {
private static final ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Test.runTests");
public Target_runTests() {
}
public IJob createJob() {
return new IJob.Stub() {
@Override
public IResult execute(final Iterable<IResource> rawInput, final IJobMonitor monitor, final IPropertiesAccessor pa, @NotNull final ProgressMonitor progressMonitor) {
Iterable<IResource> _output_rwbd_a0b = null;
final Iterable<ITestResource> input = (Iterable<ITestResource>) (Iterable) rawInput;
progressMonitor.start("", IntStream.of(1000).sum());
switch (0) {
case 0:
if (vars(pa.global()).testListener() == null) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("No test listener provided, stopping")));
return new IResult.FAILURE(_output_rwbd_a0b);
}
final ProgressMonitor subProgress_b0a0b = progressMonitor.subTask(1000);
subProgress_b0a0b.start("Testing", Sequence.fromIterable(input).count() * 100);
for (ITestResource resource : Sequence.fromIterable(input)) {
String fqn = resource.getModule().getModuleName();
subProgress_b0a0b.advance(1);
subProgress_b0a0b.step(fqn);
ProcessBuilder pb = new ProcessBuilder(resource.buildCommandLine());
try {
Process process = pb.start();
UnitTestOutputReader reader = new UnitTestOutputReader(process, vars(pa.global()).testListener());
int exitCode = reader.start();
if (exitCode != 0) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf("Process Exited With Code " + exitCode)));
}
} catch (IOException ioe) {
monitor.reportFeedback(new IFeedback.ERROR(String.valueOf(ioe.getMessage())));
}
subProgress_b0a0b.advance(99);
subProgress_b0a0b.step(fqn);
}
subProgress_b0a0b.done();
default:
progressMonitor.done();
return new IResult.SUCCESS(_output_rwbd_a0b);
}
}
};
}
public IConfig createConfig() {
return null;
}
public Iterable<ITarget.Name> notAfter() {
return null;
}
public Iterable<ITarget.Name> after() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.tool.gentest.Test.collectTest")});
}
public Iterable<ITarget.Name> notBefore() {
return null;
}
public Iterable<ITarget.Name> before() {
return Sequence.fromArray(new ITarget.Name[]{new ITarget.Name("jetbrains.mps.make.facets.Make.make")});
}
public ITarget.Name getName() {
return name;
}
public boolean isOptional() {
return true;
}
public boolean requiresInput() {
return true;
}
public boolean producesOutput() {
return true;
}
public Iterable<Class<? extends IResource>> expectedInput() {
List<Class<? extends IResource>> rv = ListSequence.fromList(new ArrayList<Class<? extends IResource>>());
ListSequence.fromList(rv).addElement(ITestResource.class);
return rv;
}
public Iterable<Class<? extends IResource>> expectedOutput() {
return null;
}
public <T> T createParameters(Class<T> cls) {
return cls.cast(new Parameters());
}
public <T> T createParameters(Class<T> cls, T copyFrom) {
T t = createParameters(cls);
if (t != null) {
((Tuples._1) t).assign((Tuples._1) copyFrom);
}
return t;
}
public static Test_Facet.Target_runTests.Parameters vars(IPropertiesPool ppool) {
return ppool.properties(name, Test_Facet.Target_runTests.Parameters.class);
}
public static class Parameters extends MultiTuple._1<UnitTestListener> {
public Parameters() {
super();
}
public Parameters(UnitTestListener testListener) {
super(testListener);
}
public UnitTestListener testListener(UnitTestListener value) {
return super._0(value);
}
public UnitTestListener testListener() {
return super._0();
}
}
}
public static class TargetProperties implements IPropertiesPersistence {
public TargetProperties() {
}
public void storeValues(Map<String, String> store, IPropertiesPool properties) {
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Test.runTests");
if (properties.hasProperties(name)) {
Test_Facet.Target_runTests.Parameters props = properties.properties(name, Test_Facet.Target_runTests.Parameters.class);
MapSequence.fromMap(store).put("jetbrains.mps.tool.gentest.Test.runTests.testListener", null);
}
}
}
public void loadValues(Map<String, String> store, IPropertiesPool properties) {
try {
{
ITarget.Name name = new ITarget.Name("jetbrains.mps.tool.gentest.Test.runTests");
Test_Facet.Target_runTests.Parameters props = properties.properties(name, Test_Facet.Target_runTests.Parameters.class);
if (MapSequence.fromMap(store).containsKey("jetbrains.mps.tool.gentest.Test.runTests.testListener")) {
props.testListener(null);
}
}
} catch (RuntimeException re) {
}
}
}
}