test/jdk/tools/jpackage/helpers/jdk/jpackage/test/TKit.java
author herrick
Wed, 16 Oct 2019 10:32:08 -0400
branchJDK-8200758-branch
changeset 58648 3bf53ffa9ae7
parent 58464 d82489644b15
child 58696 61c44899b4eb
permissions -rw-r--r--
8232279 : Improve test helpers #2 Submitted-by: asemenyuk Reviewed-by: aherrick, almatvee
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.FileOutputStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    26
import java.io.IOException;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    27
import java.io.PrintStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    28
import java.lang.reflect.InvocationTargetException;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    29
import java.nio.file.*;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    30
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    31
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    32
import java.util.*;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    33
import java.util.concurrent.TimeUnit;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    34
import java.util.concurrent.atomic.AtomicInteger;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    35
import java.util.function.BiPredicate;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    36
import java.util.function.Consumer;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    37
import java.util.function.Predicate;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    38
import java.util.function.Supplier;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    39
import java.util.stream.Collectors;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    40
import java.util.stream.Stream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    41
import jdk.jpackage.test.Functional.ExceptionBox;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    42
import jdk.jpackage.test.Functional.ThrowingConsumer;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    43
import jdk.jpackage.test.Functional.ThrowingRunnable;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    44
import jdk.jpackage.test.Functional.ThrowingSupplier;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    45
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    46
final public class TKit {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    47
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    48
    public static final Path TEST_SRC_ROOT = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    49
        Path root = Path.of(System.getProperty("test.src"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    50
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    51
        for (int i = 0; i != 10; ++i) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    52
            if (root.resolve("apps").toFile().isDirectory()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    53
                return root.toAbsolutePath();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    54
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    55
            root = root.resolve("..");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    56
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    57
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    58
        throw new RuntimeException("Failed to locate apps directory");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    59
    }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    60
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    61
    public static void run(String args[], ThrowingRunnable testBody) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    62
        if (currentTest != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    63
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    64
                    "Unexpeced nested or concurrent Test.run() call");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    65
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    66
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    67
        TestInstance test = new TestInstance(testBody);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    68
        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
    69
        test.rethrowIfSkipped();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    70
        if (!test.passed()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    71
            throw new RuntimeException();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    72
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    73
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    74
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    75
    static void withExtraLogStream(ThrowingRunnable action) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    76
        if (extraLogStream != null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    77
            ThrowingRunnable.toRunnable(action).run();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    78
        } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    79
            try (PrintStream logStream = openLogStream()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    80
                extraLogStream = logStream;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    81
                ThrowingRunnable.toRunnable(action).run();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    82
            } finally {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    83
                extraLogStream = null;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    84
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    85
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    86
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    87
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    88
    static void runTests(List<TestInstance> tests) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    89
        if (currentTest != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    90
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    91
                    "Unexpeced nested or concurrent Test.run() call");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    92
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    93
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
    94
        withExtraLogStream(() -> {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    95
            tests.stream().forEach(test -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    96
                currentTest = test;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    97
                try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    98
                    ignoreExceptions(test).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
    99
                } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   100
                    currentTest = null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   101
                    if (extraLogStream != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   102
                        extraLogStream.flush();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   103
                    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   104
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   105
            });
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   106
        });
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   107
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   108
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   109
    static Runnable ignoreExceptions(ThrowingRunnable action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   110
        return () -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   111
            try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   112
                try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   113
                    action.run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   114
                } catch (Throwable ex) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   115
                    unbox(ex);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   116
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   117
            } catch (Throwable throwable) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   118
                printStackTrace(throwable);
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   119
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   120
        };
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   121
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   122
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   123
    static void unbox(Throwable throwable) throws Throwable {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   124
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   125
            throw throwable;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   126
        } catch (ExceptionBox | InvocationTargetException ex) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   127
            unbox(ex.getCause());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   128
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   129
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   130
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   131
    public static Path workDir() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   132
        return currentTest.workDir();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   133
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   134
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   135
    static Path defaultInputDir() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   136
        return workDir().resolve("input");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   137
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   138
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   139
    static Path defaultOutputDir() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   140
        return workDir().resolve("output");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   141
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   142
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   143
    static String getCurrentDefaultAppName() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   144
        // Construct app name from swapping and joining test base name
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   145
        // and test function name.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   146
        // Say the test name is `FooTest.testBasic`. Then app name would be `BasicFooTest`.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   147
        String appNamePrefix = currentTest.functionName();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   148
        if (appNamePrefix != null && appNamePrefix.startsWith("test")) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   149
            appNamePrefix = appNamePrefix.substring("test".length());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   150
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   151
        return Stream.of(appNamePrefix, currentTest.baseName()).filter(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   152
                v -> v != null && !v.isEmpty()).collect(Collectors.joining());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   153
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   154
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   155
    public static boolean isWindows() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   156
        return (OS.contains("win"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   157
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   158
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   159
    public static boolean isOSX() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   160
        return (OS.contains("mac"));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   161
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   162
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   163
    public static boolean isLinux() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   164
        return ((OS.contains("nix") || OS.contains("nux")));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   165
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   166
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   167
    static void log(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   168
        System.out.println(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   169
        if (extraLogStream != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   170
            extraLogStream.println(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   171
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   172
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   173
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   174
    public static void createTextFile(Path propsFilename, Collection<String> lines) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   175
        createTextFile(propsFilename, lines.stream());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   176
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   177
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   178
    public static void createTextFile(Path propsFilename, Stream<String> lines) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   179
        trace(String.format("Create [%s] text file...",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   180
                propsFilename.toAbsolutePath().normalize()));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   181
        ThrowingRunnable.toRunnable(() -> Files.write(propsFilename,
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   182
                lines.peek(TKit::trace).collect(Collectors.toList()))).run();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   183
        trace("Done");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   184
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   185
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   186
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   187
            Collection<Map.Entry<String, String>> props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   188
        trace(String.format("Create [%s] properties file...",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   189
                propsFilename.toAbsolutePath().normalize()));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   190
        ThrowingRunnable.toRunnable(() -> Files.write(propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   191
                props.stream().map(e -> String.join("=", e.getKey(),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   192
                e.getValue())).peek(TKit::trace).collect(Collectors.toList()))).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   193
        trace("Done");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   194
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   195
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   196
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   197
            Map.Entry<String, String>... props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   198
        createPropertiesFile(propsFilename, List.of(props));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   199
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   200
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   201
    public static void createPropertiesFile(Path propsFilename,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   202
            Map<String, String> props) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   203
        createPropertiesFile(propsFilename, props.entrySet());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   204
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   205
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   206
    public static void trace(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   207
        if (TRACE) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   208
            log("TRACE: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   209
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   210
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   211
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   212
    private static void traceAssert(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   213
        if (TRACE_ASSERTS) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   214
            log("TRACE: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   215
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   216
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   217
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   218
    public static void error(String v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   219
        log("ERROR: " + v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   220
        throw new AssertionError(v);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   221
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   222
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   223
    private final static String TEMP_FILE_PREFIX = null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   224
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   225
    private static Path createUniqueFileName(String defaultName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   226
        final String[] nameComponents;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   227
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   228
        int separatorIdx = defaultName.lastIndexOf('.');
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   229
        final String baseName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   230
        if (separatorIdx == -1) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   231
            baseName = defaultName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   232
            nameComponents = new String[]{baseName};
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   233
        } else {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   234
            baseName = defaultName.substring(0, separatorIdx);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   235
            nameComponents = new String[]{baseName, defaultName.substring(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   236
                separatorIdx + 1)};
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   237
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   238
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   239
        final Path basedir = workDir();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   240
        int i = 0;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   241
        for (; i < 100; ++i) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   242
            Path path = basedir.resolve(String.join(".", nameComponents));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   243
            if (!path.toFile().exists()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   244
                return path;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   245
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   246
            nameComponents[0] = String.format("%s.%d", baseName, i);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   247
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   248
        throw new IllegalStateException(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   249
                "Failed to create unique file name from [%s] basename after %d attempts",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   250
                baseName, i));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   251
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   252
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   253
    public static Path createTempDirectory(String role) throws IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   254
        if (role == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   255
            return Files.createTempDirectory(workDir(), TEMP_FILE_PREFIX);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   256
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   257
        return Files.createDirectory(createUniqueFileName(role));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   258
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   259
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   260
    public static Path createTempFile(String role, String suffix) throws
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   261
            IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   262
        if (role == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   263
            return Files.createTempFile(workDir(), TEMP_FILE_PREFIX, suffix);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   264
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   265
        return Files.createFile(createUniqueFileName(role));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   266
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   267
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   268
    public static Path withTempFile(String role, String suffix,
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   269
            ThrowingConsumer<Path> action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   270
        final Path tempFile = ThrowingSupplier.toSupplier(() -> createTempFile(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   271
                role, suffix)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   272
        boolean keepIt = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   273
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   274
            ThrowingConsumer.toConsumer(action).accept(tempFile);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   275
            keepIt = false;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   276
            return tempFile;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   277
        } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   278
            if (tempFile != null && !keepIt) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   279
                ThrowingRunnable.toRunnable(() -> Files.deleteIfExists(tempFile)).run();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   280
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   281
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   282
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   283
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   284
    public static Path withTempDirectory(String role,
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   285
            ThrowingConsumer<Path> action) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   286
        final Path tempDir = ThrowingSupplier.toSupplier(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   287
                () -> createTempDirectory(role)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   288
        boolean keepIt = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   289
        try {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   290
            ThrowingConsumer.toConsumer(action).accept(tempDir);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   291
            keepIt = false;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   292
            return tempDir;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   293
        } finally {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   294
            if (tempDir != null && tempDir.toFile().isDirectory() && !keepIt) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   295
                deleteDirectoryRecursive(tempDir, "");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   296
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   297
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   298
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   299
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   300
    private static class DirectoryCleaner implements Consumer<Path> {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   301
        DirectoryCleaner traceMessage(String v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   302
            msg = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   303
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   304
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   305
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   306
        DirectoryCleaner contentsOnly(boolean v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   307
            contentsOnly = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   308
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   309
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   310
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   311
        @Override
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   312
        public void accept(Path root) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   313
            if (msg == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   314
                if (contentsOnly) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   315
                    msg = String.format("Cleaning [%s] directory recursively",
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   316
                            root);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   317
                } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   318
                    msg = String.format("Deleting [%s] directory recursively",
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   319
                            root);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   320
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   321
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   322
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   323
            if (!msg.isEmpty()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   324
                trace(msg);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   325
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   326
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   327
            List<Throwable> errors = new ArrayList<>();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   328
            try {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   329
                final List<Path> paths;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   330
                if (contentsOnly) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   331
                    try (var pathStream = Files.walk(root, 0)) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   332
                        paths = pathStream.collect(Collectors.toList());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   333
                    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   334
                } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   335
                    paths = List.of(root);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   336
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   337
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   338
                for (var path : paths) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   339
                    try (var pathStream = Files.walk(path)) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   340
                        pathStream
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   341
                        .sorted(Comparator.reverseOrder())
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   342
                        .sequential()
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   343
                        .forEachOrdered(file -> {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   344
                            try {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   345
                                if (isWindows()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   346
                                    Files.setAttribute(file, "dos:readonly", false);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   347
                                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   348
                                Files.delete(file);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   349
                            } catch (IOException ex) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   350
                                errors.add(ex);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   351
                            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   352
                        });
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   353
                    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   354
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   355
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   356
            } catch (IOException ex) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   357
                errors.add(ex);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   358
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   359
            errors.forEach(error -> trace(error.toString()));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   360
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   361
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   362
        private String msg;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   363
        private boolean contentsOnly;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   364
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   365
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   366
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   367
     * Deletes contents of the given directory recursively. Shortcut for
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   368
     * <code>deleteDirectoryContentsRecursive(path, null)</code>
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   369
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   370
     * @param path path to directory to clean
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   371
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   372
    public static void deleteDirectoryContentsRecursive(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   373
        deleteDirectoryContentsRecursive(path, null);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   374
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   375
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   376
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   377
     * Deletes contents of the given directory recursively. If <code>path<code> is not a
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   378
     * directory, request is silently ignored.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   379
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   380
     * @param path path to directory to clean
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   381
     * @param msg log message. If null, the default log message is used. If
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   382
     * empty string, no log message will be saved.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   383
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   384
    public static void deleteDirectoryContentsRecursive(Path path, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   385
        if (path.toFile().isDirectory()) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   386
            new DirectoryCleaner().contentsOnly(true).traceMessage(msg).accept(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   387
                    path);
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   388
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   389
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   390
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   391
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   392
     * Deletes the given directory recursively. Shortcut for
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   393
     * <code>deleteDirectoryRecursive(path, null)</code>
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   394
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   395
     * @param path path to directory to delete
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   396
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   397
    public static void deleteDirectoryRecursive(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   398
        deleteDirectoryRecursive(path, null);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   399
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   400
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   401
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   402
     * Deletes the given directory recursively. If <code>path<code> is not a
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   403
     * directory, request is silently ignored.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   404
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   405
     * @param path path to directory to delete
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   406
     * @param msg log message. If null, the default log message is used. If
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   407
     * empty string, no log message will be saved.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   408
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   409
    public static void deleteDirectoryRecursive(Path path, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   410
        if (path.toFile().isDirectory()) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   411
            new DirectoryCleaner().traceMessage(msg).accept(path);
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   412
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   413
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   414
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   415
    public static RuntimeException throwUnknownPlatformError() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   416
        if (isWindows() || isLinux() || isOSX()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   417
            throw new IllegalStateException(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   418
                    "Platform is known. throwUnknownPlatformError() called by mistake");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   419
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   420
        throw new IllegalStateException("Unknown platform");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   421
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   422
58464
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   423
    public static RuntimeException throwSkippedException(String reason) {
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   424
        trace("Skip the test: " + reason);
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   425
        RuntimeException ex = ThrowingSupplier.toSupplier(
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   426
                () -> (RuntimeException) Class.forName("jtreg.SkippedException").getConstructor(
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   427
                        String.class).newInstance(reason)).get();
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   428
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   429
        currentTest.notifySkipped(ex);
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   430
        throw ex;
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   431
    }
d82489644b15 8215895: Verify and create tests for Mac installer specific signing options
herrick
parents: 58416
diff changeset
   432
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   433
    public static Path createRelativePathCopy(final Path file) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   434
        Path fileCopy = workDir().resolve(file.getFileName()).toAbsolutePath().normalize();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   435
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   436
        ThrowingRunnable.toRunnable(() -> Files.copy(file, fileCopy,
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   437
                StandardCopyOption.REPLACE_EXISTING)).run();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   438
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   439
        final Path basePath = Path.of(".").toAbsolutePath().normalize();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   440
        try {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   441
            return basePath.relativize(fileCopy);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   442
        } catch (IllegalArgumentException ex) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   443
            // May happen on Windows: java.lang.IllegalArgumentException: 'other' has different root
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   444
            trace(String.format("Failed to relativize [%s] at [%s]", fileCopy,
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   445
                    basePath));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   446
            printStackTrace(ex);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   447
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   448
        return file;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   449
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   450
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   451
    static void waitForFileCreated(Path fileToWaitFor,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   452
            long timeoutSeconds) throws IOException {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   453
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   454
        trace(String.format("Wait for file [%s] to be available", fileToWaitFor));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   455
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   456
        WatchService ws = FileSystems.getDefault().newWatchService();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   457
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   458
        Path watchDirectory = fileToWaitFor.toAbsolutePath().getParent();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   459
        watchDirectory.register(ws, ENTRY_CREATE, ENTRY_MODIFY);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   460
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   461
        long waitUntil = System.currentTimeMillis() + timeoutSeconds * 1000;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   462
        for (;;) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   463
            long timeout = waitUntil - System.currentTimeMillis();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   464
            assertTrue(timeout > 0, String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   465
                    "Check timeout value %d is positive", timeout));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   466
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   467
            WatchKey key = ThrowingSupplier.toSupplier(() -> ws.poll(timeout,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   468
                    TimeUnit.MILLISECONDS)).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   469
            if (key == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   470
                if (fileToWaitFor.toFile().exists()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   471
                    trace(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   472
                            "File [%s] is available after poll timeout expired",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   473
                            fileToWaitFor));
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
                assertUnexpected(String.format("Timeout expired", timeout));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   477
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   478
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   479
            for (WatchEvent<?> event : key.pollEvents()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   480
                if (event.kind() == StandardWatchEventKinds.OVERFLOW) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   481
                    continue;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   482
                }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   483
                Path contextPath = (Path) event.context();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   484
                if (Files.isSameFile(watchDirectory.resolve(contextPath),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   485
                        fileToWaitFor)) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   486
                    trace(String.format("File [%s] is available", fileToWaitFor));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   487
                    return;
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
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   491
            if (!key.reset()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   492
                assertUnexpected("Watch key invalidated");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   493
            }
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
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   497
    static void printStackTrace(Throwable throwable) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   498
        if (extraLogStream != null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   499
            throwable.printStackTrace(extraLogStream);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   500
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   501
        throwable.printStackTrace();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   502
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   503
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   504
    private static String concatMessages(String msg, String msg2) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   505
        if (msg2 != null && !msg2.isBlank()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   506
            return msg + ": " + msg2;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   507
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   508
        return msg;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   509
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   510
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   511
    public static void assertEquals(long expected, long actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   512
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   513
        if (expected != actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   514
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   515
                    "Expected [%d]. Actual [%d]", expected, actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   516
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   517
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   518
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   519
        traceAssert(String.format("assertEquals(%d): %s", expected, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   520
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   521
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   522
    public static void assertNotEquals(long expected, long actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   523
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   524
        if (expected == actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   525
            error(concatMessages(String.format("Unexpected [%d] value", actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   526
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   527
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   528
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   529
        traceAssert(String.format("assertNotEquals(%d, %d): %s", expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   530
                actual, msg));
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 assertEquals(String expected, String actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   534
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   535
        if ((actual != null && !actual.equals(expected))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   536
                || (expected != null && !expected.equals(actual))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   537
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   538
                    "Expected [%s]. Actual [%s]", expected, actual),
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   539
                    msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   540
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   541
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   542
        traceAssert(String.format("assertEquals(%s): %s", expected, msg));
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 assertNotEquals(String expected, String actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   546
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   547
        if ((actual != null && !actual.equals(expected))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   548
                || (expected != null && !expected.equals(actual))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   549
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   550
            traceAssert(String.format("assertNotEquals(%s, %s): %s", expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   551
                actual, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   552
            return;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   553
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   554
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   555
        error(concatMessages(String.format("Unexpected [%s] value", actual), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   556
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   557
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   558
    public static void assertNull(Object value, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   559
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   560
        if (value != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   561
            error(concatMessages(String.format("Unexpected not null value [%s]",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   562
                    value), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   563
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   564
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   565
        traceAssert(String.format("assertNull(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   566
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   567
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   568
    public static void assertNotNull(Object value, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   569
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   570
        if (value == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   571
            error(concatMessages("Unexpected null value", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   572
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   573
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   574
        traceAssert(String.format("assertNotNull(%s): %s", value, msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   575
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   576
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   577
    public static void assertTrue(boolean actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   578
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   579
        if (!actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   580
            error(concatMessages("Unexpected FALSE", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   581
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   582
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   583
        traceAssert(String.format("assertTrue(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   584
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   585
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   586
    public static void assertFalse(boolean actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   587
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   588
        if (actual) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   589
            error(concatMessages("Unexpected TRUE", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   590
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   591
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   592
        traceAssert(String.format("assertFalse(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   593
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   594
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   595
    public static void assertPathExists(Path path, boolean exists) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   596
        if (exists) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   597
            assertTrue(path.toFile().exists(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   598
                    "Check [%s] path exists", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   599
        } else {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   600
            assertFalse(path.toFile().exists(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   601
                    "Check [%s] path doesn't exist", path));
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
     public static void assertDirectoryExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   606
        assertPathExists(path, true);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   607
        assertTrue(path.toFile().isDirectory(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   608
                "Check [%s] is a directory", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   609
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   610
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   611
    public static void assertFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   612
        assertPathExists(path, true);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   613
        assertTrue(path.toFile().isFile(), String.format("Check [%s] is a file",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   614
                path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   615
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   616
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   617
    public static void assertExecutableFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   618
        assertFileExists(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   619
        assertTrue(path.toFile().canExecute(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   620
                "Check [%s] file is executable", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   621
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   622
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   623
    public static void assertReadableFileExists(Path path) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   624
        assertFileExists(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   625
        assertTrue(path.toFile().canRead(), String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   626
                "Check [%s] file is readable", path));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   627
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   628
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   629
    public static void assertUnexpected(String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   630
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   631
        error(concatMessages("Unexpected", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   632
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   633
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   634
    public static void assertStringListEquals(List<String> expected,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   635
            List<String> actual, String msg) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   636
        currentTest.notifyAssert();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   637
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   638
        traceAssert(String.format("assertStringListEquals(): %s", msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   639
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   640
        String idxFieldFormat = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   641
            int listSize = expected.size();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   642
            int width = 0;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   643
            while (listSize != 0) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   644
                listSize = listSize / 10;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   645
                width++;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   646
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   647
            return "%" + width + "d";
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   648
        }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   649
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   650
        AtomicInteger counter = new AtomicInteger(0);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   651
        Iterator<String> actualIt = actual.iterator();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   652
        expected.stream().sequential().filter(expectedStr -> actualIt.hasNext()).forEach(expectedStr -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   653
            int idx = counter.incrementAndGet();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   654
            String actualStr = actualIt.next();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   655
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   656
            if ((actualStr != null && !actualStr.equals(expectedStr))
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   657
                    || (expectedStr != null && !expectedStr.equals(actualStr))) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   658
                error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   659
                        "(" + idxFieldFormat + ") Expected [%s]. Actual [%s]",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   660
                        idx, expectedStr, actualStr), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   661
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   662
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   663
            traceAssert(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   664
                    "assertStringListEquals(" + idxFieldFormat + ", %s)", idx,
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   665
                    expectedStr));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   666
        });
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   667
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   668
        if (expected.size() < actual.size()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   669
            // Actual string list is longer than expected
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   670
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   671
                    "Actual list is longer than expected by %d elements",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   672
                    actual.size() - expected.size()), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   673
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   674
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   675
        if (actual.size() < expected.size()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   676
            // Actual string list is shorter than expected
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   677
            error(concatMessages(String.format(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   678
                    "Actual list is longer than expected by %d elements",
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   679
                    expected.size() - actual.size()), msg));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   680
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   681
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   682
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   683
    public final static class TextStreamAsserter {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   684
        TextStreamAsserter(String value) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   685
            this.value = value;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   686
            predicate(String::contains);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   687
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   688
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   689
        public TextStreamAsserter label(String v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   690
            label = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   691
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   692
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   693
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   694
        public TextStreamAsserter predicate(BiPredicate<String, String> v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   695
            predicate = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   696
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   697
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   698
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   699
        public TextStreamAsserter negate() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   700
            negate = true;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   701
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   702
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   703
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   704
        public TextStreamAsserter orElseThrow(RuntimeException v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   705
            return orElseThrow(() -> v);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   706
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   707
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   708
        public TextStreamAsserter orElseThrow(Supplier<RuntimeException> v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   709
            createException = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   710
            return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   711
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   712
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   713
        public void apply(Stream<String> lines) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   714
            String matchedStr = lines.filter(line -> predicate.test(line, value)).findFirst().orElse(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   715
                    null);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   716
            String labelStr = Optional.ofNullable(label).orElse("output");
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   717
            if (negate) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   718
                String msg = String.format(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   719
                        "Check %s doesn't contain [%s] string", labelStr, value);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   720
                if (createException == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   721
                    assertNull(matchedStr, msg);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   722
                } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   723
                    trace(msg);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   724
                    if (matchedStr != null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   725
                        throw createException.get();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   726
                    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   727
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   728
            } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   729
                String msg = String.format("Check %s contains [%s] string",
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   730
                        labelStr, value);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   731
                if (createException == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   732
                    assertNotNull(matchedStr, msg);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   733
                } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   734
                    trace(msg);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   735
                    if (matchedStr == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   736
                        throw createException.get();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   737
                    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   738
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   739
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   740
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   741
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   742
        private BiPredicate<String, String> predicate;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   743
        private String label;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   744
        private boolean negate;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   745
        private Supplier<RuntimeException> createException;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   746
        final private String value;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   747
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   748
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   749
    public static TextStreamAsserter assertTextStream(String what) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   750
        return new TextStreamAsserter(what);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   751
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   752
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   753
    private static PrintStream openLogStream() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   754
        if (LOG_FILE == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   755
            return null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   756
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   757
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   758
        return ThrowingSupplier.toSupplier(() -> new PrintStream(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   759
                new FileOutputStream(LOG_FILE.toFile(), true))).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   760
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   761
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   762
    private static TestInstance currentTest;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   763
    private static PrintStream extraLogStream;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   764
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   765
    private static final boolean TRACE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   766
    private static final boolean TRACE_ASSERTS;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   767
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   768
    static final boolean VERBOSE_JPACKAGE;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   769
    static final boolean VERBOSE_TEST_SETUP;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   770
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   771
    static String getConfigProperty(String propertyName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   772
        return System.getProperty(getConfigPropertyName(propertyName));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   773
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   774
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   775
    static String getConfigPropertyName(String propertyName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   776
        return "jpackage.test." + propertyName;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   777
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   778
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   779
    static Set<String> tokenizeConfigProperty(String propertyName) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   780
        final String val = TKit.getConfigProperty(propertyName);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   781
        if (val == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   782
            return null;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   783
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   784
        return Stream.of(val.toLowerCase().split(",")).map(String::strip).filter(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   785
                Predicate.not(String::isEmpty)).collect(Collectors.toSet());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   786
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   787
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   788
    static final Path LOG_FILE = Functional.identity(() -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   789
        String val = getConfigProperty("logfile");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   790
        if (val == null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   791
            return null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   792
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   793
        return Path.of(val);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   794
    }).get();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   795
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   796
    static {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   797
        Set<String> logOptions = tokenizeConfigProperty("suppress-logging");
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   798
        if (logOptions == null) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   799
            TRACE = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   800
            TRACE_ASSERTS = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   801
            VERBOSE_JPACKAGE = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   802
            VERBOSE_TEST_SETUP = true;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   803
        } else if (logOptions.contains("all")) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   804
            TRACE = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   805
            TRACE_ASSERTS = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   806
            VERBOSE_JPACKAGE = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   807
            VERBOSE_TEST_SETUP = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   808
        } else {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   809
            Predicate<Set<String>> isNonOf = options -> {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   810
                return Collections.disjoint(logOptions, options);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   811
            };
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   812
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   813
            TRACE = isNonOf.test(Set.of("trace", "t"));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   814
            TRACE_ASSERTS = isNonOf.test(Set.of("assert", "a"));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   815
            VERBOSE_JPACKAGE = isNonOf.test(Set.of("jpackage", "jp"));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58464
diff changeset
   816
            VERBOSE_TEST_SETUP = isNonOf.test(Set.of("init", "i"));
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   817
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   818
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   819
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   820
    private static final String OS = System.getProperty("os.name").toLowerCase();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents:
diff changeset
   821
}