Skip to content

Commit f4381f0

Browse files
JPackageCommand can derive app name from jpackage command line without --name option but with --runtime-image option. Allow to use arguments with CannedFormattedString that get their values from JPackageCommand instance. Make JPackageCommand.validateOutput(CannedFormattedString) more robust and allow it to take an array of canned formatted strings.
1 parent e74c14c commit f4381f0

File tree

1 file changed

+58
-19
lines changed

1 file changed

+58
-19
lines changed

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -218,26 +218,27 @@ public String version() {
218218
}
219219

220220
public String name() {
221-
String appImage = getArgumentValue("--app-image");
222-
if (appImage != null) {
223-
String name = AppImageFile.load(Path.of(appImage)).mainLauncherName();
224-
// can be null if using foreign app-image
225-
return ((name != null) ? name : getArgumentValue("--name"));
226-
}
227-
return getArgumentValue("--name", () -> getArgumentValue("--main-class"));
221+
return nameFromAppImage().or(this::nameFromBasicArgs).or(this::nameFromRuntimeImage).orElseThrow();
228222
}
229223

230224
public String installerName() {
231225
verifyIsOfType(PackageType.NATIVE);
232-
String installerName = getArgumentValue("--name",
233-
() -> getArgumentValue("--main-class", () -> null));
234-
if (installerName == null) {
235-
String appImage = getArgumentValue("--app-image");
236-
if (appImage != null) {
237-
installerName = AppImageFile.load(Path.of(appImage)).mainLauncherName();
238-
}
239-
}
240-
return installerName;
226+
return nameFromBasicArgs().or(this::nameFromAppImage).or(this::nameFromRuntimeImage).orElseThrow();
227+
}
228+
229+
private Optional<String> nameFromAppImage() {
230+
return Optional.ofNullable(getArgumentValue("--app-image"))
231+
.map(Path::of).map(AppImageFile::load).map(AppImageFile::mainLauncherName);
232+
}
233+
234+
private Optional<String> nameFromRuntimeImage() {
235+
return Optional.ofNullable(getArgumentValue("--runtime-image"))
236+
.map(Path::of).map(Path::getFileName).map(Path::toString);
237+
}
238+
239+
private Optional<String> nameFromBasicArgs() {
240+
return Optional.ofNullable(getArgumentValue("--name")).or(
241+
() -> Optional.ofNullable(getArgumentValue("--main-class")));
241242
}
242243

243244
public boolean isRuntime() {
@@ -703,7 +704,7 @@ public JPackageCommand ignoreDefaultVerbose(boolean v) {
703704
}
704705

705706
public JPackageCommand validateOutput(TKit.TextStreamVerifier validator) {
706-
return JPackageCommand.this.validateOutput(validator::apply);
707+
return validateOutput(validator::apply);
707708
}
708709

709710
public JPackageCommand validateOutput(Consumer<Stream<String>> validator) {
@@ -716,8 +717,43 @@ public JPackageCommand validateOutput(Consumer<Stream<String>> validator) {
716717
return this;
717718
}
718719

719-
public JPackageCommand validateOutput(CannedFormattedString str) {
720-
return JPackageCommand.this.validateOutput(TKit.assertTextStream(str.getValue()));
720+
@FunctionalInterface
721+
public interface CannedArgument {
722+
public String value(JPackageCommand cmd);
723+
}
724+
725+
public static Object cannedArgument(Function<JPackageCommand, Object> supplier, String label) {
726+
Objects.requireNonNull(supplier);
727+
Objects.requireNonNull(label);
728+
return new CannedArgument() {
729+
@Override
730+
public String value(JPackageCommand cmd) {
731+
return supplier.apply(cmd).toString();
732+
}
733+
734+
@Override
735+
public String toString( ) {
736+
return label;
737+
}
738+
};
739+
}
740+
741+
public String getValue(CannedFormattedString str) {
742+
return new CannedFormattedString(str.formatter(), str.key(), Stream.of(str.args()).map(arg -> {
743+
if (arg instanceof CannedArgument cannedArg) {
744+
return cannedArg.value(this);
745+
} else {
746+
return arg;
747+
}
748+
}).toArray()).getValue();
749+
}
750+
751+
public JPackageCommand validateOutput(CannedFormattedString... str) {
752+
// Will look up the given errors in the order they are specified.
753+
return validateOutput(Stream.of(str)
754+
.map(this::getValue)
755+
.map(TKit::assertTextStream)
756+
.reduce(TKit.TextStreamVerifier::andThen).get());
721757
}
722758

723759
public boolean isWithToolProvider() {
@@ -876,6 +912,9 @@ private static JPackageCommand convertFromRuntime(JPackageCommand cmd) {
876912
copy.immutable = false;
877913
copy.removeArgumentWithValue("--runtime-image");
878914
copy.dmgInstallDir = cmd.appInstallationDirectory();
915+
if (!copy.hasArgument("--name")) {
916+
copy.addArguments("--name", cmd.nameFromRuntimeImage().orElseThrow());
917+
}
879918
return copy;
880919
}
881920

0 commit comments

Comments
 (0)