test/langtools/tools/javac/switchextra/MultipleLabelsExpression.java
author jlahoda
Tue, 12 Nov 2019 06:32:13 +0000
changeset 59021 cfc7bb9a5a92
parent 55306 ea43db53de91
permissions -rw-r--r--
8232684: Make switch expressions final Reviewed-by: alanb, mcimadamore, kvn

/*
 * @test /nodynamiccopyright/
 * @bug 8206986
 * @summary Verify cases with multiple labels work properly.
 * @compile/fail/ref=MultipleLabelsExpression-old.out -source 9 -Xlint:-options -XDrawDiagnostics MultipleLabelsExpression.java
 * @compile MultipleLabelsExpression.java
 * @run main MultipleLabelsExpression
 */

import java.util.Objects;
import java.util.function.Function;

public class MultipleLabelsExpression {
    public static void main(String... args) {
        new MultipleLabelsExpression().run();
    }

    private void run() {
        runTest(this::expression1);
    }

    private void runTest(Function<T, String> print) {
        check(T.A,  print, "A");
        check(T.B,  print, "B-C");
        check(T.C,  print, "B-C");
        check(T.D,  print, "D");
        check(T.E,  print, "other");
    }

    private String expression1(T t) {
        return switch (t) {
            case A -> "A";
            case B, C -> { yield "B-C"; }
            case D -> "D";
            default -> "other";
        };
    }

    private void check(T t, Function<T, String> print, String expected) {
        String result = print.apply(t);
        if (!Objects.equals(result, expected)) {
            throw new AssertionError("Unexpected result: " + result);
        }
    }

    enum T {
        A, B, C, D, E;
    }
}