Skip to content

Commit 568bddc

Browse files
committed
Add test cases for cases falling directly out of switch blocks
1 parent 17193ac commit 568bddc

File tree

3 files changed

+51
-26
lines changed

3 files changed

+51
-26
lines changed

java/ql/test/library-tests/pattern-switch/cfg/Exhaustive.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ public static void test(E e, I i, Object o) {
2626
case Y y -> { }
2727
}
2828

29+
// Test the case where a pattern case falls directly out of a block:
30+
switch (i) {
31+
case X _:
32+
case Y _:
33+
}
34+
2935
}
3036

3137
}

java/ql/test/library-tests/pattern-switch/cfg/Test.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ case String _ when ((String)thing).length() == 5:
125125
break;
126126
}
127127

128+
// Test the case where a case falls out of a switch block without a break:
129+
switch(thing) {
130+
case String _:
131+
default:
132+
}
133+
128134
}
129135

130136
}

java/ql/test/library-tests/pattern-switch/cfg/test.expected

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
| Exhaustive.java:5:15:5:15 | { ... } | Exhaustive.java:5:15:5:15 | super(...) |
1717
| Exhaustive.java:6:15:6:15 | super(...) | Exhaustive.java:6:15:6:15 | Y |
1818
| Exhaustive.java:6:15:6:15 | { ... } | Exhaustive.java:6:15:6:15 | super(...) |
19-
| Exhaustive.java:8:47:29:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) |
19+
| Exhaustive.java:8:47:35:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) |
2020
| Exhaustive.java:11:5:11:14 | switch (...) | Exhaustive.java:11:13:11:13 | o |
2121
| Exhaustive.java:11:13:11:13 | o | Exhaustive.java:12:7:12:22 | case <Pattern> |
2222
| Exhaustive.java:12:7:12:22 | case <Pattern> | Exhaustive.java:12:19:12:19 | s |
@@ -42,13 +42,20 @@
4242
| Exhaustive.java:25:7:25:17 | case <Pattern> | Exhaustive.java:25:14:25:14 | x |
4343
| Exhaustive.java:25:7:25:17 | case <Pattern> | Exhaustive.java:26:7:26:17 | case <Pattern> |
4444
| Exhaustive.java:25:14:25:14 | x | Exhaustive.java:25:19:25:21 | { ... } |
45-
| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:8:22:8:25 | test |
45+
| Exhaustive.java:25:19:25:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) |
4646
| Exhaustive.java:26:7:26:17 | case <Pattern> | Exhaustive.java:26:14:26:14 | y |
4747
| Exhaustive.java:26:14:26:14 | y | Exhaustive.java:26:19:26:21 | { ... } |
48-
| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:8:22:8:25 | test |
48+
| Exhaustive.java:26:19:26:21 | { ... } | Exhaustive.java:30:5:30:14 | switch (...) |
49+
| Exhaustive.java:30:5:30:14 | switch (...) | Exhaustive.java:30:13:30:13 | i |
50+
| Exhaustive.java:30:13:30:13 | i | Exhaustive.java:31:7:31:15 | case <Pattern> |
51+
| Exhaustive.java:31:7:31:15 | case <Pattern> | Exhaustive.java:31:14:31:14 | <anonymous local variable> |
52+
| Exhaustive.java:31:7:31:15 | case <Pattern> | Exhaustive.java:32:7:32:15 | case <Pattern> |
53+
| Exhaustive.java:31:14:31:14 | <anonymous local variable> | Exhaustive.java:8:22:8:25 | test |
54+
| Exhaustive.java:32:7:32:15 | case <Pattern> | Exhaustive.java:32:14:32:14 | <anonymous local variable> |
55+
| Exhaustive.java:32:14:32:14 | <anonymous local variable> | Exhaustive.java:8:22:8:25 | test |
4956
| Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Test |
5057
| Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) |
51-
| Test.java:3:41:128:3 | { ... } | Test.java:5:6:5:19 | switch (...) |
58+
| Test.java:3:41:134:3 | { ... } | Test.java:5:6:5:19 | switch (...) |
5259
| Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing |
5360
| Test.java:5:14:5:18 | thing | Test.java:6:8:6:23 | case <Pattern> |
5461
| Test.java:6:8:6:23 | case <Pattern> | Test.java:6:20:6:20 | s |
@@ -365,26 +372,32 @@
365372
| Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... |
366373
| Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... |
367374
| Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break |
368-
| Test.java:123:10:123:15 | break | Test.java:3:22:3:25 | test |
375+
| Test.java:123:10:123:15 | break | Test.java:129:6:129:18 | switch (...) |
369376
| Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break |
370-
| Test.java:125:10:125:15 | break | Test.java:3:22:3:25 | test |
371-
| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | <Expr>; |
372-
| Test.java:132:8:132:8 | ...=... | Test.java:132:8:132:8 | A |
373-
| Test.java:132:8:132:8 | <Expr>; | Test.java:132:8:132:8 | this |
374-
| Test.java:132:8:132:8 | <Expr>; | Test.java:132:8:132:8 | this |
375-
| Test.java:132:8:132:8 | b | Test.java:132:8:132:8 | ...=... |
376-
| Test.java:132:8:132:8 | field3 | Test.java:132:8:132:8 | ...=... |
377-
| Test.java:132:8:132:8 | super(...) | Test.java:132:8:132:8 | <Expr>; |
378-
| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | b |
379-
| Test.java:132:8:132:8 | this | Test.java:132:8:132:8 | field3 |
380-
| Test.java:132:8:132:8 | { ... } | Test.java:132:8:132:8 | super(...) |
381-
| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | <Expr>; |
382-
| Test.java:133:8:133:8 | ...=... | Test.java:133:8:133:8 | B |
383-
| Test.java:133:8:133:8 | <Expr>; | Test.java:133:8:133:8 | this |
384-
| Test.java:133:8:133:8 | <Expr>; | Test.java:133:8:133:8 | this |
385-
| Test.java:133:8:133:8 | field1 | Test.java:133:8:133:8 | ...=... |
386-
| Test.java:133:8:133:8 | field2 | Test.java:133:8:133:8 | ...=... |
387-
| Test.java:133:8:133:8 | super(...) | Test.java:133:8:133:8 | <Expr>; |
388-
| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field1 |
389-
| Test.java:133:8:133:8 | this | Test.java:133:8:133:8 | field2 |
390-
| Test.java:133:8:133:8 | { ... } | Test.java:133:8:133:8 | super(...) |
377+
| Test.java:125:10:125:15 | break | Test.java:129:6:129:18 | switch (...) |
378+
| Test.java:129:6:129:18 | switch (...) | Test.java:129:13:129:17 | thing |
379+
| Test.java:129:13:129:17 | thing | Test.java:130:8:130:21 | case <Pattern> |
380+
| Test.java:130:8:130:21 | case <Pattern> | Test.java:130:20:130:20 | <anonymous local variable> |
381+
| Test.java:130:8:130:21 | case <Pattern> | Test.java:131:8:131:15 | default |
382+
| Test.java:130:20:130:20 | <anonymous local variable> | Test.java:131:8:131:15 | default |
383+
| Test.java:131:8:131:15 | default | Test.java:3:22:3:25 | test |
384+
| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | <Expr>; |
385+
| Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | A |
386+
| Test.java:138:8:138:8 | <Expr>; | Test.java:138:8:138:8 | this |
387+
| Test.java:138:8:138:8 | <Expr>; | Test.java:138:8:138:8 | this |
388+
| Test.java:138:8:138:8 | b | Test.java:138:8:138:8 | ...=... |
389+
| Test.java:138:8:138:8 | field3 | Test.java:138:8:138:8 | ...=... |
390+
| Test.java:138:8:138:8 | super(...) | Test.java:138:8:138:8 | <Expr>; |
391+
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | b |
392+
| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | field3 |
393+
| Test.java:138:8:138:8 | { ... } | Test.java:138:8:138:8 | super(...) |
394+
| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | <Expr>; |
395+
| Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | B |
396+
| Test.java:139:8:139:8 | <Expr>; | Test.java:139:8:139:8 | this |
397+
| Test.java:139:8:139:8 | <Expr>; | Test.java:139:8:139:8 | this |
398+
| Test.java:139:8:139:8 | field1 | Test.java:139:8:139:8 | ...=... |
399+
| Test.java:139:8:139:8 | field2 | Test.java:139:8:139:8 | ...=... |
400+
| Test.java:139:8:139:8 | super(...) | Test.java:139:8:139:8 | <Expr>; |
401+
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field1 |
402+
| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field2 |
403+
| Test.java:139:8:139:8 | { ... } | Test.java:139:8:139:8 | super(...) |

0 commit comments

Comments
 (0)