|
1 /* |
|
2 * @test /nodynamiccopyright/ |
|
3 * @bug 8206986 |
|
4 * @summary Verify cases with multiple labels work properly. |
|
5 * @compile/fail/ref=MultipleLabelsExpression-old.out -source 9 -Xlint:-options -XDrawDiagnostics MultipleLabelsExpression.java |
|
6 * @compile --enable-preview -source 12 MultipleLabelsExpression.java |
|
7 * @run main/othervm --enable-preview MultipleLabelsExpression |
|
8 */ |
|
9 |
|
10 import java.util.Objects; |
|
11 import java.util.function.Function; |
|
12 |
|
13 public class MultipleLabelsExpression { |
|
14 public static void main(String... args) { |
|
15 new MultipleLabelsExpression().run(); |
|
16 } |
|
17 |
|
18 private void run() { |
|
19 runTest(this::expression1); |
|
20 } |
|
21 |
|
22 private void runTest(Function<T, String> print) { |
|
23 check(T.A, print, "A"); |
|
24 check(T.B, print, "B-C"); |
|
25 check(T.C, print, "B-C"); |
|
26 check(T.D, print, "D"); |
|
27 check(T.E, print, "other"); |
|
28 } |
|
29 |
|
30 private String expression1(T t) { |
|
31 return switch (t) { |
|
32 case A -> "A"; |
|
33 case B, C -> { break "B-C"; } |
|
34 case D -> "D"; |
|
35 default -> "other"; |
|
36 }; |
|
37 } |
|
38 |
|
39 private void check(T t, Function<T, String> print, String expected) { |
|
40 String result = print.apply(t); |
|
41 if (!Objects.equals(result, expected)) { |
|
42 throw new AssertionError("Unexpected result: " + result); |
|
43 } |
|
44 } |
|
45 |
|
46 enum T { |
|
47 A, B, C, D, E; |
|
48 } |
|
49 } |