test/tools/javac/policy/test3/Test.java

Fri, 27 Sep 2013 11:34:32 -0700

author
mduigou
date
Fri, 27 Sep 2013 11:34:32 -0700
changeset 2073
4ed8565fa536
parent 1774
37295244f534
child 2525
2eb010b6cb22
permissions
-rw-r--r--

8024842: Define ABS_TEST_OUTPUT_DIR via TEST_OUTPUT_DIR
Reviewed-by: ihse, erikj, vromero

jjg@257 1 /*
vromero@1774 2 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
jjg@257 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jjg@257 4 *
jjg@257 5 * This code is free software; you can redistribute it and/or modify it
jjg@257 6 * under the terms of the GNU General Public License version 2 only, as
jjg@257 7 * published by the Free Software Foundation.
jjg@257 8 *
jjg@257 9 * This code is distributed in the hope that it will be useful, but WITHOUT
jjg@257 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jjg@257 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
jjg@257 12 * version 2 for more details (a copy is included in the LICENSE file that
jjg@257 13 * accompanied this code).
jjg@257 14 *
jjg@257 15 * You should have received a copy of the GNU General Public License version
jjg@257 16 * 2 along with this work; if not, write to the Free Software Foundation,
jjg@257 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jjg@257 18 *
ohair@554 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@554 20 * or visit www.oracle.com if you need additional information or have any
ohair@554 21 * questions.
jjg@257 22 */
jjg@257 23
jjg@257 24
jjg@257 25 /* @test
jjg@257 26 * @bug 6813059
jjg@257 27 * @summary
jjg@257 28 */
jjg@257 29
jjg@257 30 import java.io.*;
jjg@257 31 import java.util.*;
jjg@257 32
jjg@257 33 // Simple test of -XDshouldStopPolicy.
jjg@257 34 // For each of the permissable values, we compile a file with an error in it,
jjg@257 35 // then using -XDverboseCompilePolicy we check that the compilation gets as
jjg@257 36 // far as expected, but no further.
jjg@257 37
jjg@257 38 public class Test {
jjg@257 39 enum ShouldStopPolicy {
jjg@257 40 BLANK(false, null, "attr"),
jjg@257 41 PROCESS(true, null, "attr"),
jjg@257 42 ATTR(true, "attr", "flow"),
jjg@257 43 FLOW(true, "flow", "desugar"),
jjg@257 44 TRANSTYPES(true, "desugar", "generate"),
jjg@257 45 LOWER(true, "desugar", "generate"),
jjg@257 46 GENERATE(true, "generate", null);
jjg@257 47 ShouldStopPolicy(boolean needOption, String expect, String dontExpect) {
jjg@257 48 this.needOption = needOption;
jjg@257 49 this.expect = expect;
jjg@257 50 this.dontExpect = dontExpect;
jjg@257 51 }
jjg@257 52 boolean needOption;
jjg@257 53 String expect;
jjg@257 54 String dontExpect;
jjg@257 55 }
jjg@257 56
jjg@257 57 enum CompilePolicy {
jjg@257 58 BYFILE,
jjg@257 59 BYTODO
jjg@257 60 }
jjg@257 61
jjg@257 62 public static void main(String... args) throws Exception {
jjg@257 63 new Test().run();
jjg@257 64 }
jjg@257 65
jjg@257 66 public void run() throws Exception {
jjg@257 67 for (CompilePolicy cp: CompilePolicy.values()) {
jjg@257 68 for (ShouldStopPolicy ssp: ShouldStopPolicy.values()) {
jjg@257 69 test(cp, ssp);
jjg@257 70 }
jjg@257 71 }
jjg@257 72
jjg@257 73 if (errors > 0)
jjg@257 74 throw new Exception(errors + " errors occurred");
jjg@257 75 }
jjg@257 76
jjg@257 77 public void test(CompilePolicy cp, ShouldStopPolicy ssp) {
jjg@257 78 System.err.println();
jjg@257 79 System.err.println("test " + cp + " " + ssp);
jjg@257 80 List<String> args = new ArrayList<String>();
jjg@257 81 args.add("-XDverboseCompilePolicy");
jjg@257 82 args.add("-XDcompilePolicy=" + cp.toString().toLowerCase());
jjg@257 83 args.add("-d");
jjg@257 84 args.add(".");
jjg@257 85 if (ssp.needOption)
jjg@257 86 args.add("-XDshouldStopPolicy=" + ssp);
jjg@257 87 args.add(new File(System.getProperty("test.src", "."), "A.java").getPath());
jjg@257 88
jjg@257 89 StringWriter sw = new StringWriter();
jjg@257 90 PrintWriter pw = new PrintWriter(sw);
jjg@257 91 System.err.println("compile " + args);
jjg@257 92 int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
jjg@257 93 if (rc == 0)
jjg@257 94 throw new Error("compilation succeeded unexpectedly");
jjg@257 95 //System.err.println(sw);
jjg@257 96
jjg@257 97 // The following is a workaround for the current javac implementation,
jjg@257 98 // that in bytodo mode, it will still attribute files after syntax errors.
jjg@257 99 // Changing that behavior may surprise existing users, so for now, we
jjg@257 100 // work around it.
jjg@257 101 if (cp == CompilePolicy.BYTODO && ssp == ShouldStopPolicy.PROCESS)
jjg@257 102 ssp = ShouldStopPolicy.ATTR;
jjg@257 103
jjg@257 104 boolean foundExpected = (ssp.expect == null);
jjg@257 105 String[] lines = sw.toString().split("\n");
jjg@257 106 for (String line: lines) {
jjg@257 107 if (ssp.expect != null && line.startsWith("[" + ssp.expect))
jjg@257 108 foundExpected = true;
jjg@257 109 if (ssp.dontExpect != null && line.startsWith("[" + ssp.dontExpect)) {
jjg@257 110 error("Unexpected output: " + ssp.dontExpect + "\n" + sw);
jjg@257 111 return;
jjg@257 112 }
jjg@257 113 }
jjg@257 114
jjg@257 115 if (!foundExpected)
jjg@257 116 error("Expected output not found: " + ssp.expect + "\n" + sw);
jjg@257 117 }
jjg@257 118
jjg@257 119 void error(String message) {
jjg@257 120 System.err.println(message);
jjg@257 121 errors++;
jjg@257 122 }
jjg@257 123
jjg@257 124 int errors;
jjg@257 125 }

mercurial