test/jdk/tools/launcher/SourceMode.java
author goetz
Fri, 20 Jul 2018 09:33:49 +0200
changeset 51213 24c4780f69a5
parent 50850 208eff1d03e0
child 51841 f191aca8f96d
permissions -rw-r--r--
8207766: [testbug] Adapt tests for Aix. Reviewed-by: clanger, mbaesken
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     1
/*
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     2
 * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     4
 *
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     8
 *
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    13
 * accompanied this code).
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    14
 *
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    18
 *
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    21
 * questions.
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    22
 */
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    23
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
    24
/**
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    25
 * @test
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    26
 * @bug 8192920 8204588
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    27
 * @summary Test source mode
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    28
 * @modules jdk.compiler jdk.jlink
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    29
 * @run main SourceMode
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    30
 */
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    31
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    32
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    33
import java.io.IOException;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    34
import java.io.PrintStream;
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    35
import java.nio.file.Files;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    36
import java.nio.file.Path;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    37
import java.nio.file.Paths;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    38
import java.nio.file.attribute.PosixFilePermission;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    39
import java.util.ArrayList;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    40
import java.util.Arrays;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    41
import java.util.HashMap;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    42
import java.util.List;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    43
import java.util.Map;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    44
import java.util.Set;
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    45
import java.util.spi.ToolProvider;
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    46
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    47
public class SourceMode extends TestHelper {
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    48
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    49
    public static void main(String... args) throws Exception {
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    50
        new SourceMode().run(args);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    51
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    52
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    53
    // To reduce the chance of creating shebang lines that are too long,
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    54
    // use a shorter path for a java command if the standard path is too long.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    55
    private final Path shebangJavaCmd;
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    56
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    57
    // Whether or not to automatically skip the shebang tests
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    58
    private final boolean skipShebangTest;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    59
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    60
    private final PrintStream log;
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    61
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    62
    private static final String thisVersion = System.getProperty("java.specification.version");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    63
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    64
    SourceMode() throws Exception {
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    65
        log = System.err;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    66
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    67
        if (isWindows) {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    68
            // Skip shebang tests on Windows, because that requires Cygwin.
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    69
            skipShebangTest = true;
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    70
            shebangJavaCmd = null;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    71
        } else {
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    72
            // Try to ensure the path to the Java launcher is reasonably short,
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    73
            // to work around the mostly undocumented limit of 120 characters
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    74
            // for a shebang line.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    75
            // The value of 120 is the typical kernel compile-time buffer limit.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    76
            // The following limit of 80 allows room for arguments to be placed
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    77
            // after the path to the launcher on the shebang line.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    78
            Path cmd = Paths.get(javaCmd);
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    79
            if (cmd.toString().length() < 80) {
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    80
                shebangJavaCmd = cmd;
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    81
            } else {
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    82
                // Create a small image in the current directory, such that
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    83
                // the path for the launcher is just "tmpJDK/bin/java".
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    84
                Path tmpJDK = Paths.get("tmpJDK");
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    85
                ToolProvider jlink = ToolProvider.findFirst("jlink")
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    86
                    .orElseThrow(() -> new Exception("cannot find jlink"));
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    87
                jlink.run(System.out, System.err,
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    88
                    "--add-modules", "jdk.compiler,jdk.zipfs", "--output", tmpJDK.toString());
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    89
                shebangJavaCmd = tmpJDK.resolve("bin").resolve("java");
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    90
            }
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    91
            log.println("Using java command: " + shebangJavaCmd);
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
    92
            skipShebangTest = false;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    93
        }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    94
    }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    95
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    96
    // java Simple.java 1 2 3
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    97
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
    98
    void testSimpleJava() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
    99
        starting("testSimpleJava");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   100
        Path file = getSimpleFile("Simple.java", false);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   101
        TestResult tr = doExec(javaCmd, file.toString(), "1", "2", "3");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   102
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   103
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   104
        if (!tr.contains("[1, 2, 3]"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   105
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   106
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   107
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   108
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   109
    // java --source N simple 1 2 3
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   110
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   111
    void testSimple() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   112
        starting("testSimple");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   113
        Path file = getSimpleFile("simple", false);
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   114
        TestResult tr = doExec(javaCmd, "--source", thisVersion, file.toString(), "1", "2", "3");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   115
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   116
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   117
        if (!tr.contains("[1, 2, 3]"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   118
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   119
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   120
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   121
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   122
    // execSimple 1 2 3
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   123
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   124
    void testExecSimple() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   125
        starting("testExecSimple");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   126
        if (skipShebangTest) {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   127
            log.println("SKIPPED");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   128
            return;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   129
        }
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   130
        Path file = setExecutable(getSimpleFile("execSimple", true));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   131
        TestResult tr = doExec(file.toAbsolutePath().toString(), "1", "2", "3");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   132
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   133
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   134
        if (!tr.contains("[1, 2, 3]"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   135
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   136
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   137
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   138
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   139
    // java @simpleJava.at  (contains Simple.java 1 2 3)
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   140
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   141
    void testSimpleJavaAtFile() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   142
        starting("testSimpleJavaAtFile");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   143
        Path file = getSimpleFile("Simple.java", false);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   144
        Path atFile = Paths.get("simpleJava.at");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   145
        createFile(atFile, List.of(file + " 1 2 3"));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   146
        TestResult tr = doExec(javaCmd, "@" + atFile);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   147
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   148
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   149
        if (!tr.contains("[1, 2, 3]"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   150
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   151
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   152
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   153
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   154
    // java @simple.at  (contains --source N simple 1 2 3)
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   155
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   156
    void testSimpleAtFile() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   157
        starting("testSimpleAtFile");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   158
        Path file = getSimpleFile("simple", false);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   159
        Path atFile = Paths.get("simple.at");
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   160
        createFile(atFile, List.of("--source " + thisVersion + " " + file + " 1 2 3"));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   161
        TestResult tr = doExec(javaCmd, "@" + atFile);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   162
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   163
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   164
        if (!tr.contains("[1, 2, 3]"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   165
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   166
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   167
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   168
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   169
    // java -cp classes Main.java 1 2 3
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   170
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   171
    void testClasspath() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   172
        starting("testClasspath");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   173
        Path base = Files.createDirectories(Paths.get("testClasspath"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   174
        Path otherJava = base.resolve("Other.java");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   175
        createFile(otherJava, List.of(
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   176
            "public class Other {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   177
            "  public static String join(String[] args) {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   178
            "    return String.join(\"-\", args);",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   179
            "  }",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   180
            "}"
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   181
        ));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   182
        Path classes = Files.createDirectories(base.resolve("classes"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   183
        Path mainJava = base.resolve("Main.java");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   184
        createFile(mainJava, List.of(
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   185
            "class Main {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   186
            "  public static void main(String[] args) {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   187
            "    System.out.println(Other.join(args));",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   188
            "  }}"
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   189
        ));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   190
        compile("-d", classes.toString(), otherJava.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   191
        TestResult tr = doExec(javaCmd, "-cp", classes.toString(),
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   192
                mainJava.toString(), "1", "2", "3");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   193
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   194
            error(tr, "Bad exit code: " + tr.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   195
        if (!tr.contains("1-2-3"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   196
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   197
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   198
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   199
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   200
    // java --add-exports=... Export.java --help
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   201
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   202
    void testAddExports() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   203
        starting("testAddExports");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   204
        Path exportJava = Paths.get("Export.java");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   205
        createFile(exportJava, List.of(
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   206
            "public class Export {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   207
            "  public static void main(String[] args) {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   208
            "    new com.sun.tools.javac.main.Main(\"demo\").compile(args);",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   209
            "  }",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   210
            "}"
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   211
        ));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   212
        // verify access fails without --add-exports
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   213
        TestResult tr1 = doExec(javaCmd, exportJava.toString(), "--help");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   214
        if (tr1.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   215
            error(tr1, "Compilation succeeded unexpectedly");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   216
        show(tr1);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   217
        // verify access succeeds with --add-exports
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   218
        TestResult tr2 = doExec(javaCmd,
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   219
            "--add-exports", "jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   220
            exportJava.toString(), "--help");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   221
        if (!tr2.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   222
            error(tr2, "Bad exit code: " + tr2.exitValue);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   223
        if (!(tr2.contains("demo") && tr2.contains("Usage")))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   224
            error(tr2, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   225
        show(tr2);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   226
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   227
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   228
    // java -cp ... HelloWorld.java  (for a class "java" in package "HelloWorld")
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   229
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   230
    void testClassNamedJava() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   231
        starting("testClassNamedJava");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   232
        Path base = Files.createDirectories(Paths.get("testClassNamedJava"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   233
        Path src = Files.createDirectories(base.resolve("src"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   234
        Path srcfile = src.resolve("java.java");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   235
        createFile(srcfile, List.of(
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   236
                "package HelloWorld;",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   237
                "class java {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   238
                "    public static void main(String... args) {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   239
                "        System.out.println(HelloWorld.java.class.getName());",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   240
                "    }",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   241
                "}"
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   242
        ));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   243
        Path classes = base.resolve("classes");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   244
        compile("-d", classes.toString(), srcfile.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   245
        TestResult tr =
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   246
            doExec(javaCmd, "-cp", classes.toString(), "HelloWorld.java");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   247
        if (!tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   248
            error(tr, "Command failed");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   249
        if (!tr.contains("HelloWorld.java"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   250
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   251
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   252
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   253
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   254
    // java --source
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   255
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   256
    void testSourceNoArg() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   257
        starting("testSourceNoArg");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   258
        TestResult tr = doExec(javaCmd, "--source");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   259
        if (tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   260
            error(tr, "Command succeeded unexpectedly");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   261
        if (!tr.contains("--source requires source version"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   262
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   263
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   264
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   265
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   266
    // java --source N -jar simple.jar
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   267
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   268
    void testSourceJarConflict() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   269
        starting("testSourceJarConflict");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   270
        Path base = Files.createDirectories(Paths.get("testSourceJarConflict"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   271
        Path file = getSimpleFile("Simple.java", false);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   272
        Path classes = Files.createDirectories(base.resolve("classes"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   273
        compile("-d", classes.toString(), file.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   274
        Path simpleJar = base.resolve("simple.jar");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   275
        createJar("cf", simpleJar.toString(), "-C", classes.toString(), ".");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   276
        TestResult tr =
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   277
            doExec(javaCmd, "--source", thisVersion, "-jar", simpleJar.toString());
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   278
        if (tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   279
            error(tr, "Command succeeded unexpectedly");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   280
        if (!tr.contains("Option -jar is not allowed with --source"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   281
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   282
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   283
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   284
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   285
    // java --source N -m jdk.compiler
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   286
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   287
    void testSourceModuleConflict() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   288
        starting("testSourceModuleConflict");
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   289
        TestResult tr = doExec(javaCmd, "--source", thisVersion, "-m", "jdk.compiler");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   290
        if (tr.isOK())
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   291
            error(tr, "Command succeeded unexpectedly");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   292
        if (!tr.contains("Option -m is not allowed with --source"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   293
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   294
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   295
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   296
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   297
    // #!.../java --source N -version
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   298
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   299
    void testTerminalOptionInShebang() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   300
        starting("testTerminalOptionInShebang");
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   301
        if (skipShebangTest || isAIX || isMacOSX || isSolaris) {
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   302
            // On MacOSX, we cannot distinguish between terminal options on the
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   303
            // shebang line and those on the command line.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   304
            // On Solaris, all options after the first on the shebang line are
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   305
            // ignored. Similar on AIX.
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   306
            log.println("SKIPPED");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   307
            return;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   308
        }
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   309
        Path base = Files.createDirectories(
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   310
            Paths.get("testTerminalOptionInShebang"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   311
        Path bad = base.resolve("bad");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   312
        createFile(bad, List.of(
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   313
            "#!" + shebangJavaCmd + " --source " + thisVersion + " -version"));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   314
        setExecutable(bad);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   315
        TestResult tr = doExec(bad.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   316
        if (!tr.contains("Option -version is not allowed in this context"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   317
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   318
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   319
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   320
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   321
    // #!.../java --source N @bad.at  (contains -version)
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   322
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   323
    void testTerminalOptionInShebangAtFile() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   324
        starting("testTerminalOptionInShebangAtFile");
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   325
        if (skipShebangTest || isAIX || isMacOSX || isSolaris) {
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   326
            // On MacOSX, we cannot distinguish between terminal options in a
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   327
            // shebang @-file and those on the command line.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   328
            // On Solaris, all options after the first on the shebang line are
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   329
            // ignored. Similar on AIX.
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   330
            log.println("SKIPPED");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   331
            return;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   332
        }
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   333
        // Use a short directory name, to avoid line length limitations
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   334
        Path base = Files.createDirectories(Paths.get("testBadAtFile"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   335
        Path bad_at = base.resolve("bad.at");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   336
        createFile(bad_at, List.of("-version"));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   337
        Path bad = base.resolve("bad");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   338
        createFile(bad, List.of(
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   339
            "#!" + shebangJavaCmd + " --source " + thisVersion + " @" + bad_at));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   340
        setExecutable(bad);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   341
        TestResult tr = doExec(bad.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   342
        if (!tr.contains("Option -version in @testBadAtFile/bad.at is "
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   343
                + "not allowed in this context"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   344
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   345
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   346
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   347
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   348
    // #!.../java --source N HelloWorld
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   349
    @Test
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   350
    void testMainClassInShebang() throws IOException {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   351
        starting("testMainClassInShebang");
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   352
        if (skipShebangTest || isAIX || isMacOSX || isSolaris) {
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   353
            // On MacOSX, we cannot distinguish between a main class on the
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   354
            // shebang line and one on the command line.
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   355
            // On Solaris, all options after the first on the shebang line are
51213
24c4780f69a5 8207766: [testbug] Adapt tests for Aix.
goetz
parents: 50850
diff changeset
   356
            // ignored. Similar on AIX.
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   357
            log.println("SKIPPED");
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   358
            return;
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   359
        }
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   360
        Path base = Files.createDirectories(Paths.get("testMainClassInShebang"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   361
        Path bad = base.resolve("bad");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   362
        createFile(bad, List.of(
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   363
            "#!" + shebangJavaCmd + " --source " + thisVersion + " HelloWorld"));
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   364
        setExecutable(bad);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   365
        TestResult tr = doExec(bad.toString());
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   366
        if (!tr.contains("Cannot specify main class in this context"))
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   367
            error(tr, "Expected output not found");
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   368
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   369
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   370
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   371
    //--------------------------------------------------------------------------
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   372
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   373
    private void starting(String label) {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   374
        System.out.println();
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   375
        System.out.println("*** Starting: " + label + " (stdout)");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   376
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   377
        System.err.println();
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   378
        System.err.println("*** Starting: " + label + " (stderr)");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   379
    }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   380
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   381
    private void show(TestResult tr) {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   382
        log.println("*** Test Output:");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   383
        for (String line: tr.testOutput) {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   384
            log.println(line);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   385
        }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   386
        log.println("*** End Of Test Output:");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   387
    }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   388
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   389
    private Map<String,String> getLauncherDebugEnv() {
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   390
        return Map.of("_JAVA_LAUNCHER_DEBUG", "1");
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   391
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   392
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   393
    private Path getSimpleFile(String name, boolean shebang) throws IOException {
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   394
        Path file = Paths.get(name);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   395
        if (!Files.exists(file)) {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   396
            createFile(file, List.of(
50850
208eff1d03e0 8205438: Re-enable shebang tests in test/jdk/tools/launchers/SourceMode.java
jjg
parents: 50498
diff changeset
   397
                (shebang ? "#!" + shebangJavaCmd + " --source=" + thisVersion: ""),
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   398
                "public class Simple {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   399
                "  public static void main(String[] args) {",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   400
                "    System.out.println(java.util.Arrays.toString(args));",
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   401
                "  }}"));
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   402
        }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   403
        return file;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   404
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   405
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   406
    private void createFile(Path file, List<String> lines) throws IOException {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   407
        lines.stream()
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   408
            .filter(line -> line.length() > 128)
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   409
            .forEach(line -> {
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   410
                    log.println("*** Warning: long line ("
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   411
                                        + line.length()
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   412
                                        + " chars) in file " + file);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   413
                    log.println("*** " + line);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   414
                });
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   415
        log.println("*** File: " + file);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   416
        lines.stream().forEach(log::println);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   417
        log.println("*** End Of File");
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   418
        createFile(file.toFile(), lines);
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   419
    }
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   420
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   421
    private Path setExecutable(Path file) throws IOException {
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   422
        Set<PosixFilePermission> perms = Files.getPosixFilePermissions(file);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   423
        perms.add(PosixFilePermission.OWNER_EXECUTE);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   424
        Files.setPosixFilePermissions(file, perms);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   425
        return file;
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   426
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   427
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   428
    private void error(TestResult tr, String message) {
50497
ee8524126794 8204588: Test failures after "Launch Single-File Source-Code Programs"
jjg
parents: 50453
diff changeset
   429
        show(tr);
50453
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   430
        throw new RuntimeException(message);
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   431
    }
f91927a2c8d3 8201274: Launch Single-File Source-Code Programs
jjg
parents:
diff changeset
   432
}