1/*
2 * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 7025809 8028543 6415644 8028544 8029942
27 * @summary Test latest, latestSupported, underscore as keyword, etc.
28 * @author  Joseph D. Darcy
29 * @modules java.compiler
30 *          jdk.compiler
31 */
32
33import java.util.*;
34import javax.lang.model.SourceVersion;
35import static javax.lang.model.SourceVersion.*;
36
37/**
38 * Verify latest[Supported] behavior.
39 */
40public class TestSourceVersion {
41    public static void main(String... args) {
42        testLatestSupported();
43        testVersionVaryingKeywords();
44    }
45
46    private static void testLatestSupported() {
47        if (SourceVersion.latest() != RELEASE_10 ||
48            SourceVersion.latestSupported() != RELEASE_10)
49            throw new RuntimeException("Unexpected release value(s) found:\n" +
50                                       "latest:\t" + SourceVersion.latest() + "\n" +
51                                       "latestSupported:\t" + SourceVersion.latestSupported());
52    }
53
54    private static void testVersionVaryingKeywords() {
55        Map<String, SourceVersion> keyWordStart =
56            Map.of("strictfp", RELEASE_2,
57                   "assert",   RELEASE_4,
58                   "enum",     RELEASE_5,
59                   "_",        RELEASE_9);
60
61        for (Map.Entry<String, SourceVersion> entry : keyWordStart.entrySet()) {
62            String key = entry.getKey();
63            SourceVersion value = entry.getValue();
64
65            check(true, isKeyword(key), "keyword", latest());
66            check(false, isName(key),   "name",    latest());
67
68            for(SourceVersion version : SourceVersion.values()) {
69                boolean isKeyword = version.compareTo(value) >= 0;
70
71                check(isKeyword,  isKeyword(key, version), "keyword", version);
72                check(!isKeyword, isName(key, version),    "name",    version);
73            }
74        }
75    }
76
77    private static void check(boolean result, boolean expected,
78                              String message, SourceVersion version) {
79        if (result != expected) {
80            throw new RuntimeException("Unexpected " + message +  "-ness of _ on " + version);
81        }
82    }
83}
84