blob: 92d4ae0487b04bd3f43023770146b5e141996adc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 The University of York.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Louis Rose - initial API and implementation
* Sina Madani - Concurrency tests, refactoring, utilities etc.
******************************************************************************
*
* $Id$
*/
package org.eclipse.epsilon.evl.engine.test.acceptance;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import org.eclipse.epsilon.common.util.CollectionUtil;
import org.eclipse.epsilon.eol.engine.test.acceptance.util.EolAcceptanceTestUtil;
import org.eclipse.epsilon.eol.launch.IEolRunConfiguration;
import org.eclipse.epsilon.evl.*;
import org.eclipse.epsilon.evl.concurrent.*;
import org.eclipse.epsilon.evl.concurrent.experimental.*;
import org.eclipse.epsilon.evl.launch.EvlRunConfiguration;
/**
*
* @author Sina Madani
* @since 1.6
*/
public class EvlAcceptanceTestUtil extends EolAcceptanceTestUtil {
protected EvlAcceptanceTestUtil() {}
public static final String
// Core
testsBase = getTestBaseDir(EvlAcceptanceTestUtil.class),
metamodelsRoot = testsBase+"metamodels/",
scriptsRoot = testsBase+"scripts/",
modelsRoot = testsBase+"models/",
// Metamodels and scripts
javaMetamodel = "java.ecore",
javaModels[] = {
"epsilon_profiling_test.xmi",
"test001_java.xmi",
"emf_cdo-example.xmi",
},
javaScripts[] = {
"java_findbugs",
"java_equals"
},
thriftMetamodel = "thrift.ecore",
thriftScripts[] = {"thrift_validator"},
thriftModels[] = {
"fb303.xmi",
"SimpleService.xmi",
"ThriftTest.xmi"
},
cookbookMetamodel = "cookbook.ecore",
cookbookScripts[] = {"cookbook"},
cookbookModels[],
imdbMetamodel = "movies.ecore",
imdbScripts[] = {"imdb_validator"},
imdbModels[] = {"imdb-small.xmi"};
/*Nx3 array where N is number of test inputs;
* 0 is the script path,
* 1 is the model path,
* 2 is the metamodel path.
*/
public static final List<String[]>
allInputs,
javaInputs,
thriftInputs,
cookbookInputs,
imdbInputs;
static {
cookbookModels = new String[6];
cookbookModels[0] = "cookbook_cyclic.model";
for (int i = 1; i < 6; i++) {
cookbookModels[i] = "cookbook"+i+".model";
}
javaInputs = addAllInputs(javaScripts, javaModels, javaMetamodel);
thriftInputs = addAllInputs(thriftScripts, thriftModels, thriftMetamodel);
cookbookInputs = addAllInputs(cookbookScripts, cookbookModels, cookbookMetamodel);
imdbInputs = addAllInputs(imdbScripts, imdbModels, imdbMetamodel);
allInputs = CollectionUtil.composeArrayListFrom(
imdbInputs,
cookbookInputs,
javaInputs,
thriftInputs
);
}
/**
* A list of pre-configured Runnables which will call the execute() method on the provided module.
* @param modules A collection of IEvlModules to use in combination with each set of test data.
*/
public static Collection<EvlRunConfiguration> getScenarios(List<String[]> testInputs, boolean includeTest, Collection<Supplier<? extends IEvlModule>> moduleGetters, Function<String[], Integer> idCalculator) {
if (testInputs == null) testInputs = allInputs;
if (moduleGetters == null) moduleGetters = modules();
Collection<EvlRunConfiguration> scenarios = EolAcceptanceTestUtil.getScenarios(EvlRunConfiguration.class, testInputs, moduleGetters, idCalculator);
if (includeTest) {
for (Supplier<? extends IEvlModule> moduleGetter : moduleGetters) {
IEvlModule evlStd = moduleGetter.get();
scenarios.add(
IEolRunConfiguration.Builder(EvlRunConfiguration.class)
.withScript(EvlTests.getTestScript(evlStd).toPath())
.withModel(EvlTests.getTestModel(false))
.withModule(evlStd)
.profileExecution(false)
.showResults(false)
.withId(testInputs.size()+1)
.build()
);
}
}
return scenarios;
}
@SuppressWarnings("deprecation")
public static Collection<Supplier<? extends IEvlModule>> modules(boolean includeStandard) {
return parallelModules(THREADS,
includeStandard ? EvlModule::new : null,
EvlModuleParallelNot::new,
EvlModuleParallelConstraints::new,
EvlModuleParallelStaged::new,
EvlModuleParallelAnnotation::new,
EvlModuleParallelElements::new
);
}
// Boilerplate defaults
public static List<String[]> addAllInputs(String[] scripts, String[] models, String metamodel) {
return EolAcceptanceTestUtil.addAllInputs(scripts, models, metamodel, "evl", scriptsRoot, modelsRoot, metamodelsRoot);
}
@SafeVarargs
public static Collection<EvlRunConfiguration> getScenarios(Supplier<? extends IEvlModule>... moduleGetters) {
return getScenarios(null, true, Arrays.asList(moduleGetters), null);
}
public static Collection<EvlRunConfiguration> getScenarios(List<String[]> testInputs, boolean includeTest, Collection<Supplier<? extends IEvlModule>> moduleGetters) {
return getScenarios(testInputs, includeTest, moduleGetters, null);
}
public static Collection<Supplier<? extends IEvlModule>> modules() {
return modules(true);
}
}