package org.jmlspecs.openjmltest.testcases; import static org.junit.Assert.fail; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.jmlspecs.openjml.Utils; import org.jmlspecs.openjmltest.EscBase; import org.junit.Assert; import org.junit.Assume; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.ParameterizedWithNames; /** These tests check running ESC on files in the file system, comparing the * output against expected files. These tests are a bit easier to create, since * the file and output do not have to be converted into Strings; however, they * are not as easily read, since the content is tucked away in files, rather * than immediately there in the test class. * <P> * To add a new test: * <UL> * <LI> create a directory containing the test files as a subdirectory of * 'test' * <LI> add a test to this class - typically named similarly to the folder * containing the source data * </UL> */ @RunWith(ParameterizedWithNames.class) @Ignore public class escfilesTrace extends EscBase { boolean enableSubexpressions = false; public escfilesTrace(String options, String solver) { super(options,solver); } String[] rac = null; /** The command-line to use to run ESC on a program */ String[] sysrac = new String[]{jdk, "-classpath","bin"+z+"../OpenJML/bin-runtime",null}; @Override public void setUp() throws Exception { rac = sysrac; super.setUp(); } public java.util.List<String> setupForFiles(String sourceDirname, String outDir, String ... opts) { ignoreNotes = true; new File(outDir).mkdirs(); java.util.List<String> args = new LinkedList<String>(); args.add("-esc"); args.add("-noPurityCheck"); args.add("-jmltesting"); if (new File(sourceDirname).isDirectory()) args.add("-dir"); args.add(sourceDirname); if (solver != null) args.add("-prover="+solver); addOptionsToArgs(options,args); args.addAll(Arrays.asList(opts)); return args; } public void helpTCF(String sourceDirname, String outDir, String ... opts) { // Assert.fail(); escOnFiles(sourceDirname,outDir,opts); } String OpenJMLDemoNonPublicPath = "../../OpenJMLDemoNonPublic"; @Test public void testDMZCashTrace() { expectedExit = 0; helpTCF(OpenJMLDemoNonPublicPath + "/src/dmz2","test/escDmz2Trace","-subexpressions","-method=dmz2.Cash.Cash","-escMaxWarnings=1","-jmltesting"); } @Test @Ignore // Ignoring for now because the output is too volatile, even if correct - lots of paths that can be found in various orders public void testDemoPaths() { expectedExit = 0; helpTCF(OpenJMLDemoPath + "/src/openjml/demo/Paths.java","test/escDemoPaths","-subexpressions","-progress"); } @Test public void testDemoChangeCase() { expectedExit = 0; helpTCF(OpenJMLDemoPath + "/src/openjml/demo/ChangeCase.java","test/escDemoChangeCase","-noInternalSpecs","-progress","-method=changeCase","-escMaxWarnings=1","-subexpressions","-jmltesting"); } @Test public void testTrace() { expectedExit = 0; helpTCF("test/escTrace","test/escTrace", "-method=m","-escMaxWarnings=1",enableSubexpressions ? "-subexpressions" : ""); } @Test public void testTrace2() { expectedExit = 0; helpTCF("test/escTrace2","test/escTrace2","-method=m", enableSubexpressions ? "-subexpressions" : ""); } @Test public void testTrace3() { expectedExit = 0; helpTCF("test/escTrace3","test/escTrace3","-progress", enableSubexpressions ? "-subexpressions" : "", "-jmltesting"); } @Test public void testTrace4() { expectedExit = 0; helpTCF("test/escTrace4","test/escTrace4","-method=m","-subexpressions","-progress"); } @Test public void testTrace5() { expectedExit = 0; helpTCF("test/escTrace5","test/escTrace5","-method=m","-progress", enableSubexpressions ? "-subexpressions" : "","-jmltesting"); } @Test public void testTrace6() { expectedExit = 0; helpTCF("test/escTrace6","test/escTrace6","-progress", "-subexpressions","-jmltesting"); } @Test public void testTraceloops() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops","-method=mgood","-progress", "-subexpressions","-jmltesting"); } @Test public void testTraceloops1() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops1","-method=m1","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceloops2() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops2","-method=m2","-subexpressions","-progress"); } @Test public void testTraceloops3() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops3","-method=m3","-progress", enableSubexpressions ? "-subexpressions" : ""); } @Test public void testTraceloops4() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops4","-method=m4","-progress", enableSubexpressions ? "-subexpressions" : ""); } @Test public void testTraceloops5() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops5","-method=m5","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceloops6() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceLoops6","-method=m6","-subexpressions","-progress"); } @Test public void testTraceWhile() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceWhile","-method=mwhile","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceWhile1() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceWhile1","-method=mwhile1","-subexpressions","-progress"); } @Test public void testTraceWhile2() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceWhile2","-method=mwhile2","-subexpressions","-progress"); } @Test public void testTraceDo() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceDo","-method=mdo","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceDo1() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceDo1","-method=mdo1","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceDo2() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceDo2","-method=mdo2","-subexpressions","-progress"); } @Test public void testTraceForeach() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach","-method=mforeach","-subexpressions","-progress"); } @Test public void testTraceForeach1() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach1","-method=mforeach1","-subexpressions","-progress"); } @Test public void testTraceForeach2() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach2","-method=mforeach2","-subexpressions","-progress"); } @Test public void testTraceForeach3() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach3","-method=mforeach3","-subexpressions","-progress","-jmltesting"); } @Test public void testTraceForeach4() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach4","-method=mforeach4","-subexpressions","-progress"); } @Test public void testTraceForeach5() { expectedExit = 0; helpTCF("test/escTraceLoops","test/escTraceForeach5","-method=mforeach5","-subexpressions","-progress"); } @Test public void testTraceBS() { expectedExit = 0; helpTCF("test/escTraceBS","test/escTraceBS","-subexpressions","-progress"); } }