diff --git a/build.gradle b/build.gradle index 5a4b1827b..995fed46a 100644 --- a/build.gradle +++ b/build.gradle @@ -146,8 +146,7 @@ sourceSets { sourceSets.main.compileClasspath += sourceSets.java9.output.classesDirs; dependencies { - implementation 'dev.jbang:devkitman:0.3.0' - + implementation 'dev.jbang:devkitman:0.3.3.1-SNAPSHOT' implementation 'org.jspecify:jspecify:1.0.0' implementation 'org.apache.commons:commons-text:1.11.0' implementation 'org.apache.commons:commons-compress:1.27.1' diff --git a/src/it/java/dev/jbang/it/BaseIT.java b/src/it/java/dev/jbang/it/BaseIT.java index 6683e73f4..7e439281f 100644 --- a/src/it/java/dev/jbang/it/BaseIT.java +++ b/src/it/java/dev/jbang/it/BaseIT.java @@ -106,7 +106,7 @@ public String toStringOf(Object object) { String javaMajorVersion = System.getenv("_JBANG_TEST_JAVA_VERSION"); if (testJavaHome == null) { - JdkManager jdkMan = JavaUtil.defaultJdkManager(List.of()); + JdkManager jdkMan = JavaUtil.defaultJdkManager(List.of(), List.of()); // if env not avail it is null and will use default jdk // to use same jdk as what tetss run with to make it more // deterministic. diff --git a/src/main/java/dev/jbang/Cache.java b/src/main/java/dev/jbang/Cache.java index f60513ce1..cc8f089db 100644 --- a/src/main/java/dev/jbang/Cache.java +++ b/src/main/java/dev/jbang/Cache.java @@ -30,7 +30,7 @@ public static void clearCache(CacheClass... classes) { // We're running using a managed JDK on Windows so we can't just delete the // entire folder! for (Jdk.InstalledJdk jdk : jdkMan.listInstalledJdks()) { - jdkMan.uninstallJdk(jdk); + jdk.uninstall(); } } if (cc == CacheClass.deps) { diff --git a/src/main/java/dev/jbang/cli/Jdk.java b/src/main/java/dev/jbang/cli/Jdk.java index c46655ade..fe18bf6bc 100644 --- a/src/main/java/dev/jbang/cli/Jdk.java +++ b/src/main/java/dev/jbang/cli/Jdk.java @@ -42,13 +42,13 @@ public Integer install( @CommandLine.Parameters(paramLabel = "existingJdkPath", index = "1", description = "Pre installed JDK path", arity = "0..1") String path) throws IOException { JdkManager jdkMan = jdkProvidersMixin.getJdkManager(); - dev.jbang.devkitman.Jdk jdk = jdkMan.getInstalledJdk(versionOrId, JdkProvider.Predicates.canUpdate); + dev.jbang.devkitman.Jdk jdk = jdkMan.getInstalledJdk(versionOrId, JdkProvider.Predicates.canInstall); if (force || jdk == null) { if (!Util.isNullOrBlankString(path)) { jdkMan.linkToExistingJdk(Paths.get(path), versionOrId); } else { if (jdk == null) { - jdk = jdkMan.getJdk(versionOrId, JdkProvider.Predicates.canUpdate); + jdk = jdkMan.getJdk(versionOrId, JdkProvider.Predicates.canInstall); if (jdk == null) { throw new IllegalArgumentException("JDK is not available for installation: " + versionOrId); } @@ -67,30 +67,42 @@ public Integer install( @CommandLine.Command(name = "list", aliases = "l", description = "Lists installed JDKs.") public Integer list( @CommandLine.Option(names = { - "--available" }, description = "Shows versions available for installation") boolean available, + "--available", "-a" }, description = "Shows versions available for installation") boolean available, @CommandLine.Option(names = { - "--show-details" }, description = "Shows detailed information for each JDK (only when format=text)") boolean details, + "--show-details", "--details", + "-d" }, description = "Shows detailed information for each JDK (only when format=text)") boolean details, @CommandLine.Option(names = { "--format" }, description = "Specify output format ('text' or 'json')") FormatMixin.Format format) { JdkManager jdkMan = jdkProvidersMixin.getJdkManager(); dev.jbang.devkitman.Jdk defaultJdk = jdkMan.getDefaultJdk(); - int defMajorVersion = defaultJdk != null ? defaultJdk.majorVersion() : 0; + String defVersion = defaultJdk != null ? defaultJdk.version() : ""; PrintStream out = System.out; - List jdks; + List jdkOuts; if (available) { - jdks = jdkMan.listAvailableJdks(); + List jdks = jdkMan.listAvailableJdks(); + jdkOuts = jdks.stream() + .map(jdk -> new JdkOut(jdk.id(), jdk.version(), jdk.provider().name(), + null, null, + details ? jdk.equals(defaultJdk) + : jdk.version().equals(defVersion), + jdk.tags())) + .collect(Collectors.toList()); } else { - jdks = jdkMan.listInstalledJdks(); + List jdks = jdkMan.listInstalledJdks(); + jdkOuts = jdks.stream() + .map(jdk -> new JdkOut(jdk.id(), jdk.version(), jdk.provider().name(), + jdk.home(), + jdk instanceof dev.jbang.devkitman.Jdk.LinkedJdk + ? ((dev.jbang.devkitman.Jdk.LinkedJdk) jdk).linked().id() + : null, + details ? jdk.equals(defaultJdk) + : jdk.version().equals(defVersion), + jdk.tags())) + .collect(Collectors.toList()); } - List jdkOuts = jdks.stream() - .map(jdk -> new JdkOut(jdk.id(), jdk.version(), jdk.provider().name(), - jdk.isInstalled() ? ((dev.jbang.devkitman.Jdk.InstalledJdk) jdk).home() : null, - details ? jdk.equals(defaultJdk) - : jdk.majorVersion() == defMajorVersion)) - .collect(Collectors.toList()); if (!details) { - // Only keep a list of unique major versions - Set uniqueJdks = new TreeSet<>(Comparator.comparingInt(j -> j.version)); + // Only keep a list of unique versions + Set uniqueJdks = new TreeSet<>(Comparator.comparingInt(j -> j.version).reversed()); uniqueJdks.addAll(jdkOuts); jdkOuts = new ArrayList<>(uniqueJdks); } @@ -106,12 +118,17 @@ public Integer list( out.print(" "); out.print(jdk.version); out.print(" ("); - out.print(jdk.fullVersion); if (details) { + out.print(jdk.fullVersion); out.print(", " + jdk.providerName + ", " + jdk.id); if (jdk.javaHomeDir != null) { out.print(", " + jdk.javaHomeDir); } + if (!jdk.tags.isEmpty()) { + out.print(", " + jdk.tags); + } + } else { + out.print(available ? jdk.id : jdk.fullVersion); } out.print(")"); if (!available) { @@ -134,20 +151,43 @@ static class JdkOut implements Comparable { String fullVersion; String providerName; String javaHomeDir; + String realHomeDir; + String linkedId; @SerializedName("default") Boolean isDefault; + Set tags; - public JdkOut(String id, String version, String providerName, Path home, boolean isDefault) { + public JdkOut(String id, String version, String providerName, Path home, String linkedId, boolean isDefault, + Set tags) { this.id = id; this.version = JavaUtil.parseJavaVersion(version); this.fullVersion = version; this.providerName = providerName; if (home != null) { this.javaHomeDir = home.toString(); + this.realHomeDir = home.toString(); + try { + this.realHomeDir = home.toRealPath().toString(); + } catch (IOException e) { + // Ignore + } } + this.linkedId = linkedId; if (isDefault) { this.isDefault = true; } + this.tags = tags != null ? trimTags(tags) : Collections.emptySet(); + } + + private Set trimTags(Set tags) { + Set trimmedTags = new HashSet<>(); + for (String tag : tags) { + if (!tag.equalsIgnoreCase("ga") + && !tag.equalsIgnoreCase("jdk")) { + trimmedTags.add(tag.toLowerCase()); + } + } + return trimmedTags; } @Override @@ -162,15 +202,20 @@ public int compareTo(JdkOut o) { @CommandLine.Command(name = "uninstall", aliases = "u", description = "Uninstalls an existing JDK.") public Integer uninstall( - @CommandLine.Parameters(paramLabel = "version", index = "0", description = "The version to install", arity = "1") String versionOrId) { + @CommandLine.Parameters(paramLabel = "versionOrId", index = "0", description = "The version to install", arity = "1") String versionOrId) { JdkManager jdkMan = jdkProvidersMixin.getJdkManager(); + // This will first select for JDKs from providers that can actually install JDKs dev.jbang.devkitman.Jdk.InstalledJdk jdk = jdkMan.getInstalledJdk(versionOrId, - JdkProvider.Predicates.canUpdate); + JdkProvider.Predicates.canInstall); if (jdk == null) { - throw new ExitException(EXIT_INVALID_INPUT, "JDK " + versionOrId + " is not installed"); + // If necessary we select JDKs from providers that can update JDKs + jdk = jdkMan.getInstalledJdk(versionOrId, JdkProvider.Predicates.canUpdate); + if (jdk == null) { + throw new ExitException(EXIT_INVALID_INPUT, "JDK " + versionOrId + " is not installed"); + } } - jdkMan.uninstallJdk(jdk); - Util.infoMsg("Uninstalled JDK:\n " + versionOrId); + jdk.uninstall(); + Util.infoMsg("Uninstalled JDK:\n " + jdk.id()); return EXIT_OK; } @@ -193,7 +238,7 @@ public Integer javaEnv( JdkManager jdkMan = jdkProvidersMixin.getJdkManager(); dev.jbang.devkitman.Jdk jdk = null; if (versionOrId != null && JavaUtil.isRequestedVersion(versionOrId)) { - jdk = jdkMan.getJdk(versionOrId, JdkProvider.Predicates.canUpdate); + jdk = jdkMan.getJdk(versionOrId, JdkProvider.Predicates.canInstall); } if (jdk == null || !jdk.isInstalled()) { jdk = jdkMan.getOrInstallJdk(versionOrId); @@ -273,28 +318,72 @@ public Integer exec( @CommandLine.Command(name = "default", description = "Sets the default JDK to be used by JBang.") public Integer defaultJdk( - @CommandLine.Parameters(paramLabel = "version", index = "0", description = "The version of the JDK to select", arity = "0..1") String versionOrId) { + @CommandLine.Parameters(paramLabel = "versionOrId", index = "0", description = "The version of the JDK to select", arity = "0..1") String versionOrId, + @CommandLine.Option(names = { + "--for-version", + "-v" }, description = "Sets the default for the specified major version") boolean forVersion, + @CommandLine.Option(names = { + "--show-details", "--details", + "-d" }, description = "Shows detailed information for each JDK (only when format=text)") boolean details, + @CommandLine.Option(names = { + "--format" }, description = "Specify output format ('text' or 'json')") FormatMixin.Format format) { JdkManager jdkMan = jdkProvidersMixin.getJdkManager(); if (!jdkMan.hasDefaultProvider()) { Util.warnMsg("Cannot perform operation, the 'default' provider was not found"); return EXIT_INVALID_INPUT; } - dev.jbang.devkitman.Jdk.InstalledJdk defjdk = jdkMan.getDefaultJdk(); if (versionOrId != null) { dev.jbang.devkitman.Jdk.InstalledJdk jdk = jdkMan.getOrInstallJdk(versionOrId); + dev.jbang.devkitman.Jdk.InstalledJdk defjdk = forVersion + ? jdkMan.getDefaultJdkForVersion(jdk.majorVersion()) + : jdkMan.getDefaultJdk(); if (defjdk == null || (!jdk.equals(defjdk) && !Objects.equals(jdk.home(), defjdk.home()))) { - jdkMan.setDefaultJdk(jdk); + if (forVersion) { + jdkMan.setDefaultJdkForVersion(jdk); + } else { + jdkMan.setDefaultJdk(jdk); + } } else { Util.infoMsg("Default JDK already set to " + defjdk.majorVersion()); } } else { - if (defjdk == null) { - Util.infoMsg("No default JDK set, use 'jbang jdk default ' to set one."); + List jdks = jdkMan.listDefaultJdks(); + List jdkOuts = jdks.stream() + .map(jdk -> new JdkOut(jdk.id(), jdk.version(), jdk.provider().name(), jdk.home(), + jdk.linked().id(), jdk.id().equals("default"), jdk.tags())) + .collect(Collectors.toList()); + PrintStream out = System.out; + if (format == FormatMixin.Format.json) { + Gson parser = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create(); + parser.toJson(jdkOuts, out); } else { - Util.infoMsg("Default JDK is currently set to " + defjdk.majorVersion()); + if (!jdkOuts.isEmpty()) { + out.println("Default JDKs:"); + jdkOuts.forEach(jdk -> { + out.print(" "); + if (Boolean.TRUE.equals(jdk.isDefault)) { + out.print("*"); + } else { + out.print(jdk.version); + } + out.print(" -> "); + out.print(jdk.linkedId); + if (details) { + out.print(" (" + jdk.realHomeDir + ", " + jdk.fullVersion + ", " + jdk.id); + if (!jdk.tags.isEmpty()) { + out.print(", " + jdk.tags); + } + out.print(")"); + } else { + out.print(" (" + jdk.fullVersion + ")"); + } + out.println(); + }); + } else { + out.println("No default JDK set, use 'jbang jdk default ' to set one."); + } } } return EXIT_OK; } - } diff --git a/src/main/java/dev/jbang/cli/JdkProvidersMixin.java b/src/main/java/dev/jbang/cli/JdkProvidersMixin.java index 613bf3cea..6e6ba32d5 100644 --- a/src/main/java/dev/jbang/cli/JdkProvidersMixin.java +++ b/src/main/java/dev/jbang/cli/JdkProvidersMixin.java @@ -11,14 +11,18 @@ public class JdkProvidersMixin { @CommandLine.Option(names = { - "--jdk-providers" }, description = "Use the given providers to check for installed JDKs", split = ",", hidden = true) + "--jdk-providers" }, description = "Use the given providers to manage JDKs", split = ",", hidden = true) List jdkProviders; + @CommandLine.Option(names = { + "--jdk-vendors" }, description = "Use the given vendors/distributions to install new JDKs", split = ",", hidden = true) + List jdkVendors; + private JdkManager jdkMan; protected JdkManager getJdkManager() { if (jdkMan == null) { - jdkMan = JavaUtil.defaultJdkManager(jdkProviders); + jdkMan = JavaUtil.defaultJdkManager(jdkProviders, jdkVendors); } return jdkMan; } @@ -31,6 +35,12 @@ public List opts() { opts.add(p); } } + if (jdkVendors != null) { + for (String v : jdkVendors) { + opts.add("--jdk-vendors"); + opts.add(v); + } + } return opts; } } diff --git a/src/main/java/dev/jbang/util/JavaUtil.java b/src/main/java/dev/jbang/util/JavaUtil.java index 4e4c7078f..8468b64dc 100644 --- a/src/main/java/dev/jbang/util/JavaUtil.java +++ b/src/main/java/dev/jbang/util/JavaUtil.java @@ -33,28 +33,30 @@ public static boolean inNativeImage() { @NonNull public static JdkManager defaultJdkManager(String... names) { - return defaultJdkManager(names != null ? Arrays.asList(names) : null); + return defaultJdkManager(names != null ? Arrays.asList(names) : null, null); } @NonNull - public static JdkManager defaultJdkManager(List names) { + public static JdkManager defaultJdkManager(List providers, List vendors) { return (new JdkManBuilder()) - .provider(names) + .provider(providers) + .vendor(vendors) .defaultJavaVersion(Settings.getDefaultJavaVersion()) .build(); } public static class JdkManBuilder extends JdkManager.Builder { private final Set providerNames = new LinkedHashSet<>(); + private final Set vendorNames = new LinkedHashSet<>(); public static final List PROVIDERS_ALL = JdkProviders.instance().allNames(); public static final List PROVIDERS_DEFAULT = JdkProviders.instance().basicNames(); - public JdkManager.Builder provider(String... names) { + public JdkManBuilder provider(String... names) { return provider(names != null ? Arrays.asList(names) : null); } - public JdkManager.Builder provider(List names) { + public JdkManBuilder provider(List names) { if (names != null) { for (String providerName : names) { if (providerName.equals("all")) { @@ -69,6 +71,17 @@ public JdkManager.Builder provider(List names) { return this; } + public JdkManBuilder vendor(String... names) { + return vendor(names != null ? Arrays.asList(names) : null); + } + + public JdkManBuilder vendor(List names) { + if (names != null) { + vendorNames.addAll(names); + } + return this; + } + public JdkManager build() { if (providerNames.isEmpty() && providers.isEmpty()) { Util.verboseMsg("No JDK providers specified, using default providers"); @@ -88,7 +101,7 @@ public JdkManager build() { } - if (providers.size() == 0) { + if (providers.isEmpty()) { Util.warnMsg("No JDK providers selected or available. Run with --verbose for more details."); Util.verboseMsg("Available JDK providers: " + PROVIDERS_ALL); } @@ -99,13 +112,19 @@ private JdkProvider createProvider(String providerName) { JdkProvider provider; switch (providerName) { case "default": - provider = new DefaultJdkProvider(Settings.getDefaultJdkDir()); + provider = new DefaultJdkProvider(Settings.getDefaultJdkDir(), + Settings.getCacheDir(Cache.CacheClass.jdks)); break; case "jbang": JBangJdkProvider p = new JBangJdkProvider(); - p.installer(new FoojayJdkInstaller(p, p::jdkId) - .distro(Util.getVendor()) - .remoteAccessProvider(new JBangRemoteAccessProvider())); + String distro = Util.getVendor(); + if (!vendorNames.isEmpty()) { + distro = String.join(",", vendorNames); + } + FoojayJdkInstaller installer = new FoojayJdkInstaller(p) + .distro(distro) + .remoteAccessProvider(new JBangRemoteAccessProvider()); + p.installer(installer); provider = p; break; default: diff --git a/src/test/java/dev/jbang/cli/TestJdk.java b/src/test/java/dev/jbang/cli/TestJdk.java index 7a0af206e..fc7a5845f 100644 --- a/src/test/java/dev/jbang/cli/TestJdk.java +++ b/src/test/java/dev/jbang/cli/TestJdk.java @@ -53,7 +53,7 @@ void testHasJdksInstalled() throws Exception { assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedOut(), - equalTo("Installed JDKs (<=default):\n 11 (11.0.7) <\n 12 (12.0.7)\n 13 (13.0.7)\n")); + equalTo("Installed JDKs (<=default):\n 13 (13.0.7)\n 12 (12.0.7)\n 11 (11.0.7) <\n")); } @Test @@ -70,7 +70,7 @@ void testHasJdksInstalledWithJavaHome() throws Exception { assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedOut(), - equalTo("Installed JDKs (<=default):\n 11 (11.0.7) <\n 12 (12.0.7)\n 13 (13.0.7)\n")); + equalTo("Installed JDKs (<=default):\n 13 (13.0.7)\n 12 (12.0.7)\n 11 (11.0.7) <\n")); } @Test @@ -86,30 +86,30 @@ void testJdksAvailable() throws Exception { void testDefault() throws Exception { Arrays.asList(11, 12, 13).forEach(this::createMockJdk); - CaptureResult result = checkedRun(jdk -> jdk.defaultJdk("12")); + CaptureResult result = checkedRun(jdk -> jdk.defaultJdk("12", false, false, FormatMixin.Format.text)); assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 12")); - result = checkedRun(jdk -> jdk.defaultJdk(null)); + result = checkedRun(jdk -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text)); assertThat(result.result, equalTo(SUCCESS_EXIT)); - assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 12\n")); + assertThat(result.normalizedOut(), containsString("* -> 12-jbang")); } @Test void testDefaultPlus() throws Exception { Arrays.asList(11, 14, 17).forEach(this::createMockJdk); - CaptureResult result = checkedRun(jdk -> jdk.defaultJdk("16+")); + CaptureResult result = checkedRun(jdk -> jdk.defaultJdk("16+", false, false, FormatMixin.Format.text)); assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 17")); - result = checkedRun(jdk -> jdk.defaultJdk(null)); + result = checkedRun(jdk -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text)); assertThat(result.result, equalTo(SUCCESS_EXIT)); - assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 17\n")); + assertThat(result.normalizedOut(), containsString("* -> 17-jbang")); } @Test @@ -233,16 +233,18 @@ void testDefaultWithJavaHome() throws Exception { initMockJdkDir(jdkPath, "12.0.7"); environmentVariables.set("JAVA_HOME", jdkPath.toString()); - CaptureResult result = checkedRun((Jdk jdk) -> jdk.defaultJdk("12"), "jdk", "--jdk-providers", - "default,javahome,jbang"); + CaptureResult result = checkedRun( + (Jdk jdk) -> jdk.defaultJdk("12", false, false, FormatMixin.Format.text), + "jdk", "--jdk-providers", "default,javahome,jbang"); assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 12")); - result = checkedRun(jdk -> jdk.defaultJdk(null)); + result = checkedRun((Jdk jdk) -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text), + "jdk", "--jdk-providers", "default,javahome,jbang"); assertThat(result.result, equalTo(SUCCESS_EXIT)); - assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 12\n")); + assertThat(result.normalizedOut(), containsString("* -> javahome")); } @Test @@ -277,10 +279,9 @@ void testJdkInstallWithLinkingToExistingJdkPathWhenJBangManagedVersionDoesNotExi assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), - equalTo("[jbang] JDK 11 has been linked to: " + javaDir.toPath() + "\n")); - assertTrue(Util.isLink(jdkPath.resolve("11"))); - System.err.println("ASSERT: " + javaDir.toPath() + " - " + jdkPath.resolve("11").toRealPath()); - assertTrue(Files.isSameFile(javaDir.toPath(), jdkPath.resolve("11").toRealPath())); + equalTo("[jbang] JDK 11-linked has been linked to: " + javaDir.toPath() + "\n")); + assertTrue(Util.isLink(jdkPath.resolve("11-linked"))); + assertTrue(Files.isSameFile(javaDir.toPath(), jdkPath.resolve("11-linked").toRealPath())); } @Test @@ -293,7 +294,7 @@ void testJdkInstallWithLinkingToExistingJdkPathWhenJBangManagedVersionExistsAndI CaptureResult result = checkedRun(jdk -> { try { - return jdk.install(true, "11", javaDir.toPath().toString()); + return jdk.install(true, "my11", javaDir.toPath().toString()); } catch (IOException e) { // Escaping with a runtime exception throw new RuntimeException(e); @@ -302,9 +303,9 @@ void testJdkInstallWithLinkingToExistingJdkPathWhenJBangManagedVersionExistsAndI assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), - equalTo("[jbang] JDK 11 has been linked to: " + javaDir.toPath().toString() + "\n")); - assertTrue(Util.isLink(jdkPath.resolve("11"))); - assertTrue(Files.isSameFile(javaDir.toPath(), jdkPath.resolve("11").toRealPath())); + equalTo("[jbang] JDK my11-linked has been linked to: " + javaDir.toPath().toString() + "\n")); + assertTrue(Util.isLink(jdkPath.resolve("my11-linked"))); + assertTrue(Files.isSameFile(javaDir.toPath(), jdkPath.resolve("my11-linked").toRealPath())); } @Test @@ -361,7 +362,7 @@ void testJdkInstallWithLinkingToExistingBrokenLink( result = checkedRun(jdk -> { try { - return jdk.install(true, "11", jdkOk.toString()); + return jdk.install(true, "my11", jdkOk.toString()); } catch (IOException e) { // Escaping with a runtime exception throw new RuntimeException(e); @@ -370,9 +371,9 @@ void testJdkInstallWithLinkingToExistingBrokenLink( assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), - equalTo("[jbang] JDK 11 has been linked to: " + jdkOk + "\n")); - assertTrue(Util.isLink(jdkPath.resolve("11"))); - assertTrue(Files.isSameFile(jdkOk, (jdkPath.resolve("11").toRealPath()))); + equalTo("[jbang] JDK my11-linked has been linked to: " + jdkOk + "\n")); + assertTrue(Util.isLink(jdkPath.resolve("my11-linked"))); + assertTrue(Files.isSameFile(jdkOk, (jdkPath.resolve("my11-linked").toRealPath()))); } @Test @@ -384,7 +385,9 @@ void testExistingJdkUninstall() throws Exception { assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), - containsString("[jbang] Default JDK unset")); + containsString("[jbang] Global default JDK unset")); + assertThat(result.normalizedErr(), + containsString("[jbang] Versioned default JDK unset")); assertThat(result.normalizedErr(), containsString("[jbang] Uninstalled JDK:\n " + jdkVersion)); } @@ -402,7 +405,9 @@ void testExistingJdkUninstallWithJavaHome() throws Exception { assertThat(result.result, equalTo(SUCCESS_EXIT)); assertThat(result.normalizedErr(), - containsString("[jbang] Default JDK unset")); + containsString("[jbang] Global default JDK unset")); + assertThat(result.normalizedErr(), + containsString("[jbang] Versioned default JDK unset")); assertThat(result.normalizedErr(), containsString("[jbang] Uninstalled JDK:\n " + jdkVersion)); }