test/langtools/tools/javac/switchextra/MultipleLabelsExpression.java
changeset 51563 de411d537aae
child 53023 6879069d9d94
equal deleted inserted replaced
51562:1b1bca603244 51563:de411d537aae
       
     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 }