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