package org.jmlspecs.openjmltest.testcases; import java.util.Collection; import org.jmlspecs.openjmltest.EscBase; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameters; import org.junit.runners.ParameterizedWithNames; @RunWith(ParameterizedWithNames.class) public class escoption extends EscBase { public escoption(String options, String solver) { super(options,solver); } @Parameters static public Collection<String[]> parameters() { return minQuantAndSolvers(solvers); } @Override public void setUp() throws Exception { //noCollectDiagnostics = true; captureOutput = true; super.setUp(); main.addOptions("-nullableByDefault"); // Because the tests were written this way main.addOptions("-quiet"); main.addOptions("-checkFeasibility=none"); //main.addOptions("-trace"); //JmlEsc.escdebug = true; //org.jmlspecs.openjml.provers.YicesProver.showCommunication = 3; //print = true; } @Test public void testOption() { helpTCX("tt.TestJava","package tt; import org.jmlspecs.annotation.*; \n" +"public class TestJava { \n" +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert(boolean bb, boolean b) { /*@ assume b; */ /*@assert false;*/ }\n" // Should fail because of the explicit assert false +" //@ requires bb;\n" +" //@ ensures true;\n" +" @Options(\"-progress\") \n" +" public static void bassert2(boolean bb, boolean b) { /*@ assume b; */ /*@assert !bb;*/ }\n" // Should fail because of the tautologically false assert +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert3(boolean bb, boolean b) { /*@ assume bb; */ /*@assert b;*/ }\n" // Should fail because of the unprovable assert +"}" ,"/tt/TestJava.java:5: warning: The prover cannot establish an assertion (Assert) in method bassert",75 ,"/tt/TestJava.java:9: warning: The prover cannot establish an assertion (Assert) in method bassert2",76 ,"/tt/TestJava.java:12: warning: The prover cannot establish an assertion (Assert) in method bassert3",77 ); String out = output(); org.junit.Assert.assertEquals(out, "Starting proof of tt.TestJava.bassert2(boolean,boolean) with prover !!!!" + eol + "Completed proof of tt.TestJava.bassert2(boolean,boolean) with prover !!!! - with warnings" + eol ) ; } @Test public void testOption2() { helpTCX("tt.TestJava","package tt; import org.jmlspecs.annotation.*; \n" +" @Options({\"-progress\",\"-checkFeasibility=none\"}) " +"public class TestJava { \n" +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert(boolean bb, boolean b) { /*@ assume b; */ /*@assert false;*/ }\n" // Should fail because of the explicit assert false +" //@ requires bb;\n" +" //@ ensures true;\n" +" @Options(\"-quiet\") \n" +" public static void bassert2(boolean bb, boolean b) { /*@ assume b; */ /*@assert !bb;*/ }\n" // Should fail because of the tautologically false assert +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert3(boolean bb, boolean b) { /*@ assume bb; */ /*@assert b;*/ }\n" // Should fail because of the unprovable assert +"}" ,"/tt/TestJava.java:5: warning: The prover cannot establish an assertion (Assert) in method bassert",75 ,"/tt/TestJava.java:9: warning: The prover cannot establish an assertion (Assert) in method bassert2",76 ,"/tt/TestJava.java:12: warning: The prover cannot establish an assertion (Assert) in method bassert3",77 ); String out = output(); org.junit.Assert.assertEquals( "Proving methods in tt.TestJava" + eol + "Starting proof of tt.TestJava.TestJava() with prover !!!!" + eol + "Completed proof of tt.TestJava.TestJava() with prover !!!! - no warnings" + eol + "Starting proof of tt.TestJava.bassert(boolean,boolean) with prover !!!!" + eol + "Completed proof of tt.TestJava.bassert(boolean,boolean) with prover !!!! - with warnings" + eol + "Starting proof of tt.TestJava.bassert3(boolean,boolean) with prover !!!!" + eol + "Completed proof of tt.TestJava.bassert3(boolean,boolean) with prover !!!! - with warnings" + eol + "Completed proving methods in tt.TestJava" + eol ,out) ; } @Test public void testOption3() { helpTCX("tt.TestJava","package tt; import org.jmlspecs.annotation.*; \n" +" @Options({\"-progress\",\"-checkFeasibility=none\"}) " +"public class TestJava { \n" +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert(boolean bb, boolean b) { /*@ assume b; */ /*@assert false;*/ }\n" // Should fail because of the explicit assert false +" //@ requires bb;\n" +" //@ ensures true;\n" +" @Options(\"-quiet\") \n" +" public static void bassert2(boolean bb, boolean b) { /*@ assume b; */ /*@assert !bb;*/ }\n" // Should fail because of the tautologically false assert +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert3(boolean bb, boolean b) { /*@ assume bb; */ /*@assert b;*/ }\n" // Should fail because of the unprovable assert +"}\n" +"class A { \n" +" //@ requires bb;\n" +" //@ ensures true;\n" +" public static void bassert(boolean bb, boolean b) { /*@ assume b; */ /*@assert false;*/ }\n" // Should fail because of the explicit assert false +"}" ,"/tt/TestJava.java:5: warning: The prover cannot establish an assertion (Assert) in method bassert",75 ,"/tt/TestJava.java:9: warning: The prover cannot establish an assertion (Assert) in method bassert2",76 ,"/tt/TestJava.java:12: warning: The prover cannot establish an assertion (Assert) in method bassert3",77 ,"/tt/TestJava.java:17: warning: The prover cannot establish an assertion (Assert) in method bassert",75 ); String out = output(); org.junit.Assert.assertEquals(out, "Proving methods in tt.TestJava" + eol + "Starting proof of tt.TestJava.TestJava() with prover !!!!" + eol + "Completed proof of tt.TestJava.TestJava() with prover !!!! - no warnings" + eol + "Starting proof of tt.TestJava.bassert(boolean,boolean) with prover !!!!" + eol + "Completed proof of tt.TestJava.bassert(boolean,boolean) with prover !!!! - with warnings" + eol + "Starting proof of tt.TestJava.bassert3(boolean,boolean) with prover !!!!" + eol + "Completed proof of tt.TestJava.bassert3(boolean,boolean) with prover !!!! - with warnings" + eol + "Completed proving methods in tt.TestJava" + eol ) ; } }