blob: c1e38288dffff07ea95958e9341f52dc8a78785e [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2020 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
******************************************************************************/
package org.polarsys.chess.contracts.verificationService.test.runtime.tests;
import java.io.File;
import java.nio.file.Paths;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest;
import org.eclipse.papyrus.junit.framework.runner.Headless;
import org.eclipse.papyrus.junit.utils.rules.ModelSetFixture;
import org.eclipse.papyrus.junit.utils.rules.PluginResource;
import org.eclipse.papyrus.junit.utils.rules.ResourceSetFixture;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Package;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;
import org.polarsys.chess.OSSImporter.core.actions.ImportOSSFileAction;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.polarsys.chess.contracts.verificationService.test.runtime.util.TestResultsUtil;
import org.polarsys.chess.service.core.model.ChessSystemModel;
import org.polarsys.chess.service.core.model.UMLStateMachineModel;
import eu.fbk.eclipse.standardtools.ModelTranslatorToOcra.core.services.OSSTranslatorServiceAPI;
import eu.fbk.eclipse.standardtools.StateMachineTranslatorToSmv.core.services.SMVTranslatorServiceAPI;
import eu.fbk.tools.adapter.ui.preferences.PreferenceConstants;
@Headless
public class TestBasicOperationsHeadless extends AbstractPapyrusTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
private String testOutput;
private EntityUtil entityUtil = EntityUtil.getInstance();
private static final Logger logger = Logger.getLogger(TestBasicOperationsHeadless.class);
private final String emptyProjectFolderPath = "resources/EmptyProject/";
private final String emptyProjectPath = "resources/EmptyProject/EmptyProject.di";
private final String projectFolderPath = "resources/SSR_fi/";
private final String projectPath = projectFolderPath + "SSR.di";
@Rule
public final ModelSetFixture modelSet = new ModelSetFixture();
@Rule
public final ResourceSetFixture resourceSetFixture = new ResourceSetFixture();
@Test
@PluginResource(projectPath)
public void testExportModelAsOss() throws Exception {
Class umlSelectedComponent = getSystemComponent();
File ossFile = exportModelAsOss(umlSelectedComponent, testOutput);
String oracleFilePath = projectFolderPath + "NuSMV3-OCRA/Files/System.oss";
TestResultsUtil.compareTwoFilesIgnoreEOL(Paths.get(ossFile.getPath()), Paths.get(oracleFilePath));
}
@Test
@PluginResource(emptyProjectPath)
public void testImportModelFromOssFile() throws Exception{
Model model = getModel();
//openEditor(model);
Package umlPackage = entityUtil.getSystemViewPackage(model);
//EntityUtil.getInstance().getCurrentSystemView();
File ossInputFile = new File("resources//EmptyProject//OssFile//System.oss");
final ImportOSSFileAction action = ImportOSSFileAction.getInstance();
if (action != null) {
TransactionalEditingDomain domain = modelSet.getEditingDomain();
System.out.println("domain: "+domain);
// Parse the file and retrieve results
action.startParsing((Package) umlPackage, ossInputFile,domain);
Class umlSelectedComponent = entityUtil.getSystemComponent(umlPackage);
TestBasicOperationsHeadless.exportModelAsOss(umlSelectedComponent, testOutput);
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
String oracleFolder = emptyProjectFolderPath + "/OssFile";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
}
public static File exportModelAsOss(Class umlSelectedComponent,String testOutput) throws Exception {
OSSTranslatorServiceAPI ossTranslatorServiceAPI = OSSTranslatorServiceAPI
.getInstance(ChessSystemModel.getInstance());
System.out.println("umlSelectedComponent: " + umlSelectedComponent);
boolean temp_variable_is_discrete = true;
logger.debug("exportRootComponentAsOssModel");
Object ocraModel = ossTranslatorServiceAPI.exportRootComponentToOssModel(umlSelectedComponent,
temp_variable_is_discrete, new NullProgressMonitor());
logger.debug("generateOssFileFromOssModel");
String fileName = ossTranslatorServiceAPI.getFileName(umlSelectedComponent);
File ossFile = ossTranslatorServiceAPI.exportOSSModelToOSSFile(ocraModel, fileName, testOutput);
return ossFile;
}
private Class getSystemComponent() throws Exception {
Model model = getModel();
Package umlSelectedPackage = entityUtil.getSystemViewPackage(model);
System.out.println("umlSelectedPackage: " + umlSelectedPackage);
Class umlSelectedComponent = entityUtil.getSystemElement(model);
return umlSelectedComponent;
}
@Test
@PluginResource(projectPath)
public void testExportStateMachinesAsSmv() throws Exception {
Model model = getModel();
SMVTranslatorServiceAPI smvTranslatorService = SMVTranslatorServiceAPI
.getInstance(ChessSystemModel.getInstance(), UMLStateMachineModel.getInstance());
String selectedDirectory = testOutput;//"testOutput";
Set<?> stateMachines = entityUtil.getNominalStateMachines(model);
logger.debug("stateMachines.size: " + stateMachines.size());
for (Object stateMachine : stateMachines) {
smvTranslatorService.exportStateMachineToSmvFile(stateMachine, selectedDirectory, null,
new NullProgressMonitor());
}
String oracleFolder = projectFolderPath + "/SmvFiles";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Before
public void setTestParameters() throws Exception {
testOutput = TestResultsUtil.cleanDirectory("testOutputBasicOperationsHeadless");
eu.fbk.tools.adapter.ui.Activator.getDefault().getPreferenceStore().setValue(
PreferenceConstants.OSLC_ENABLED, false);
}
Model getModel() {
return (Model) resourceSetFixture.getModel();
}
}