test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java
author herrick
Fri, 04 Oct 2019 14:56:02 -0400
branchJDK-8200758-branch
changeset 58464 d82489644b15
parent 58416 f09bf58c1f17
child 58648 3bf53ffa9ae7
permissions -rw-r--r--
8215895: Verify and create tests for Mac installer specific signing options Submitted-by: almatvee Reviewed-by: herrick, asemenyuk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     1
/*
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     4
 *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     8
 *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    13
 * accompanied this code).
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    14
 *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    18
 *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    21
 * questions.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    22
 */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    23
package jdk.jpackage.test;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    24
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    25
import java.io.File;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    26
import java.io.FileOutputStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    27
import java.io.IOException;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    28
import java.io.PrintStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    29
import java.lang.reflect.InvocationTargetException;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    30
import java.nio.file.FileSystems;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    31
import java.nio.file.Files;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    32
import java.nio.file.Path;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    33
import java.nio.file.StandardWatchEventKinds;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    34
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    35
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    36
import java.nio.file.WatchEvent;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    37
import java.nio.file.WatchKey;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    38
import java.nio.file.WatchService;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    39
import java.util.*;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    40
import java.util.concurrent.TimeUnit;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    41
import java.util.concurrent.atomic.AtomicInteger;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    42
import java.util.stream.Collectors;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    43
import java.util.stream.Stream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    44
import jdk.jpackage.test.Functional.ExceptionBox;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    45
import jdk.jpackage.test.Functional.ThrowingConsumer;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    46
import jdk.jpackage.test.Functional.ThrowingFunction;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    47
import jdk.jpackage.test.Functional.ThrowingRunnable;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    48
import jdk.jpackage.test.Functional.ThrowingSupplier;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    49
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    50
final public class TKit {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    51
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    52
    public static final Path TEST_SRC_ROOT = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    53
        Path root = Path.of(System.getProperty("test.src"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    54
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    55
        for (int i = 0; i != 10; ++i) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    56
            if (root.resolve("apps").toFile().isDirectory()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    57
                return root.toAbsolutePath();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    58
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    59
            root = root.resolve("..");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    60
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    61
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    62
        throw new RuntimeException("Failed to locate apps directory");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    63
    }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    64
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    65
    public static void run(String args[], ThrowingRunnable testBody) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    66
        if (currentTest != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    67
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    68
                    "Unexpeced nested or concurrent Test.run() call");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    69
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    70
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    71
        TestInstance test = new TestInstance(testBody);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    72
        ThrowingRunnable.toRunnable(() -> runTests(List.of(test))).run();
58464
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
    73
        test.rethrowIfSkipped();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    74
        if (!test.passed()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    75
            throw new RuntimeException();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    76
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    77
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    78
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    79
    static void runTests(List<TestInstance> tests) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    80
        if (currentTest != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    81
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    82
                    "Unexpeced nested or concurrent Test.run() call");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    83
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    84
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    85
        try (PrintStream logStream = openLogStream()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    86
            extraLogStream = logStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    87
            tests.stream().forEach(test -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    88
                currentTest = test;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    89
                try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    90
                    ignoreExceptions(test).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    91
                } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    92
                    currentTest = null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    93
                    if (extraLogStream != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    94
                        extraLogStream.flush();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    95
                    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    96
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    97
            });
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    98
        } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    99
            extraLogStream = null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   100
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   101
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   102
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   103
    static Runnable ignoreExceptions(ThrowingRunnable action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   104
        return () -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   105
            try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   106
                try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   107
                    action.run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   108
                } catch (Throwable ex) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   109
                    unbox(ex);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   110
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   111
            } catch (Throwable throwable) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   112
                if (extraLogStream != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   113
                    throwable.printStackTrace(extraLogStream);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   114
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   115
                throwable.printStackTrace();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   116
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   117
        };
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   118
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   119
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   120
    static void unbox(Throwable throwable) throws Throwable {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   121
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   122
            throw throwable;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   123
        } catch (ExceptionBox | InvocationTargetException ex) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   124
            unbox(ex.getCause());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   125
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   126
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   127
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   128
    public static Path workDir() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   129
        Path result = Path.of(".");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   130
        String testFunctionName = currentTest.functionName();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   131
        if (testFunctionName != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   132
            result = result.resolve(testFunctionName);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   133
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   134
        return result;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   135
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   136
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   137
    static Path defaultInputDir() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   138
        return workDir().resolve("input");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   139
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   140
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   141
    static Path defaultOutputDir() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   142
        return workDir().resolve("output");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   143
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   144
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   145
    static String getCurrentDefaultAppName() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   146
        // Construct app name from swapping and joining test base name
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   147
        // and test function name.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   148
        // Say the test name is `FooTest.testBasic`. Then app name would be `BasicFooTest`.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   149
        String appNamePrefix = currentTest.functionName();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   150
        if (appNamePrefix != null && appNamePrefix.startsWith("test")) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   151
            appNamePrefix = appNamePrefix.substring("test".length());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   152
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   153
        return Stream.of(appNamePrefix, currentTest.baseName()).filter(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   154
                v -> v != null && !v.isEmpty()).collect(Collectors.joining());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   155
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   156
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   157
    public static boolean isWindows() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   158
        return (OS.contains("win"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   159
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   160
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   161
    public static boolean isOSX() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   162
        return (OS.contains("mac"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   163
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   164
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   165
    public static boolean isLinux() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   166
        return ((OS.contains("nix") || OS.contains("nux")));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   167
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   168
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   169
    static void log(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   170
        System.out.println(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   171
        if (extraLogStream != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   172
            extraLogStream.println(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   173
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   174
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   175
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   176
    public static void createTextFile(Path propsFilename, Collection<String> lines) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   177
        trace(String.format("Create [%s] text file...",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   178
                propsFilename.toAbsolutePath().normalize()));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   179
        ThrowingRunnable.toRunnable(() -> Files.write(propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   180
                lines.stream().peek(TKit::trace).collect(Collectors.toList()))).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   181
        trace("Done");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   182
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   183
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   184
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   185
            Collection<Map.Entry<String, String>> props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   186
        trace(String.format("Create [%s] properties file...",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   187
                propsFilename.toAbsolutePath().normalize()));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   188
        ThrowingRunnable.toRunnable(() -> Files.write(propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   189
                props.stream().map(e -> String.join("=", e.getKey(),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   190
                e.getValue())).peek(TKit::trace).collect(Collectors.toList()))).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   191
        trace("Done");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   192
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   193
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   194
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   195
            Map.Entry<String, String>... props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   196
        createPropertiesFile(propsFilename, List.of(props));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   197
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   198
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   199
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   200
            Map<String, String> props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   201
        createPropertiesFile(propsFilename, props.entrySet());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   202
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   203
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   204
    public static void trace(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   205
        if (TRACE) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   206
            log("TRACE: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   207
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   208
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   209
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   210
    private static void traceAssert(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   211
        if (TRACE_ASSERTS) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   212
            log("TRACE: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   213
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   214
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   215
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   216
    public static void error(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   217
        log("ERROR: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   218
        throw new AssertionError(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   219
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   220
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   221
    private final static String TEMP_FILE_PREFIX = null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   222
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   223
    private static Path createUniqueFileName(String defaultName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   224
        final String[] nameComponents;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   225
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   226
        int separatorIdx = defaultName.lastIndexOf('.');
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   227
        final String baseName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   228
        if (separatorIdx == -1) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   229
            baseName = defaultName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   230
            nameComponents = new String[]{baseName};
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   231
        } else {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   232
            baseName = defaultName.substring(0, separatorIdx);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   233
            nameComponents = new String[]{baseName, defaultName.substring(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   234
                separatorIdx + 1)};
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   235
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   236
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   237
        final Path basedir = workDir();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   238
        int i = 0;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   239
        for (; i < 100; ++i) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   240
            Path path = basedir.resolve(String.join(".", nameComponents));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   241
            if (!path.toFile().exists()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   242
                return path;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   243
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   244
            nameComponents[0] = String.format("%s.%d", baseName, i);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   245
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   246
        throw new IllegalStateException(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   247
                "Failed to create unique file name from [%s] basename after %d attempts",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   248
                baseName, i));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   249
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   250
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   251
    public static Path createTempDirectory(String role) throws IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   252
        if (role == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   253
            return Files.createTempDirectory(workDir(), TEMP_FILE_PREFIX);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   254
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   255
        return Files.createDirectory(createUniqueFileName(role));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   256
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   257
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   258
    public static Path createTempFile(String role, String suffix) throws
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   259
            IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   260
        if (role == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   261
            return Files.createTempFile(workDir(), TEMP_FILE_PREFIX, suffix);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   262
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   263
        return Files.createFile(createUniqueFileName(role));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   264
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   265
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   266
    public static void withTempFile(String role, String suffix,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   267
            ThrowingConsumer<Path> action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   268
        final Path tempFile = ThrowingSupplier.toSupplier(() -> createTempFile(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   269
                role, suffix)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   270
        boolean keepIt = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   271
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   272
            ThrowingConsumer.toConsumer(action).accept(tempFile);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   273
            keepIt = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   274
        } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   275
            if (tempFile != null && !keepIt) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   276
                ThrowingRunnable.toRunnable(() -> Files.deleteIfExists(tempFile)).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   277
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   278
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   279
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   280
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   281
    public static void withTempDirectory(String role,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   282
            ThrowingConsumer<Path> action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   283
        final Path tempDir = ThrowingSupplier.toSupplier(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   284
                () -> createTempDirectory(role)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   285
        boolean keepIt = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   286
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   287
            ThrowingConsumer.toConsumer(action).accept(tempDir);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   288
            keepIt = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   289
        } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   290
            if (tempDir != null && tempDir.toFile().isDirectory() && !keepIt) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   291
                deleteDirectoryRecursive(tempDir, "");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   292
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   293
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   294
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   295
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   296
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   297
     * Deletes contents of the given directory recursively. Shortcut for
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   298
     * <code>deleteDirectoryContentsRecursive(path, null)</code>
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   299
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   300
     * @param path path to directory to clean
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   301
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   302
    public static void deleteDirectoryContentsRecursive(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   303
        deleteDirectoryContentsRecursive(path, null);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   304
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   305
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   306
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   307
     * Deletes contents of the given directory recursively. If <code>path<code> is not a
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   308
     * directory, request is silently ignored.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   309
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   310
     * @param path path to directory to clean
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   311
     * @param msg log message. If null, the default log message is used. If
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   312
     * empty string, no log message will be saved.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   313
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   314
    public static void deleteDirectoryContentsRecursive(Path path, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   315
        if (path.toFile().isDirectory()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   316
            if (msg == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   317
                msg = String.format("Cleaning [%s] directory recursively", path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   318
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   319
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   320
            if (!msg.isEmpty()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   321
                TKit.trace(msg);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   322
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   323
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   324
            // Walk all children of `path` in sorted order to hit files first
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   325
            // and directories last and delete each item.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   326
            ThrowingRunnable.toRunnable(() -> Stream.of(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   327
                    path.toFile().listFiles()).map(File::toPath).map(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   328
                    ThrowingFunction.toFunction(Files::walk)).flatMap(x -> x).sorted(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   329
                    Comparator.reverseOrder()).map(Path::toFile).forEach(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   330
                    File::delete)).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   331
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   332
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   333
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   334
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   335
     * Deletes the given directory recursively. Shortcut for
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   336
     * <code>deleteDirectoryRecursive(path, null)</code>
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   337
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   338
     * @param path path to directory to delete
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   339
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   340
    public static void deleteDirectoryRecursive(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   341
        deleteDirectoryRecursive(path, null);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   342
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   343
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   344
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   345
     * Deletes the given directory recursively. If <code>path<code> is not a
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   346
     * directory, request is silently ignored.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   347
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   348
     * @param path path to directory to delete
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   349
     * @param msg log message. If null, the default log message is used. If
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   350
     * empty string, no log message will be saved.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   351
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   352
    public static void deleteDirectoryRecursive(Path path, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   353
        if (path.toFile().isDirectory()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   354
            if (msg == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   355
                msg = String.format("Deleting [%s] directory recursively", path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   356
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   357
            deleteDirectoryContentsRecursive(path, msg);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   358
            ThrowingConsumer.toConsumer(Files::delete).accept(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   359
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   360
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   361
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   362
    public static RuntimeException throwUnknownPlatformError() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   363
        if (isWindows() || isLinux() || isOSX()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   364
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   365
                    "Platform is known. throwUnknownPlatformError() called by mistake");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   366
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   367
        throw new IllegalStateException("Unknown platform");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   368
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   369
58464
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   370
    public static RuntimeException throwSkippedException(String reason) {
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   371
        trace("Skip the test: " + reason);
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   372
        RuntimeException ex = ThrowingSupplier.toSupplier(
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   373
                () -> (RuntimeException) Class.forName("jtreg.SkippedException").getConstructor(
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   374
                        String.class).newInstance(reason)).get();
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   375
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   376
        currentTest.notifySkipped(ex);
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   377
        throw ex;
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   378
    }
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   379
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   380
    static void waitForFileCreated(Path fileToWaitFor,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   381
            long timeoutSeconds) throws IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   382
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   383
        trace(String.format("Wait for file [%s] to be available", fileToWaitFor));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   384
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   385
        WatchService ws = FileSystems.getDefault().newWatchService();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   386
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   387
        Path watchDirectory = fileToWaitFor.toAbsolutePath().getParent();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   388
        watchDirectory.register(ws, ENTRY_CREATE, ENTRY_MODIFY);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   389
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   390
        long waitUntil = System.currentTimeMillis() + timeoutSeconds * 1000;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   391
        for (;;) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   392
            long timeout = waitUntil - System.currentTimeMillis();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   393
            assertTrue(timeout > 0, String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   394
                    "Check timeout value %d is positive", timeout));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   395
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   396
            WatchKey key = ThrowingSupplier.toSupplier(() -> ws.poll(timeout,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   397
                    TimeUnit.MILLISECONDS)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   398
            if (key == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   399
                if (fileToWaitFor.toFile().exists()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   400
                    trace(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   401
                            "File [%s] is available after poll timeout expired",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   402
                            fileToWaitFor));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   403
                    return;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   404
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   405
                assertUnexpected(String.format("Timeout expired", timeout));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   406
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   407
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   408
            for (WatchEvent<?> event : key.pollEvents()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   409
                if (event.kind() == StandardWatchEventKinds.OVERFLOW) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   410
                    continue;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   411
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   412
                Path contextPath = (Path) event.context();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   413
                if (Files.isSameFile(watchDirectory.resolve(contextPath),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   414
                        fileToWaitFor)) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   415
                    trace(String.format("File [%s] is available", fileToWaitFor));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   416
                    return;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   417
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   418
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   419
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   420
            if (!key.reset()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   421
                assertUnexpected("Watch key invalidated");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   422
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   423
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   424
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   425
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   426
    private static String concatMessages(String msg, String msg2) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   427
        if (msg2 != null && !msg2.isBlank()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   428
            return msg + ": " + msg2;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   429
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   430
        return msg;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   431
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   432
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   433
    public static void assertEquals(long expected, long actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   434
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   435
        if (expected != actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   436
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   437
                    "Expected [%d]. Actual [%d]", expected, actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   438
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   439
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   440
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   441
        traceAssert(String.format("assertEquals(%d): %s", expected, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   442
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   443
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   444
    public static void assertNotEquals(long expected, long actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   445
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   446
        if (expected == actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   447
            error(concatMessages(String.format("Unexpected [%d] value", actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   448
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   449
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   450
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   451
        traceAssert(String.format("assertNotEquals(%d, %d): %s", expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   452
                actual, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   453
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   454
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   455
    public static void assertEquals(String expected, String actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   456
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   457
        if ((actual != null && !actual.equals(expected))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   458
                || (expected != null && !expected.equals(actual))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   459
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   460
                    "Expected [%s]. Actual [%s]", expected, actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   461
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   462
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   463
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   464
        traceAssert(String.format("assertEquals(%s): %s", expected, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   465
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   466
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   467
    public static void assertNotEquals(String expected, String actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   468
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   469
        if ((actual != null && !actual.equals(expected))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   470
                || (expected != null && !expected.equals(actual))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   471
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   472
            traceAssert(String.format("assertNotEquals(%s, %s): %s", expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   473
                actual, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   474
            return;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   475
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   476
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   477
        error(concatMessages(String.format("Unexpected [%s] value", actual), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   478
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   479
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   480
    public static void assertNull(Object value, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   481
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   482
        if (value != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   483
            error(concatMessages(String.format("Unexpected not null value [%s]",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   484
                    value), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   485
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   486
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   487
        traceAssert(String.format("assertNull(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   488
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   489
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   490
    public static void assertNotNull(Object value, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   491
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   492
        if (value == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   493
            error(concatMessages("Unexpected null value", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   494
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   495
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   496
        traceAssert(String.format("assertNotNull(%s): %s", value, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   497
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   498
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   499
    public static void assertTrue(boolean actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   500
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   501
        if (!actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   502
            error(concatMessages("Unexpected FALSE", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   503
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   504
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   505
        traceAssert(String.format("assertTrue(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   506
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   507
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   508
    public static void assertFalse(boolean actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   509
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   510
        if (actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   511
            error(concatMessages("Unexpected TRUE", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   512
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   513
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   514
        traceAssert(String.format("assertFalse(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   515
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   516
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   517
    public static void assertPathExists(Path path, boolean exists) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   518
        if (exists) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   519
            assertTrue(path.toFile().exists(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   520
                    "Check [%s] path exists", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   521
        } else {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   522
            assertFalse(path.toFile().exists(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   523
                    "Check [%s] path doesn't exist", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   524
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   525
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   526
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   527
     public static void assertDirectoryExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   528
        assertPathExists(path, true);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   529
        assertTrue(path.toFile().isDirectory(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   530
                "Check [%s] is a directory", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   531
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   532
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   533
    public static void assertFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   534
        assertPathExists(path, true);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   535
        assertTrue(path.toFile().isFile(), String.format("Check [%s] is a file",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   536
                path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   537
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   538
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   539
    public static void assertExecutableFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   540
        assertFileExists(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   541
        assertTrue(path.toFile().canExecute(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   542
                "Check [%s] file is executable", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   543
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   544
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   545
    public static void assertReadableFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   546
        assertFileExists(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   547
        assertTrue(path.toFile().canRead(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   548
                "Check [%s] file is readable", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   549
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   550
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   551
    public static void assertUnexpected(String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   552
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   553
        error(concatMessages("Unexpected", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   554
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   555
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   556
    public static void assertStringListEquals(List<String> expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   557
            List<String> actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   558
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   559
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   560
        traceAssert(String.format("assertStringListEquals(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   561
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   562
        String idxFieldFormat = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   563
            int listSize = expected.size();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   564
            int width = 0;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   565
            while (listSize != 0) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   566
                listSize = listSize / 10;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   567
                width++;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   568
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   569
            return "%" + width + "d";
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   570
        }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   571
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   572
        AtomicInteger counter = new AtomicInteger(0);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   573
        Iterator<String> actualIt = actual.iterator();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   574
        expected.stream().sequential().filter(expectedStr -> actualIt.hasNext()).forEach(expectedStr -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   575
            int idx = counter.incrementAndGet();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   576
            String actualStr = actualIt.next();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   577
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   578
            if ((actualStr != null && !actualStr.equals(expectedStr))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   579
                    || (expectedStr != null && !expectedStr.equals(actualStr))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   580
                error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   581
                        "(" + idxFieldFormat + ") Expected [%s]. Actual [%s]",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   582
                        idx, expectedStr, actualStr), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   583
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   584
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   585
            traceAssert(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   586
                    "assertStringListEquals(" + idxFieldFormat + ", %s)", idx,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   587
                    expectedStr));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   588
        });
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   589
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   590
        if (expected.size() < actual.size()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   591
            // Actual string list is longer than expected
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   592
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   593
                    "Actual list is longer than expected by %d elements",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   594
                    actual.size() - expected.size()), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   595
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   596
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   597
        if (actual.size() < expected.size()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   598
            // Actual string list is shorter than expected
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   599
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   600
                    "Actual list is longer than expected by %d elements",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   601
                    expected.size() - actual.size()), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   602
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   603
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   604
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   605
    private static PrintStream openLogStream() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   606
        if (LOG_FILE == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   607
            return null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   608
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   609
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   610
        return ThrowingSupplier.toSupplier(() -> new PrintStream(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   611
                new FileOutputStream(LOG_FILE.toFile(), true))).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   612
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   613
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   614
    private static TestInstance currentTest;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   615
    private static PrintStream extraLogStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   616
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   617
    private static final boolean TRACE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   618
    private static final boolean TRACE_ASSERTS;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   619
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   620
    static final boolean VERBOSE_JPACKAGE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   621
    static final boolean VERBOSE_TEST_SETUP;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   622
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   623
    static String getConfigProperty(String propertyName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   624
        return System.getProperty(getConfigPropertyName(propertyName));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   625
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   626
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   627
    static String getConfigPropertyName(String propertyName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   628
        return "jpackage.test." + propertyName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   629
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   630
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   631
    static final Path LOG_FILE = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   632
        String val = getConfigProperty("logfile");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   633
        if (val == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   634
            return null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   635
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   636
        return Path.of(val);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   637
    }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   638
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   639
    static {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   640
        String val = getConfigProperty("suppress-logging");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   641
        if (val == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   642
            TRACE = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   643
            TRACE_ASSERTS = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   644
            VERBOSE_JPACKAGE = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   645
            VERBOSE_TEST_SETUP = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   646
        } else if ("all".equals(val.toLowerCase())) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   647
            TRACE = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   648
            TRACE_ASSERTS = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   649
            VERBOSE_JPACKAGE = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   650
            VERBOSE_TEST_SETUP = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   651
        } else {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   652
            Set<String> logOptions = Set.of(val.toLowerCase().split(","));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   653
            TRACE = !(logOptions.contains("trace") || logOptions.contains("t"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   654
            TRACE_ASSERTS = !(logOptions.contains("assert") || logOptions.contains(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   655
                    "a"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   656
            VERBOSE_JPACKAGE = !(logOptions.contains("jpackage") || logOptions.contains(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   657
                    "jp"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   658
            VERBOSE_TEST_SETUP = !logOptions.contains("init");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   659
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   660
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   661
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   662
    private static final String OS = System.getProperty("os.name").toLowerCase();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   663
}