package org.jmlspecs.openjmltest.testcases;
import java.util.ArrayList;
import java.util.Collection;
import org.jmlspecs.openjmltest.EscBase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.ParameterizedWithNames;
import org.junit.runners.Parameterized.Parameters;
@RunWith(ParameterizedWithNames.class)
public class escnewBoxing extends EscBase {
public escnewBoxing(String options, String solver) {
super(options,solver);
}
@Override
public void setUp() throws Exception {
//noCollectDiagnostics = true;
super.setUp();
//print = true;
}
@Test
public void testSimple() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" \n"
+" public void m1good() {\n"
+" Integer i = 5;\n"
+" int k = i;\n"
+" //@ assert k == 5 ;\n"
+" }\n"
+" \n"
+" public void m1bad() {\n"
+" Integer i = 5;\n"
+" int k = i;\n"
+" //@ assert k == 6 ;\n"
+" }\n"
+" \n"
+" public void m1bad2() {\n"
+" Integer i = null;\n"
+" int k = i;\n"
+" //@ assert k == 6 ;\n"
+" }\n"
+" \n"
+" public void m2good() {\n"
+" Integer i = 5;\n"
+" //@ assert i != null ;\n"
+" //@ assert \\typeof(i) == \\type(Integer) ;\n" // Line 25
+" }\n"
+"}"
,"/tt/TestJava.java:13: warning: The prover cannot establish an assertion (Assert) in method m1bad",9
,"/tt/TestJava.java:18: warning: The prover cannot establish an assertion (PossiblyNullUnbox) in method m1bad2",13
);
}
@Test
public void testSimple2Static() {
main.addOptions("-show");
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" static Integer i = 5;\n"
+" static int k = i;\n"
+" static { //@ assert k == 5; \n}\n"
+" static { Integer j = 6; int m = j; //@ assert m == 6; \n}\n"
+" static { Integer j = null; int m = j; \n}\n"
+"}"
); // FIXME - should generate warnings here
}
@Test
public void testSimple2() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" Integer i = 5;\n"
+" int k = i;\n"
+" { //@ assert k == 5; \n}\n"
+" { Integer j = 6; int m = j; //@ assert m == 6; \n}\n"
+" { Integer j = null; int m = j; \n}\n"
+"}",
"/tt/TestJava.java:9: warning: The prover cannot establish an assertion (PossiblyNullUnbox) in method TestJava",31
);
}
@Test
public void testSwitch() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" public void m(int i) {;\n"
+" Integer k = i ; int m = 0;\n"
+" switch (k) {\n"
+" case 1: m = 1; break;\n"
+" case 2: m = i; break;\n"
+" default: m = i; break;\n"
+" } //@ assert m == i; \n"
+"}}"
);
}
@Test
public void testSwitchShort() {
main.addOptions("-show","-method=m");
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" public void m(short i) {;\n"
+" Short k = i ; int m = 0;\n"
+" switch (k) {\n"
+" case 1: m = 1; break;\n"
+" case 2: m = i; break;\n"
+" default: m = i; break;\n"
+" } //@ assert m == i; \n"
+"}}"
);
}
@Test
public void testSwitchByte() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" public void m(byte i) {;\n"
+" Byte k = i ; int m = 0;\n"
+" switch (k) {\n"
+" case 1: m = 1; break;\n"
+" case 2: m = i; break;\n"
+" default: m = i; break;\n"
+" } //@ assert m == i; \n"
+"}}"
);
}
@Test
public void testSwitchNull() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" public void m(int i) {;\n"
+" Integer k = null ; int m = 0;\n"
+" switch (k) {\n"
+" case 1: m = 1; break;\n"
+" case 2: m = i; break;\n"
+" default: m = i; break;\n"
+" } //@ assert m == i; \n"
+"}}"
,"/tt/TestJava.java:5: warning: The prover cannot establish an assertion (PossiblyNullUnbox) in method m",10
);
}
@Test
public void testBinary() {
helpTCX("tt.TestJava","package tt; \n"
+"/*@ nullable_by_default*/ public class TestJava { \n"
+" public void m(int i) {\n"
+" Integer k = 6 ; int m = 1;\n"
+" int z = m + k; \n"
+" //@ assert z == 7; \n"
+" z = k + m; \n"
+" //@ assert z == 8; \n"
+" } \n"
+" public void m1bad(int i) {\n"
+" Integer k = null; int m = 1;\n"
+" int z = m + k; \n"
+" } \n"
+" public void m2bad(int i) {\n"
+" Integer k = null; int m = 1;\n"
+" int z = k + m; \n"
+" } \n"
+"}"
,"/tt/TestJava.java:8: warning: The prover cannot establish an assertion (Assert) in method m",7
,"/tt/TestJava.java:12: warning: The prover cannot establish an assertion (PossiblyNullUnbox) in method m1bad",15
,"/tt/TestJava.java:16: warning: The prover cannot establish an assertion (PossiblyNullUnbox) in method m2bad",11
);
}
}