test/langtools/tools/javac/switchextra/MultipleLabelsStatement.java
author darcy
Thu, 21 Feb 2019 10:29:16 -0800
changeset 53878 4584d0331318
parent 53023 6879069d9d94
child 59021 cfc7bb9a5a92
permissions -rw-r--r--
8219254: Update explicit uses of latest source/target in langtools tests to a property 8219256: Update javac diags tests to use properties Reviewed-by: jjg, jlahoda, darcy, iignatyev Contributed-by: joe.darcy@oracle.com, jonathan.gibbons@oracle.com

/*
 * @test /nodynamiccopyright/
 * @bug 8206986
 * @summary Verify cases with multiple labels work properly.
 * @compile/fail/ref=MultipleLabelsStatement-old.out -source 9 -Xlint:-options -XDrawDiagnostics MultipleLabelsStatement.java
 * @compile --enable-preview -source ${jdk.version} MultipleLabelsStatement.java
 * @run main/othervm --enable-preview MultipleLabelsStatement
 */

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

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

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

    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 statement1(T t) {
        String res;

        switch (t) {
            case A: res = "A"; break;
            case B, C: res = "B-C"; break;
            case D: res = "D"; break;
            default: res = "other"; break;
        }

        return res;
    }

    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;
    }
}