X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.tests.modelled%2Fsrc%2Forg%2Fsimantics%2Ftests%2Fmodelled%2Futils%2FModelledSTSTest.java;h=c0ed9b191420604d49cfc73edd636d9f00928920;hp=00d825d2e215017e9de0d554ece44dd6afa4eeb5;hb=2fb951a4a92e4a863a54c645bae18c2b9aa274bf;hpb=f03893d9b643eae3f03debf7a656edbfa5b9b501 diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java index 00d825d2e..c0ed9b191 100644 --- a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java +++ b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java @@ -1,6 +1,25 @@ package org.simantics.tests.modelled.utils; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.simantics.scl.compiler.commands.CommandSession; +import org.simantics.scl.compiler.commands.TestScriptExecutor; import org.simantics.scl.compiler.module.coverage.CombinedCoverage; +import org.simantics.scl.compiler.module.options.ModuleCompilationOptions; +import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor; +import org.simantics.scl.compiler.module.repository.ModuleRepository; +import org.simantics.scl.compiler.types.Type; +import org.simantics.scl.compiler.types.Types; +import org.simantics.scl.osgi.SCLOsgi; +import org.simantics.scl.runtime.SCLContext; +import org.simantics.scl.runtime.reporting.SCLReportingHandler; public class ModelledSTSTest { @@ -8,14 +27,20 @@ public class ModelledSTSTest { private final String code; private final int priority; private final boolean ignored; - + private Set dependencies; + private Set unresolvedDependencies; + private CombinedCoverage coverage; + private Map variables; - ModelledSTSTest(String name, String code, int priority, boolean ignored) { + ModelledSTSTest(String name, String code, int priority, boolean ignored, Set dependencies, Map variables) { this.name = name; this.code = code; this.priority = priority; this.ignored = ignored; + this.dependencies = dependencies; + this.unresolvedDependencies = new HashSet<>(dependencies); + this.variables = variables; } public String getName() { @@ -31,7 +56,7 @@ public class ModelledSTSTest { } public boolean isIgnored() { - return ignored; + return (ignored || !unresolvedDependencies.isEmpty()); } public void setCoverage(CombinedCoverage coverage) { @@ -41,4 +66,147 @@ public class ModelledSTSTest { public CombinedCoverage getCoverage() { return coverage; } + + public static class CommandSessionVariable { + + private final String name; + private final Type type; + private final Object value; + + public CommandSessionVariable(String name, Type type, Object value) { + this.name = name; + this.type = type; + this.value = value; + } + + public String getName() { + return name; + } + + public Type getType() { + return type; + } + + public Object getValue() { + return value; + } + } + + public List run(List vars) throws IOException { + ModuleRepository repo = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY); + CommandSession session = null; + try { + repo.setAdvisor(new ModuleCompilationOptionsAdvisor() { + + @Override + public ModuleCompilationOptions getOptions(String moduleName) { + // TODO: default to false + boolean coverage = true; + // TODO: add moduleName filters back + // for (Pattern p : getModuleNameFilterPatterns()) { + // if (p.matcher(moduleName.toLowerCase()).find()) { + // coverage = true; + // break; + // } + // } + return new ModuleCompilationOptions(coverage); + } + }); + + SCLReportingHandler handler = (SCLReportingHandler) SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER); + session = new CommandSession(repo, handler); + + for (CommandSessionVariable var : vars) + session.setVariable(var.getName(), var.getType(), var.getValue()); + + for (Map.Entry entry : variables.entrySet()) + session.setVariable(entry.getKey(), Types.STRING, entry.getValue()); + + new TestScriptExecutor(session, new BufferedReader(new StringReader(code)), handler, true).execute(); + STSSuiteTestCollector.setTestCoverage(this, session); + + // Return variables from this session + List result = new ArrayList<>(); + for (String var : session.getVariables()) + result.add(new CommandSessionVariable(var, session.getVariableType(var), session.getVariableValue(var))); + + return result; + } finally { + // remember to flush this repository + repo.flush(); + } + } + + public Set getDependencies() { + return dependencies; + } + + public Set getUnresolvedDependencies() { + return unresolvedDependencies; + } + + public boolean resolveDependency(String testDep) { + return unresolvedDependencies.remove(testDep); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((code == null) ? 0 : code.hashCode()); + result = prime * result + ((coverage == null) ? 0 : coverage.hashCode()); + result = prime * result + ((dependencies == null) ? 0 : dependencies.hashCode()); + result = prime * result + (ignored ? 1231 : 1237); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + priority; + result = prime * result + ((unresolvedDependencies == null) ? 0 : unresolvedDependencies.hashCode()); + result = prime * result + ((variables == null) ? 0 : variables.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ModelledSTSTest other = (ModelledSTSTest) obj; + if (code == null) { + if (other.code != null) + return false; + } else if (!code.equals(other.code)) + return false; + if (coverage == null) { + if (other.coverage != null) + return false; + } else if (!coverage.equals(other.coverage)) + return false; + if (dependencies == null) { + if (other.dependencies != null) + return false; + } else if (!dependencies.equals(other.dependencies)) + return false; + if (ignored != other.ignored) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + if (priority != other.priority) + return false; + if (unresolvedDependencies == null) { + if (other.unresolvedDependencies != null) + return false; + } else if (!unresolvedDependencies.equals(other.unresolvedDependencies)) + return false; + if (variables == null) { + if (other.variables != null) + return false; + } else if (!variables.equals(other.variables)) + return false; + return true; + } }