test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java
author herrick
Wed, 16 Oct 2019 10:32:08 -0400
branchJDK-8200758-branch
changeset 58648 3bf53ffa9ae7
parent 58416 f09bf58c1f17
child 58671 3b578a5976df
permissions -rw-r--r--
8232279 : Improve test helpers #2 Submitted-by: asemenyuk Reviewed-by: aherrick, almatvee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     1
/*
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     4
 *
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     8
 *
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    13
 * accompanied this code).
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    14
 *
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    18
 *
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    21
 * questions.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    22
 */
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    23
package jdk.jpackage.test;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    24
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    25
import java.io.FileOutputStream;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    26
import java.io.IOException;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    27
import java.nio.file.Files;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    28
import java.nio.file.Path;
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    29
import java.security.SecureRandom;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
    30
import java.util.*;
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    31
import java.util.function.Consumer;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    32
import java.util.function.Function;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    33
import java.util.function.Supplier;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    34
import java.util.regex.Matcher;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
    35
import java.util.regex.Pattern;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
    36
import java.util.stream.Collectors;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
    37
import java.util.stream.Stream;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    38
import jdk.jpackage.internal.ApplicationLayout;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
    39
import jdk.jpackage.test.Functional.ThrowingConsumer;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    40
import jdk.jpackage.test.Functional.ThrowingFunction;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    41
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    42
/**
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    43
 * jpackage command line with prerequisite actions. Prerequisite actions can be
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    44
 * anything. The simplest is to compile test application and pack in a jar for
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    45
 * use on jpackage command line.
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    46
 */
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    47
public final class JPackageCommand extends CommandArguments<JPackageCommand> {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    48
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    49
    public JPackageCommand() {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    50
        actions = new ArrayList<>();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    51
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    52
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    53
    public JPackageCommand(JPackageCommand cmd) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    54
        this();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    55
        args.addAll(cmd.args);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    56
        withToolProvider = cmd.withToolProvider;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    57
        saveConsoleOutput = cmd.saveConsoleOutput;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    58
        suppressOutput = cmd.suppressOutput;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    59
        ignoreDefaultRuntime = cmd.ignoreDefaultRuntime;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    60
        immutable = cmd.immutable;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    61
        actionsExecuted = cmd.actionsExecuted;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    62
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    63
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    64
    JPackageCommand createImmutableCopy() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
    65
        JPackageCommand reply = new JPackageCommand(this);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    66
        reply.immutable = true;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    67
        return reply;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    68
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    69
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    70
    public JPackageCommand setArgumentValue(String argName, String newValue) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
    71
        verifyMutable();
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
    72
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    73
        String prevArg = null;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    74
        ListIterator<String> it = args.listIterator();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    75
        while (it.hasNext()) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    76
            String value = it.next();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    77
            if (prevArg != null && prevArg.equals(argName)) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    78
                if (newValue != null) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    79
                    it.set(newValue);
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    80
                } else {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    81
                    it.remove();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    82
                    it.previous();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    83
                    it.remove();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    84
                }
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    85
                return this;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    86
            }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    87
            prevArg = value;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    88
        }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    89
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    90
        if (newValue != null) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    91
            addArguments(argName, newValue);
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
    92
        }
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    93
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    94
        return this;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    95
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    96
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    97
    public JPackageCommand setArgumentValue(String argName, Path newValue) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    98
        return setArgumentValue(argName, newValue.toString());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
    99
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   100
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   101
    public JPackageCommand removeArgumentWithValue(String argName) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   102
        return setArgumentValue(argName, (String)null);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   103
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   104
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   105
    public JPackageCommand removeArgument(String argName) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   106
        args = args.stream().filter(arg -> !arg.equals(argName)).collect(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   107
                Collectors.toList());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   108
        return this;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   109
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   110
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   111
    public boolean hasArgument(String argName) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   112
        return args.contains(argName);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   113
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   114
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   115
    public <T> T getArgumentValue(String argName,
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   116
            Function<JPackageCommand, T> defaultValueSupplier,
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   117
            Function<String, T> stringConverter) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   118
        String prevArg = null;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   119
        for (String arg : args) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   120
            if (prevArg != null && prevArg.equals(argName)) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   121
                return stringConverter.apply(arg);
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   122
            }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   123
            prevArg = arg;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   124
        }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   125
        if (defaultValueSupplier != null) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   126
            return defaultValueSupplier.apply(this);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   127
        }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   128
        return null;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   129
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   130
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   131
    public String getArgumentValue(String argName,
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   132
            Function<JPackageCommand, String> defaultValueSupplier) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   133
        return getArgumentValue(argName, defaultValueSupplier, v -> v);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   134
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   135
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   136
    public <T> T getArgumentValue(String argName,
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   137
            Supplier<T> defaultValueSupplier,
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   138
            Function<String, T> stringConverter) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   139
        return getArgumentValue(argName, (unused) -> defaultValueSupplier.get(),
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   140
                stringConverter);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   141
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   142
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   143
    public String getArgumentValue(String argName,
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   144
            Supplier<String> defaultValueSupplier) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   145
        return getArgumentValue(argName, defaultValueSupplier, v -> v);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   146
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   147
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   148
    public String getArgumentValue(String argName) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   149
        return getArgumentValue(argName, (Supplier<String>)null);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   150
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   151
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   152
    public String[] getAllArgumentValues(String argName) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   153
        List<String> values = new ArrayList<>();
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   154
        String prevArg = null;
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   155
        for (String arg : args) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   156
            if (prevArg != null && prevArg.equals(argName)) {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   157
                values.add(arg);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   158
            }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   159
            prevArg = arg;
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   160
        }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   161
        return values.toArray(String[]::new);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   162
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   163
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   164
    public JPackageCommand addArguments(String name, Path value) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   165
        return addArguments(name, value.toString());
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   166
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   167
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   168
    public boolean isImagePackageType() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   169
        return PackageType.IMAGE == getArgumentValue("--package-type",
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   170
                () -> null, PACKAGE_TYPES::get);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   171
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   172
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   173
    public PackageType packageType() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   174
        // Don't try to be in sync with jpackage defaults. Keep it simple:
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   175
        // if no `--package-type` explicitely set on the command line, consider
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   176
        // this is operator's fault.
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   177
        return getArgumentValue("--package-type",
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   178
                () -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   179
                    throw new IllegalStateException("Package type not set");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   180
                }, PACKAGE_TYPES::get);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   181
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   182
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   183
    public Path outputDir() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   184
        return getArgumentValue("--dest", () -> Path.of("."), Path::of);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   185
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   186
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   187
    public Path inputDir() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   188
        return getArgumentValue("--input", () -> null, Path::of);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   189
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   190
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   191
    public String version() {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   192
        return getArgumentValue("--app-version", () -> "1.0");
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   193
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   194
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   195
    public String name() {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   196
        return getArgumentValue("--name", () -> getArgumentValue("--main-class"));
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   197
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   198
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   199
    public boolean isRuntime() {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   200
        return  hasArgument("--runtime-image")
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   201
                && !hasArgument("--main-jar")
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   202
                && !hasArgument("--module")
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   203
                && !hasArgument("--app-image");
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   204
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   205
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   206
    public JPackageCommand setDefaultInputOutput() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   207
        addArguments("--input", TKit.defaultInputDir());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   208
        addArguments("--dest", TKit.defaultOutputDir());
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   209
        return this;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   210
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   211
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   212
    public JPackageCommand setFakeRuntime() {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   213
        verifyMutable();
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   214
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   215
        ThrowingConsumer<Path> createBulkFile = path -> {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   216
            Files.createDirectories(path.getParent());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   217
            try (FileOutputStream out = new FileOutputStream(path.toFile())) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   218
                byte[] bytes = new byte[4 * 1024];
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   219
                new SecureRandom().nextBytes(bytes);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   220
                out.write(bytes);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   221
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   222
        };
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   223
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   224
        addAction(cmd -> {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   225
            Path fakeRuntimeDir = TKit.workDir().resolve("fake_runtime");
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   226
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   227
            TKit.trace(String.format("Init fake runtime in [%s] directory",
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   228
                    fakeRuntimeDir));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   229
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   230
            Files.createDirectories(fakeRuntimeDir);
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   231
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   232
            if (TKit.isWindows() || TKit.isLinux()) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   233
                // Needed to make WindowsAppBundler happy as it copies MSVC dlls
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   234
                // from `bin` directory.
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   235
                // Need to make the code in rpm spec happy as it assumes there is
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   236
                // always something in application image.
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   237
                fakeRuntimeDir.resolve("bin").toFile().mkdir();
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   238
            }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   239
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   240
            if (TKit.isOSX()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   241
                // Make MacAppImageBuilder happy
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   242
                createBulkFile.accept(fakeRuntimeDir.resolve(Path.of(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   243
                        "Contents/Home/lib/jli/libjli.dylib")));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   244
            }
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   245
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   246
            // Mak sure fake runtime takes some disk space.
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   247
            // Package bundles with 0KB size are unexpected and considered
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   248
            // an error by PackageTest.
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   249
            createBulkFile.accept(fakeRuntimeDir.resolve(Path.of("bin", "bulk")));
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   250
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   251
            cmd.addArguments("--runtime-image", fakeRuntimeDir);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   252
        });
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   253
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   254
        return this;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   255
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   256
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   257
    JPackageCommand addAction(ThrowingConsumer<JPackageCommand> action) {
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   258
        verifyMutable();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   259
        actions.add(ThrowingConsumer.toConsumer(action));
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   260
        return this;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   261
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   262
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   263
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   264
     * Shorthand for {@code helloAppImage(null)}.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   265
     */
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   266
    public static JPackageCommand helloAppImage() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   267
        JavaAppDesc javaAppDesc = null;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   268
        return helloAppImage(javaAppDesc);
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   269
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   270
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   271
    /**
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   272
     * Creates new JPackageCommand instance configured with the test Java app.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   273
     * For the explanation of `javaAppDesc` parameter, see documentation for
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   274
     * #JavaAppDesc.parse() method.
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   275
     *
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   276
     * @param javaAppDesc Java application description
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   277
     * @return this
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   278
     */
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   279
    public static JPackageCommand helloAppImage(String javaAppDesc) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   280
        final JavaAppDesc appDesc;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   281
        if (javaAppDesc == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   282
            appDesc = null;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   283
        } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   284
            appDesc = JavaAppDesc.parse(javaAppDesc);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   285
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   286
        return helloAppImage(appDesc);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   287
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   288
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   289
    public static JPackageCommand helloAppImage(JavaAppDesc javaAppDesc) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   290
        JPackageCommand cmd = new JPackageCommand();
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   291
        cmd.setDefaultInputOutput().setDefaultAppName();
58115
4a27283b542d /home/aherrick/comment
herrick
parents: 58114
diff changeset
   292
        PackageType.IMAGE.applyTo(cmd);
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   293
        new HelloApp(javaAppDesc).addTo(cmd);
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   294
        return cmd;
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   295
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   296
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   297
    public JPackageCommand setPackageType(PackageType type) {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   298
        verifyMutable();
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   299
        type.applyTo(this);
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   300
        return this;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   301
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   302
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   303
    JPackageCommand setDefaultAppName() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   304
        return addArguments("--name", TKit.getCurrentDefaultAppName());
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   305
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   306
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   307
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   308
     * Returns path to output bundle of configured jpackage command.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   309
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   310
     * If this is build image command, returns path to application image directory.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   311
     */
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   312
    public Path outputBundle() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   313
        final String bundleName;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   314
        if (isImagePackageType()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   315
            String dirName = name();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   316
            if (TKit.isOSX()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   317
                dirName = dirName + ".app";
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   318
            }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   319
            bundleName = dirName;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   320
        } else if (TKit.isLinux()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   321
            bundleName = LinuxHelper.getBundleName(this);
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   322
        } else if (TKit.isWindows()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   323
            bundleName = WindowsHelper.getBundleName(this);
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   324
        } else if (TKit.isOSX()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   325
            bundleName = MacHelper.getBundleName(this);
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   326
        } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   327
            throw TKit.throwUnknownPlatformError();
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   328
        }
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   329
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   330
        return outputDir().resolve(bundleName);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   331
    }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   332
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   333
    /**
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   334
     * Returns application layout.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   335
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   336
     * If this is build image command, returns application image layout of the
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   337
     * output bundle relative to output directory. Otherwise returns layout of
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   338
     * installed application relative to the root directory.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   339
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   340
     * If this command builds Java runtime, not an application, returns
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   341
     * corresponding layout.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   342
     */
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   343
    public ApplicationLayout appLayout() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   344
        final ApplicationLayout layout;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   345
        if (isRuntime()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   346
            layout = ApplicationLayout.javaRuntime();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   347
        } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   348
            layout = ApplicationLayout.platformAppImage();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   349
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   350
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   351
        if (isImagePackageType()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   352
            return layout.resolveAt(outputBundle());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   353
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   354
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   355
        return layout.resolveAt(appInstallationDirectory());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   356
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   357
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   358
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   359
     * Returns path to directory where application will be installed or null if
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   360
     * this is build image command.
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   361
     *
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   362
     * E.g. on Linux for app named Foo default the function will return
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   363
     * `/opt/foo`
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   364
     */
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   365
    public Path appInstallationDirectory() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   366
        if (isImagePackageType()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   367
            return null;
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   368
        }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   369
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   370
        if (TKit.isLinux()) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   371
            if (isRuntime()) {
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   372
                // Not fancy, but OK.
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   373
                return Path.of(getArgumentValue("--install-dir", () -> "/opt"),
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   374
                        LinuxHelper.getPackageName(this));
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   375
            }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   376
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   377
            // Launcher is in "bin" subfolder of the installation directory.
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   378
            return appLauncherPath().getParent().getParent();
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   379
        }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   380
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   381
        if (TKit.isWindows()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   382
            return WindowsHelper.getInstallationDirectory(this);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   383
        }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   384
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   385
        if (TKit.isOSX()) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   386
            return MacHelper.getInstallationDirectory(this);
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   387
        }
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   388
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   389
        throw TKit.throwUnknownPlatformError();
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   390
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   391
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   392
    /**
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   393
     * Returns path to application's Java runtime.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   394
     * If the command will package Java runtime only, returns correct path to
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   395
     * runtime directory.
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   396
     *
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   397
     * E.g.:
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   398
     * [jpackage --name Foo --package-type rpm] -> `/opt/foo/lib/runtime`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   399
     * [jpackage --name Foo --package-type app-image --dest bar] -> `bar/Foo/lib/runtime`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   400
     * [jpackage --name Foo --package-type rpm --runtime-image java] -> `/opt/foo`
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   401
     */
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   402
    public Path appRuntimeDirectory() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   403
        return appLayout().runtimeDirectory();
58302
718bd56695b3 8231277 : Adjust Linux application image layout
herrick
parents: 58301
diff changeset
   404
    }
718bd56695b3 8231277 : Adjust Linux application image layout
herrick
parents: 58301
diff changeset
   405
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   406
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   407
     * Returns path for application launcher with the given name.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   408
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   409
     * E.g.: [jpackage --name Foo --package-type rpm] -> `/opt/foo/bin/Foo`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   410
     * [jpackage --name Foo --package-type app-image --dest bar] ->
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   411
     * `bar/Foo/bin/Foo`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   412
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   413
     * @param launcherName name of launcher or {@code null} for the main
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   414
     * launcher
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   415
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   416
     * @throws IllegalArgumentException if the command is configured for
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   417
     * packaging Java runtime
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   418
     */
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   419
    public Path appLauncherPath(String launcherName) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   420
        verifyNotRuntime();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   421
        if (launcherName == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   422
            launcherName = name();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   423
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   424
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   425
        if (TKit.isWindows()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   426
            launcherName = launcherName + ".exe";
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   427
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   428
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   429
        if (isImagePackageType()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   430
            return appLayout().launchersDirectory().resolve(launcherName);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   431
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   432
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   433
        if (TKit.isLinux()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   434
            LinuxHelper.getLauncherPath(this).getParent().resolve(launcherName);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   435
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   436
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   437
        return appLayout().launchersDirectory().resolve(launcherName);
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   438
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   439
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   440
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   441
     * Shorthand for {@code appLauncherPath(null)}.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   442
     */
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   443
    public Path appLauncherPath() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   444
        return appLauncherPath(null);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   445
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   446
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   447
    private void verifyNotRuntime() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   448
        if (isRuntime()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   449
            throw new IllegalArgumentException("Java runtime packaging");
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   450
        }
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   451
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   452
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   453
    /**
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   454
     * Returns path to .cfg file of the given application launcher.
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   455
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   456
     * E.g.:
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   457
     * [jpackage --name Foo --package-type rpm] -> `/opt/foo/lib/app/Foo.cfg`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   458
     * [jpackage --name Foo --package-type app-image --dest bar] -> `bar/Foo/lib/app/Foo.cfg`
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   459
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   460
     * @param launcher name of launcher or {@code null} for the main launcher
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   461
     *
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   462
     * @throws IllegalArgumentException if the command is configured for
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   463
     * packaging Java runtime
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   464
     */
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   465
    public Path appLauncherCfgPath(String launcherName) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   466
        verifyNotRuntime();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   467
        if (launcherName == null) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   468
            launcherName = name();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   469
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   470
        return appLayout().appDirectory().resolve(launcherName + ".cfg");
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   471
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   472
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   473
    public boolean isFakeRuntime(String msg) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   474
        Path runtimeDir = appRuntimeDirectory();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   475
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   476
        final Collection<Path> criticalRuntimeFiles;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   477
        if (TKit.isWindows()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   478
            criticalRuntimeFiles = WindowsHelper.CRITICAL_RUNTIME_FILES;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   479
        } else if (TKit.isLinux()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   480
            criticalRuntimeFiles = LinuxHelper.CRITICAL_RUNTIME_FILES;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   481
        } else if (TKit.isOSX()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   482
            criticalRuntimeFiles = MacHelper.CRITICAL_RUNTIME_FILES;
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   483
        } else {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   484
            throw TKit.throwUnknownPlatformError();
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   485
        }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   486
58302
718bd56695b3 8231277 : Adjust Linux application image layout
herrick
parents: 58301
diff changeset
   487
        if (criticalRuntimeFiles.stream().filter(
718bd56695b3 8231277 : Adjust Linux application image layout
herrick
parents: 58301
diff changeset
   488
                v -> runtimeDir.resolve(v).toFile().exists()).findFirst().orElse(
718bd56695b3 8231277 : Adjust Linux application image layout
herrick
parents: 58301
diff changeset
   489
                        null) == null) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   490
            // Fake runtime
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   491
            TKit.trace(String.format(
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   492
                    "%s because application runtime directory [%s] is incomplete",
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   493
                    msg, runtimeDir));
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   494
            return true;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   495
        }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   496
        return false;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   497
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   498
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   499
    public static void useToolProviderByDefault() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   500
        defaultWithToolProvider = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   501
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   502
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   503
    public static void useExecutableByDefault() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   504
        defaultWithToolProvider = false;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   505
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   506
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   507
    public JPackageCommand useToolProvider(boolean v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   508
        verifyMutable();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   509
        withToolProvider = v;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   510
        return this;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   511
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   512
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   513
    public JPackageCommand saveConsoleOutput(boolean v) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   514
        verifyMutable();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   515
        saveConsoleOutput = v;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   516
        return this;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   517
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   518
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   519
    public JPackageCommand dumpOutput(boolean v) {
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   520
        verifyMutable();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   521
        suppressOutput = !v;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   522
        return this;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   523
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   524
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   525
    public JPackageCommand ignoreDefaultRuntime(boolean v) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   526
        verifyMutable();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   527
        ignoreDefaultRuntime = v;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   528
        return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   529
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   530
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   531
    public boolean isWithToolProvider() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   532
        return Optional.ofNullable(withToolProvider).orElse(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   533
                defaultWithToolProvider);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   534
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   535
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   536
    public JPackageCommand executePrerequisiteActions() {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   537
        verifyMutable();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   538
        if (!actionsExecuted) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   539
            actionsExecuted = true;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   540
            if (actions != null) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   541
                actions.stream().forEach(r -> r.accept(this));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   542
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   543
        }
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   544
        return this;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   545
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   546
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   547
    public Executor createExecutor() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   548
        verifyMutable();
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   549
        Executor exec = new Executor()
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   550
                .saveOutput(saveConsoleOutput).dumpOutput(!suppressOutput)
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   551
                .addArguments(args);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   552
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   553
        if (isWithToolProvider()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   554
            exec.setToolProvider(JavaTool.JPACKAGE);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   555
        } else {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   556
            exec.setExecutable(JavaTool.JPACKAGE);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   557
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   558
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   559
        return exec;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   560
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   561
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   562
    public Executor.Result execute() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   563
        executePrerequisiteActions();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   564
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   565
        if (isImagePackageType()) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   566
            TKit.deleteDirectoryContentsRecursive(outputDir());
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   567
        }
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   568
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   569
        return new JPackageCommand(this)
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   570
                .adjustArgumentsBeforeExecution()
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   571
                .createExecutor()
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   572
                .execute();
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   573
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   574
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   575
    public JPackageCommand executeAndAssertHelloAppImageCreated() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   576
        executeAndAssertImageCreated();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   577
        HelloApp.executeLauncherAndVerifyOutput(this);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   578
        return this;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   579
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   580
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   581
    public JPackageCommand executeAndAssertImageCreated() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   582
        execute().assertExitCodeIsZero();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   583
        return assertImageCreated();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   584
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   585
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   586
    public JPackageCommand assertImageCreated() {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   587
        verifyIsOfType(PackageType.IMAGE);
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   588
        TKit.assertDirectoryExists(appRuntimeDirectory());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   589
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   590
        if (!isRuntime()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   591
            TKit.assertExecutableFileExists(appLauncherPath());
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   592
            TKit.assertFileExists(appLauncherCfgPath(null));
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   593
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   594
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   595
        return this;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   596
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   597
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   598
    private JPackageCommand adjustArgumentsBeforeExecution() {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   599
        if (!hasArgument("--runtime-image") && !hasArgument("--app-image") && DEFAULT_RUNTIME_IMAGE != null && !ignoreDefaultRuntime) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   600
            addArguments("--runtime-image", DEFAULT_RUNTIME_IMAGE);
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   601
        }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   602
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   603
        if (!hasArgument("--verbose") && TKit.VERBOSE_JPACKAGE) {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   604
            addArgument("--verbose");
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   605
        }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   606
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   607
        return this;
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   608
    }
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   609
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   610
    String getPrintableCommandLine() {
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   611
        return new Executor()
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   612
                .setExecutable(JavaTool.JPACKAGE)
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   613
                .addArguments(args)
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   614
                .getPrintableCommandLine();
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   615
    }
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   616
58304
7a61351edad2 8231282 : Revisit --linux-deb-copyright option
herrick
parents: 58302
diff changeset
   617
    public void verifyIsOfType(Collection<PackageType> types) {
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   618
        verifyIsOfType(types.toArray(PackageType[]::new));
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   619
    }
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   620
58304
7a61351edad2 8231282 : Revisit --linux-deb-copyright option
herrick
parents: 58302
diff changeset
   621
    public void verifyIsOfType(PackageType ... types) {
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   622
        final Set<PackageType> typesSet = Set.of(types);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   623
        if (!hasArgument("--package-type")) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   624
            if (!isImagePackageType()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   625
                if (TKit.isLinux() && typesSet.equals(PackageType.LINUX)) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   626
                    return;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   627
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   628
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   629
                if (TKit.isWindows() && typesSet.equals(PackageType.WINDOWS)) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   630
                    return;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   631
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   632
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   633
                if (TKit.isOSX() && typesSet.equals(PackageType.MAC)) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   634
                    return;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   635
                }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   636
            } else if (typesSet.equals(Set.of(PackageType.IMAGE))) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   637
                return;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   638
            }
58113
885b0543f6e4 8230726: Improve jpackage jtreg tests
herrick
parents: 58036
diff changeset
   639
        }
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   640
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   641
        if (!typesSet.contains(packageType())) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   642
            throw new IllegalArgumentException("Unexpected package type");
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   643
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   644
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   645
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   646
    public CfgFile readLaunherCfgFile() {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   647
        return readLaunherCfgFile(null);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   648
    }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   649
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   650
    public CfgFile readLaunherCfgFile(String launcherName) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   651
        verifyIsOfType(PackageType.IMAGE);
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   652
        if (isRuntime()) {
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   653
            return null;
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   654
        }
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   655
        return ThrowingFunction.toFunction(CfgFile::readFromFile).apply(
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   656
                appLauncherCfgPath(launcherName));
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   657
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   658
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   659
    public static String escapeAndJoin(String... args) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   660
        return escapeAndJoin(List.of(args));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   661
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   662
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   663
    public static String escapeAndJoin(List<String> args) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   664
        Pattern whitespaceRegexp = Pattern.compile("\\s");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   665
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   666
        return args.stream().map(v -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   667
            String str = v;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   668
            // Escape quotes.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   669
            str = str.replace("\"", "\\\"");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   670
            // Escape backslashes.
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   671
            str = str.replace("\\", "\\\\");
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   672
            // If value contains whitespace characters, put the value in quotes
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   673
            if (whitespaceRegexp.matcher(str).find()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   674
                str = "\"" + str + "\"";
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   675
            }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   676
            return str;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   677
        }).collect(Collectors.joining(" "));
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   678
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   679
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   680
    public static Path relativePathInRuntime(JavaTool tool) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   681
        Path path = tool.relativePathInJavaHome();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   682
        if (TKit.isOSX()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   683
            path = Path.of("Contents/Home").resolve(path);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   684
        }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   685
        return path;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   686
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   687
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   688
    public static Stream<String> filterOutput(Stream<String> jpackageOutput) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   689
        // Skip "WARNING: Using experimental tool jpackage" first line of output
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   690
        return jpackageOutput.skip(1);
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   691
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   692
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   693
    public static List<String> filterOutput(List<String> jpackageOutput) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   694
        return filterOutput(jpackageOutput.stream()).collect(Collectors.toList());
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   695
    }
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   696
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   697
    @Override
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   698
    protected boolean isMutable() {
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   699
        return !immutable;
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   700
    }
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   701
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   702
    private Boolean withToolProvider;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   703
    private boolean saveConsoleOutput;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   704
    private boolean suppressOutput;
58648
3bf53ffa9ae7 8232279 : Improve test helpers #2
herrick
parents: 58416
diff changeset
   705
    private boolean ignoreDefaultRuntime;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   706
    private boolean immutable;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   707
    private boolean actionsExecuted;
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   708
    private final List<Consumer<JPackageCommand>> actions;
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   709
    private static boolean defaultWithToolProvider;
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   710
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   711
    private final static Map<String, PackageType> PACKAGE_TYPES = Functional.identity(
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   712
            () -> {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   713
                Map<String, PackageType> reply = new HashMap<>();
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   714
                for (PackageType type : PackageType.values()) {
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   715
                    reply.put(type.getName(), type);
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   716
                }
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   717
                return reply;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   718
            }).get();
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   719
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   720
    public final static Path DEFAULT_RUNTIME_IMAGE = Functional.identity(() -> {
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   721
        // Set the property to the path of run-time image to speed up
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   722
        // building app images and platform bundles by avoiding running jlink
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   723
        // The value of the property will be automativcally appended to
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   724
        // jpackage command line if the command line doesn't have
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   725
        // `--runtime-image` parameter set.
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   726
        String val = TKit.getConfigProperty("runtime-image");
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   727
        if (val != null) {
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   728
            return Path.of(val);
58301
e0efb29609bd 8225249 : LinuxDebBundler and LinuxRpmBundler should share more code
herrick
parents: 58147
diff changeset
   729
        }
58416
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   730
        return null;
f09bf58c1f17 8231605: Improve test helpers
herrick
parents: 58304
diff changeset
   731
    }).get();
58036
f7f10023f7c0 8229840 : Add jtreg test for --linux-app-category option
herrick
parents:
diff changeset
   732
}