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

     1 /*
     2  * Copyright (c) 2009, 2013, 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  */
    25 /* @test
    26  * @bug 6813059
    27  * @summary
    28  */
    30 import java.io.*;
    31 import java.util.*;
    33 // Simple test of -XDshouldStopPolicy.
    34 // For each of the permissable values, we compile a file with an error in it,
    35 // then using -XDverboseCompilePolicy we check that the compilation gets as
    36 // far as expected, but no further.
    38 public class Test {
    39     enum ShouldStopPolicy {
    40         BLANK(false, null, "attr"),
    41         PROCESS(true, null, "attr"),
    42         ATTR(true, "attr", "flow"),
    43         FLOW(true, "flow", "desugar"),
    44         TRANSTYPES(true, "desugar", "generate"),
    45         LOWER(true, "desugar", "generate"),
    46         GENERATE(true, "generate", null);
    47         ShouldStopPolicy(boolean needOption, String expect, String dontExpect) {
    48             this.needOption = needOption;
    49             this.expect = expect;
    50             this.dontExpect = dontExpect;
    51         }
    52         boolean needOption;
    53         String expect;
    54         String dontExpect;
    55     }
    57     enum CompilePolicy {
    58         BYFILE,
    59         BYTODO
    60     }
    62     public static void main(String... args) throws Exception {
    63         new Test().run();
    64     }
    66     public void run() throws Exception {
    67         for (CompilePolicy cp: CompilePolicy.values()) {
    68             for (ShouldStopPolicy ssp: ShouldStopPolicy.values()) {
    69                 test(cp, ssp);
    70             }
    71         }
    73         if (errors > 0)
    74             throw new Exception(errors + " errors occurred");
    75     }
    77     public void test(CompilePolicy cp, ShouldStopPolicy ssp) {
    78         System.err.println();
    79         System.err.println("test " + cp + " " + ssp);
    80         List<String> args = new ArrayList<String>();
    81         args.add("-XDverboseCompilePolicy");
    82         args.add("-XDcompilePolicy=" + cp.toString().toLowerCase());
    83         args.add("-d");
    84         args.add(".");
    85         if (ssp.needOption)
    86             args.add("-XDshouldStopPolicy=" + ssp);
    87         args.add(new File(System.getProperty("test.src", "."), "A.java").getPath());
    89         StringWriter sw = new StringWriter();
    90         PrintWriter pw = new PrintWriter(sw);
    91         System.err.println("compile " + args);
    92         int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
    93         if (rc == 0)
    94             throw new Error("compilation succeeded unexpectedly");
    95         //System.err.println(sw);
    97         // The following is a workaround for the current javac implementation,
    98         // that in bytodo mode, it will still attribute files after syntax errors.
    99         // Changing that behavior may surprise existing users, so for now, we
   100         // work around it.
   101         if (cp == CompilePolicy.BYTODO && ssp == ShouldStopPolicy.PROCESS)
   102             ssp = ShouldStopPolicy.ATTR;
   104         boolean foundExpected = (ssp.expect == null);
   105         String[] lines = sw.toString().split("\n");
   106         for (String line: lines) {
   107             if (ssp.expect != null && line.startsWith("[" + ssp.expect))
   108                 foundExpected = true;
   109             if (ssp.dontExpect != null && line.startsWith("[" + ssp.dontExpect)) {
   110                 error("Unexpected output: " + ssp.dontExpect + "\n" + sw);
   111                 return;
   112             }
   113         }
   115         if (!foundExpected)
   116             error("Expected output not found: " + ssp.expect + "\n" + sw);
   117     }
   119     void error(String message) {
   120         System.err.println(message);
   121         errors++;
   122     }
   124     int errors;
   125 }

mercurial