package org.overture.vdm2jml.tests; import java.io.File; import java.util.Collection; import java.util.List; import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.overture.codegen.tests.exec.util.ProcessResult; import org.overture.codegen.tests.util.JavaToolsUtils; import org.overture.codegen.utils.GeneralUtils; import org.overture.codegen.vdm2java.JavaCodeGenUtil; import org.overture.vdm2jml.tests.util.IOpenJmlConsts; import org.overture.vdm2jml.tests.util.TestUtil; @RunWith(Parameterized.class) public class JmlPassTypeCheckTests extends OpenJmlValidationBase { public JmlPassTypeCheckTests(File inputFile) { super(inputFile); } @Parameters(name = "{index}: {0}") public static Collection<Object[]> data() { File folder = new File(AnnotationTestsBase.TEST_RES_STATIC_ANALYSIS_ROOT); List<File> files = GeneralUtils.getFiles(folder); return TestUtil.collectVdmslFiles(files); } @Before public void assumeTools() { Assume.assumeTrue(String.format("JML type checker test will only run if the " + "property '%s' is passed", EXEC_PROPERTY), System.getProperty(EXEC_PROPERTY) != null); assumeOpenJml(); } @Test public void typeCheckJml() { ProcessResult processResult = runOpenJmlProcess(); assertNoProcessErrors(processResult); } @Override public String[] getProcessArgs() { String[] openJmlConfig = getTypeCheckArgs(); String[] javaFiles = JavaCodeGenUtil.findJavaFilePathsRec(genJavaFolder); return GeneralUtils.concat(openJmlConfig, javaFiles); } public String[] getTypeCheckArgs() { // Arguments to run the OpenJML type checker on a set of Java files. // A requirement is to have OpenJML installed in $OPENJML // java // -jar // $OPENJML/openjml.jar // -classpath // codegen-runtime.jar // -check // <javafiles> return new String[] { JavaToolsUtils.JAVA, JavaToolsUtils.JAR_ARG, openJml.getAbsolutePath(), IOpenJmlConsts.CP_ARG, "\"" + cgRuntime.getAbsolutePath() + File.pathSeparator + vdm2jmlRuntime.getAbsolutePath() + "\"", IOpenJmlConsts.TC }; } @Override public void beforeRunningOpenJmlProcess() { clearCodeFolder(); generateJavaJml(); } @Override protected String getPropertyId() { // Never configure execution return null; } }