/*
* Copyright 2003-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jetbrains.mps.jps.make.testEnvironment;
import jetbrains.mps.idea.core.facet.MPSConfigurationBean;
import jetbrains.mps.jps.make.tests.MpsJpsBuildTestCase;
import jetbrains.mps.persistence.DefaultModelRoot;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.module.JpsModule;
import org.jetbrains.mps.openapi.persistence.ModelRoot;
import java.io.File;
import java.util.Arrays;
public class JpsTestModelsEnvironment extends JpsTestEnvironmentBase<JpsTestBean> {
@NonNls
private static final String[] LANGUAGES_TO_USE =
{"f3061a53-9226-4cc5-a443-f952ceaf5816(jetbrains.mps.baseLanguage)",
"f61473f9-130f-42f6-b98d-6c438812c2f6(jetbrains.mps.baseLanguage.unitTest)"};
private JpsModule myModule;
public JpsTestModelsEnvironment(@NotNull MpsJpsBuildTestCase testCase) {
super(testCase);
}
@Override
public void setUpWithBean(@NotNull JpsTestBean bean) {
super.preSetUp();
copyModelsToProject(bean);
String modelsFolder = myTestCase.getAbsolutePath(bean.modelsDirName);
String generatorOutput = myTestCase.getAbsolutePath(bean.generatorOutputPath);
myModule = initJpsModule(bean.moduleName, modelsFolder);
MPSConfigurationBean configuration = initMpsConfiguration(bean, generatorOutput);
initModelRoots(configuration, modelsFolder);
registerMpsModuleExtension(myModule, configuration);
}
@NotNull
public JpsModule getModule() {
return myModule;
}
private void copyModelsToProject(JpsTestBean bean) {
for (String modelName : bean.modelsToCopy) {
String relativeFrom = bean.modelsLocation + File.separator + modelName;
String relativeTo = bean.modelsDirName + File.separator + modelName;
myTestCase.copyToProject(relativeFrom, relativeTo);
}
}
private MPSConfigurationBean initMpsConfiguration(JpsTestBean bean, String generatorOutput) {
MPSConfigurationBean configuration = new MPSConfigurationBean();
configuration.setIdByModuleName(bean.moduleName);
configuration.setUsedLanguages(LANGUAGES_TO_USE);
configuration.setGeneratorOutputPath(generatorOutput);
configuration.setUseModuleSourceFolder(bean.useModuleSourceFolder);
configuration.setUseTransientOutputFolder(bean.useTransientOutputFolder);
return configuration;
}
private void initModelRoots(MPSConfigurationBean configuration, String modelsFolder) {
DefaultModelRoot modelRoot = createModelRoot(modelsFolder);
configuration.setModelRoots(Arrays.<ModelRoot>asList(modelRoot));
}
protected DefaultModelRoot createModelRoot(String models) {
DefaultModelRoot dmr = new DefaultModelRoot();
dmr.setContentRoot(models);
dmr.addFile(DefaultModelRoot.SOURCE_ROOTS, models);
return dmr;
}
}