/* * #%~ * VDM to Isabelle Translation * %% * Copyright (C) 2008 - 2015 Overture * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #~% */ package org.overturetool.cgisa; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.lang.reflect.Type; import java.util.Collection; import org.apache.commons.io.FileUtils; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.overture.ast.analysis.AnalysisException; import org.overture.ast.expressions.PExp; import org.overture.codegen.utils.GeneratedModule; import org.overture.core.testing.ParamFineGrainTest; import org.overture.core.testing.ParseTcFacade; import org.overture.core.testing.PathsProvider; import com.google.gson.reflect.TypeToken; /** * Main parameterized test class. Runs tests on modules with minimal definitions to exercise the translation with a * single construct at a time. * * @author ldc */ @RunWith(Parameterized.class) public class IsaGenFileExpTest extends ParamFineGrainTest<CgIsaTestResult> { public IsaGenFileExpTest(String nameParameter, String inputParameter, String resultParameter) { super(nameParameter, inputParameter, resultParameter); } private static final String UPDATE = "tests.update.isagen"; private static final String EXPS_ROOT = "src/test/resources/exps"; @Parameters(name = "{index} : {0}") public static Collection<Object[]> testData() { return PathsProvider.computePaths(EXPS_ROOT); } @Override public Type getResultType() { Type resultType = new TypeToken<CgIsaTestResult>() { }.getType(); return resultType; } @Override protected String getUpdatePropertyString() { return UPDATE; } @Override public void compareResults(CgIsaTestResult actual, CgIsaTestResult expected) { assertTrue("\n --- Expected: ---\n" + expected.translation + "\n --- Got: ---\n" + actual.translation, expected.compare(actual)); } @Override public CgIsaTestResult processSource() { IsaGen gen = new IsaGen(); GeneratedModule result = null; try { String exp = FileUtils.readFileToString(new File(modelPath)); PExp pexp = ParseTcFacade.parseTcExpressionString(exp); result = gen.generateIsabelleSyntax(pexp); if (!result.canBeGenerated()) { StringBuilder sb = new StringBuilder(); sb.append(result.getMergeErrors()); sb.append(result.getUnsupportedInIr()); sb.append(result.getUnsupportedInTargLang()); fail(sb.toString()); } } catch (AnalysisException | org.overture.codegen.ir.analysis.AnalysisException | IOException e) { fail("Could not process test file " + testName + "Reason: " + e.getMessage()); return null; } return CgIsaTestResult.convert(result); } }