Skip to content

Commit d7dea40

Browse files
committed
Added enum tests
Added 2 error tests for enum: when setting null on a field with an enum refinement, and on a function parameter refinement. A successful error test was added as well to test backtracking to a null state.
1 parent cdf192e commit d7dea40

File tree

3 files changed

+82
-0
lines changed

3 files changed

+82
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package testSuite;
2+
3+
import liquidjava.specification.StateRefinement;
4+
import liquidjava.specification.StateSet;
5+
6+
@SuppressWarnings("unused")
7+
@StateSet({"photoMode", "videoMode", "noMode"})
8+
class CorrectEnumResetMode {
9+
enum Mode {
10+
Photo, Video, Unknown
11+
}
12+
13+
Mode mode;
14+
15+
@StateRefinement(to="noMode(this)")
16+
public CorrectEnumResetMode() {}
17+
18+
@StateRefinement(from="noMode(this) && mode == Mode.Photo", to="photoMode(this)")
19+
@StateRefinement(from="noMode(this) && mode == Mode.Video", to="videoMode(this)")
20+
public void setMode(Mode mode) {
21+
this.mode = mode;
22+
}
23+
24+
@StateRefinement(from="photoMode(this)", to="noMode(this)")
25+
@StateRefinement(from="videoMode(this)", to="noMode(this)")
26+
public void resetMode() {
27+
this.mode = null;
28+
}
29+
30+
@StateRefinement(from="photoMode(this)")
31+
public void takePhoto() {}
32+
33+
@StateRefinement(from="videoMode(this)")
34+
public void takeVideo() {}
35+
36+
public static void main(String[] args) {
37+
CorrectEnumResetMode st = new CorrectEnumResetMode();
38+
st.setMode(Mode.Photo); // noMode -> photoMode
39+
st.takePhoto();
40+
st.resetMode(); // photoMode -> noMode
41+
st.setMode(Mode.Video); // noMode -> videoMode
42+
st.takeVideo();
43+
}
44+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Refinement Error
2+
package testSuite;
3+
4+
import liquidjava.specification.Refinement;
5+
6+
@SuppressWarnings("unused")
7+
class ErrorEnumFunctionRefinement {
8+
enum Color { Red, Green, Blue }
9+
10+
Color c;
11+
12+
Color changeColor(@Refinement("newColor == Color.Red || newColor == Color.Green") Color newColor) {
13+
c = newColor; // correct
14+
return c;
15+
}
16+
17+
public static void main(String[] args) {
18+
ErrorEnumFunctionRefinement e = new ErrorEnumFunctionRefinement();
19+
e.changeColor(Color.Red); // correct
20+
e.changeColor(Color.Blue); // error
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Refinement Error
2+
package testSuite;
3+
4+
import liquidjava.specification.Refinement;
5+
6+
@SuppressWarnings("unused")
7+
class ErrorEnumNull {
8+
enum Color {
9+
Red, Green, Blue
10+
}
11+
12+
public static void main(String[] args) {
13+
@Refinement("c == Color.Red || c == Color.Green")
14+
Color c = null; // error
15+
}
16+
}

0 commit comments

Comments
 (0)