From 1f6a80077977e4c1834ce96ad748412d0a637771 Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Mon, 20 Jul 2026 15:26:55 +0200 Subject: [PATCH 1/6] #2172: add getIdeMetadataPath() for $IDE_HOME/.ide// --- .../tools/ide/tool/ide/IdeToolCommandlet.java | 11 +++++++++++ .../ide/tool/ide/IdeToolCommandletTest.java | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandlet.java b/cli/src/main/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandlet.java index 6f0256c581..b6da5b4cbb 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandlet.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandlet.java @@ -70,6 +70,17 @@ public ToolInstallation install(ToolInstallRequest request) { return super.install(request); } + /** + * @return the {@link Path} to the IDE-specific metadata folder for the {@link IdeContext#getWorkspaceName() current workspace}, located at + * {@code $IDE_HOME/.ide/«ide»/«workspace»}. Unlike {@link IdeContext#getWorkspacePath() the workspace path} (which holds the projects to open), this + * folder keeps IDE-specific metadata (e.g. {@code .vmoptions} or {@code *.properties} files) out of the workspace so it stays clean and independent of + * the IDE being used. + */ + protected Path getIdeMetadataPath() { + + return this.context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve(getName()).resolve(this.context.getWorkspaceName()); + } + /** * Configure (initialize or update) the workspace for this IDE using the templates from the settings. */ diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandletTest.java index 3b9f1773c2..ff45f9a690 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/ide/IdeToolCommandletTest.java @@ -28,4 +28,20 @@ void testConfigureWorkspace() { assertThat(workspace.resolve(".intellij/config/idea.key")).exists(); assertThat(workspace.resolve("user.properties")).exists().content().contains("ijversion=2023.3.3"); } + + /** + * Tests that {@link IdeToolCommandlet#getIdeMetadataPath()} resolves to {@code $IDE_HOME/.ide/«ide»/«workspace»} instead of the workspace itself. + */ + @Test + void testGetIdeMetadataPath() { + // arrange + IdeContext context = newContext("intellij"); + IdeToolCommandlet ide = context.getCommandletManager().getCommandlet(Intellij.class); + // act + Path metadataPath = ide.getIdeMetadataPath(); + // assert + assertThat(metadataPath).startsWithRaw(context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE)); + assertThat(metadataPath).endsWithRaw(Path.of("intellij", context.getWorkspaceName())); + assertThat(metadataPath).isNotEqualTo(context.getWorkspacePath()); + } } From caa73a558f61a5299c20b37ebb6015dbf27f736d Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Mon, 20 Jul 2026 15:28:43 +0200 Subject: [PATCH 2/6] #2142: add changelog entry for moving IDE metadata out of workspace --- CHANGELOG.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 93d7c87e62..e94499935f 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -6,6 +6,7 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE Release with new features and bugfixes: +* https://github.com/devonfw/IDEasy/issues/2142[#2142]: Move IDE-specific metadata (.idea, .vscode) out of workspace * https://github.com/devonfw/IDEasy/issues/1982[#1982]: Modified fallback link creation on Windows * https://github.com/devonfw/IDEasy/issues/2140[#2140]: just install fails since already installed * https://github.com/devonfw/IDEasy/issues/2137[#2137]: fix-vpn-tls-problem does not detect TLS certificate issues behind HTTP redirects From d2a156085ba81eba0fc88103465b252aad3bb8cb Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Mon, 20 Jul 2026 15:54:29 +0200 Subject: [PATCH 3/6] #2174: store VSCode user-data under $IDE_HOME/.ide/vscode//config + migration --- .../tools/ide/migration/IdeMigrator.java | 3 +- .../ide/migration/v2026/Mig202608001.java | 46 ++++++++++++++++ .../devonfw/tools/ide/tool/vscode/Vscode.java | 2 +- .../ide/migration/v2026/Mig202608001Test.java | 52 +++++++++++++++++++ .../tools/ide/tool/vscode/VscodeTest.java | 41 +++++++++++++++ 5 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java create mode 100644 cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java diff --git a/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java b/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java index a79d56afb4..20f2ec208b 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java +++ b/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java @@ -9,6 +9,7 @@ import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.migration.v2025.Mig202502001; import com.devonfw.tools.ide.migration.v2025.Mig202510001; +import com.devonfw.tools.ide.migration.v2026.Mig202608001; import com.devonfw.tools.ide.step.Step; import com.devonfw.tools.ide.version.IdeVersion; import com.devonfw.tools.ide.version.VersionIdentifier; @@ -31,7 +32,7 @@ public class IdeMigrator implements IdeMigration { public IdeMigrator() { // migrations must be strictly in ascending order (from oldest to newest version) - this(List.of(new Mig202502001(), new Mig202510001())); + this(List.of(new Mig202502001(), new Mig202510001(), new Mig202608001())); } /** diff --git a/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java new file mode 100644 index 0000000000..0d472c53f4 --- /dev/null +++ b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java @@ -0,0 +1,46 @@ +package com.devonfw.tools.ide.migration.v2026; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import com.devonfw.tools.ide.context.IdeContext; +import com.devonfw.tools.ide.io.FileAccess; +import com.devonfw.tools.ide.migration.IdeVersionMigration; + +/** + * Migration to 2026.08.001. Moves the VSCode user-data folder ({@code .vscode/.userdata}) out of each workspace into the dedicated + * {@code $IDE_HOME/.ide/vscode/«workspace»/config} folder so workspaces stay clean and independent of the IDE being used. See + * #2142. + */ +public class Mig202608001 extends IdeVersionMigration { + + /** + * The constructor. + */ + public Mig202608001() { + + super("2026.08.001"); + } + + @Override + public void run(IdeContext context) { + + Path workspacesPath = context.getWorkspacesBasePath(); + if (workspacesPath == null) { + return; + } + FileAccess fileAccess = context.getFileAccess(); + Path vscodeMetaPath = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode"); + List workspaces = fileAccess.listChildren(workspacesPath, Files::isDirectory); + for (Path workspace : workspaces) { + Path oldUserData = workspace.resolve(".vscode").resolve(".userdata"); + if (fileAccess.isExpectedFolder(oldUserData)) { + Path target = vscodeMetaPath.resolve(workspace.getFileName().toString()).resolve("config"); + fileAccess.mkdirs(target.getParent()); + fileAccess.move(oldUserData, target); + } + } + } + +} diff --git a/cli/src/main/java/com/devonfw/tools/ide/tool/vscode/Vscode.java b/cli/src/main/java/com/devonfw/tools/ide/tool/vscode/Vscode.java index e393539436..216d09a117 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/tool/vscode/Vscode.java +++ b/cli/src/main/java/com/devonfw/tools/ide/tool/vscode/Vscode.java @@ -98,7 +98,7 @@ protected void configureToolArgs(ProcessContext pc, ProcessMode processMode, Lis if (this.context.getSystemInfo().isWsl()) { pc.withEnvVar("DONT_PROMPT_WSL_INSTALL", "1"); } - Path vsCodeConf = this.context.getWorkspacePath().resolve(".vscode/.userdata"); + Path vsCodeConf = getIdeMetadataPath().resolve("config"); pc.addArg("--new-window"); pc.addArg("--user-data-dir=" + vsCodeConf); Path vsCodeExtensionFolder = this.context.getIdeHome().resolve("plugins/vscode"); diff --git a/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java new file mode 100644 index 0000000000..53f6b8975b --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java @@ -0,0 +1,52 @@ +package com.devonfw.tools.ide.migration.v2026; + +import java.nio.file.Path; + +import org.junit.jupiter.api.Test; + +import com.devonfw.tools.ide.context.AbstractIdeContextTest; +import com.devonfw.tools.ide.context.IdeContext; +import com.devonfw.tools.ide.context.IdeTestContext; +import com.devonfw.tools.ide.io.FileAccess; + +/** + * Test of {@link Mig202608001}. + */ +class Mig202608001Test extends AbstractIdeContextTest { + + /** + * Tests that an existing {@code .vscode/.userdata} folder is moved out of the workspace into {@code $IDE_HOME/.ide/vscode/«workspace»/config}. + */ + @Test + void testMovesVscodeUserDataOutOfWorkspace() { + + // arrange + IdeTestContext context = newContext("vscode"); + FileAccess fileAccess = context.getFileAccess(); + Path workspace = context.getWorkspacePath(); + Path oldUserData = workspace.resolve(".vscode").resolve(".userdata"); + fileAccess.mkdirs(oldUserData); + fileAccess.writeFileContent("dummy", oldUserData.resolve("state.json")); + // act + new Mig202608001().run(context); + // assert + Path newConfig = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode").resolve(context.getWorkspaceName()).resolve("config"); + assertThat(newConfig.resolve("state.json")).exists().hasContent("dummy"); + assertThat(oldUserData).doesNotExist(); + } + + /** + * Tests that the migration is a no-op (and does not fail) when no {@code .vscode/.userdata} folder exists. + */ + @Test + void testDoesNothingWhenNoUserData() { + + // arrange + IdeTestContext context = newContext("vscode"); + Path vscodeMeta = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode"); + // act + new Mig202608001().run(context); + // assert + assertThat(vscodeMeta).doesNotExist(); + } +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java index 1274b9b3dd..19bb65ebc2 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java @@ -9,6 +9,7 @@ import org.junit.jupiter.api.Test; import com.devonfw.tools.ide.context.AbstractIdeContextTest; +import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.context.ProcessContextTestImpl; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -150,6 +151,26 @@ void testConfigureToolArgsDoesNotSetWslEnvVarOnNonWsl() { assertThat(pc.getEnvVar("DONT_PROMPT_WSL_INSTALL")).isNull(); } + /** + * Tests that {@link Vscode#configureToolArgs(ProcessContext, ProcessMode, List)} points {@code --user-data-dir} to the IDE metadata folder + * ({@code $IDE_HOME/.ide/vscode/«workspace»/config}) instead of a {@code .vscode} folder inside the workspace. + */ + @Test + void testConfigureToolArgsUsesIdeMetadataPathForUserData() { + + // arrange + IdeTestContext context = newContext(PROJECT_VSCODE); + context.setSystemInfo(SystemInfoMock.LINUX_X64); + Vscode commandlet = new Vscode(context); + ArgCapturingProcessContext pc = new ArgCapturingProcessContext(context); + // act + commandlet.configureToolArgs(pc, ProcessMode.DEFAULT, List.of()); + // assert + Path expectedUserData = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode").resolve(context.getWorkspaceName()).resolve("config"); + assertThat(pc.capturedArgs).contains("--user-data-dir=" + expectedUserData); + assertThat(pc.capturedArgs).noneMatch(arg -> arg.contains(".vscode")); + } + @Test void testVscodiumInstall() { @@ -258,6 +279,26 @@ String getEnvVar(String key) { } } + /** + * {@link ProcessContextTestImpl} subclass that captures the CLI arguments added via {@link #addArg(String)} for test assertions. + */ + private static class ArgCapturingProcessContext extends ProcessContextTestImpl { + + private final List capturedArgs = new ArrayList<>(); + + private ArgCapturingProcessContext(IdeTestContext context) { + + super(context); + } + + @Override + public ProcessContext addArg(String arg) { + + this.capturedArgs.add(arg); + return super.addArg(arg); + } + } + private void checkVscodiumInstallation(IdeTestContext context) { assertThat(context.getSoftwarePath().resolve("vscode/bin/codium.cmd")).exists().hasContent("@echo test for windows"); From f88f5b1c05df1c0138439c6a3d4750e566d51417 Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Wed, 22 Jul 2026 09:32:06 +0200 Subject: [PATCH 4/6] #2174: make VSCode user-data migration idempotent (skip when target exists) --- .../ide/migration/v2026/Mig202608001.java | 9 ++++++++ .../ide/migration/v2026/Mig202608001Test.java | 22 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java index 0d472c53f4..eca239f219 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java +++ b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java @@ -4,6 +4,9 @@ import java.nio.file.Path; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.io.FileAccess; import com.devonfw.tools.ide.migration.IdeVersionMigration; @@ -15,6 +18,8 @@ */ public class Mig202608001 extends IdeVersionMigration { + private static final Logger LOG = LoggerFactory.getLogger(Mig202608001.class); + /** * The constructor. */ @@ -37,6 +42,10 @@ public void run(IdeContext context) { Path oldUserData = workspace.resolve(".vscode").resolve(".userdata"); if (fileAccess.isExpectedFolder(oldUserData)) { Path target = vscodeMetaPath.resolve(workspace.getFileName().toString()).resolve("config"); + if (Files.exists(target)) { + LOG.warn("Skipping migration of {} since target already exists: {}", oldUserData, target); + continue; + } fileAccess.mkdirs(target.getParent()); fileAccess.move(oldUserData, target); } diff --git a/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java index 53f6b8975b..9870375814 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java +++ b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java @@ -49,4 +49,26 @@ void testDoesNothingWhenNoUserData() { // assert assertThat(vscodeMeta).doesNotExist(); } + + /** + * Tests that the migration skips a workspace whose target folder already exists, without failing and without overwriting the existing data. + */ + @Test + void testSkipsWhenTargetAlreadyExists() { + + // arrange + IdeTestContext context = newContext("vscode"); + FileAccess fileAccess = context.getFileAccess(); + Path oldUserData = context.getWorkspacePath().resolve(".vscode").resolve(".userdata"); + fileAccess.mkdirs(oldUserData); + fileAccess.writeFileContent("old", oldUserData.resolve("state.json")); + Path target = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode").resolve(context.getWorkspaceName()).resolve("config"); + fileAccess.mkdirs(target); + fileAccess.writeFileContent("new", target.resolve("state.json")); + // act + new Mig202608001().run(context); + // assert + assertThat(oldUserData).exists(); + assertThat(target.resolve("state.json")).exists().hasContent("new"); + } } From 2842074f337db4ca0064ff31bdef4f40e22dc18f Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Wed, 22 Jul 2026 13:42:37 +0200 Subject: [PATCH 5/6] docs: changelog --- CHANGELOG.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 89dd725f51..c337d1a9ef 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -7,6 +7,8 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE Release with new features and bugfixes: * https://github.com/devonfw/IDEasy/issues/2100[#2100]: Fix Python not available for Mac x64 +* https://github.com/devonfw/IDEasy/issues/2142[#2142]: Move IDE-specific metadata (.idea, .vscode) out of workspace + The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/48?closed=1[milestone 2026.08.001]. @@ -14,7 +16,6 @@ The full list of changes for this release can be found in https://github.com/dev Release with new features and bugfixes: -* https://github.com/devonfw/IDEasy/issues/2142[#2142]: Move IDE-specific metadata (.idea, .vscode) out of workspace * https://github.com/devonfw/IDEasy/issues/2102[#2102]: IDE_ROOT environment variable is not available to ideasy.exe during MSI installation * https://github.com/devonfw/IDEasy/issues/1594[#1594]: Add release commandlet * https://github.com/devonfw/IDEasy/issues/1982[#1982]: Modified fallback link creation on Windows From b432f9e6a1e84f22a733503579dd5e7795d04b03 Mon Sep 17 00:00:00 2001 From: Hieu Do Date: Wed, 2 Sep 2026 09:56:42 +0200 Subject: [PATCH 6/6] #2174: fix VscodeTest compile error and set migration version to 2026.09.002 --- .../com/devonfw/tools/ide/migration/IdeMigrator.java | 4 ++-- .../v2026/{Mig202608001.java => Mig202609002.java} | 10 +++++----- .../{Mig202608001Test.java => Mig202609002Test.java} | 10 +++++----- .../com/devonfw/tools/ide/tool/vscode/VscodeTest.java | 4 ++++ 4 files changed, 16 insertions(+), 12 deletions(-) rename cli/src/main/java/com/devonfw/tools/ide/migration/v2026/{Mig202608001.java => Mig202609002.java} (89%) rename cli/src/test/java/com/devonfw/tools/ide/migration/v2026/{Mig202608001Test.java => Mig202609002Test.java} (92%) diff --git a/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java b/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java index 20f2ec208b..23958c07ba 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java +++ b/cli/src/main/java/com/devonfw/tools/ide/migration/IdeMigrator.java @@ -9,7 +9,7 @@ import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.migration.v2025.Mig202502001; import com.devonfw.tools.ide.migration.v2025.Mig202510001; -import com.devonfw.tools.ide.migration.v2026.Mig202608001; +import com.devonfw.tools.ide.migration.v2026.Mig202609002; import com.devonfw.tools.ide.step.Step; import com.devonfw.tools.ide.version.IdeVersion; import com.devonfw.tools.ide.version.VersionIdentifier; @@ -32,7 +32,7 @@ public class IdeMigrator implements IdeMigration { public IdeMigrator() { // migrations must be strictly in ascending order (from oldest to newest version) - this(List.of(new Mig202502001(), new Mig202510001(), new Mig202608001())); + this(List.of(new Mig202502001(), new Mig202510001(), new Mig202609002())); } /** diff --git a/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202609002.java similarity index 89% rename from cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java rename to cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202609002.java index eca239f219..d190ecdc76 100644 --- a/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202608001.java +++ b/cli/src/main/java/com/devonfw/tools/ide/migration/v2026/Mig202609002.java @@ -12,20 +12,20 @@ import com.devonfw.tools.ide.migration.IdeVersionMigration; /** - * Migration to 2026.08.001. Moves the VSCode user-data folder ({@code .vscode/.userdata}) out of each workspace into the dedicated + * Migration to 2026.09.002. Moves the VSCode user-data folder ({@code .vscode/.userdata}) out of each workspace into the dedicated * {@code $IDE_HOME/.ide/vscode/«workspace»/config} folder so workspaces stay clean and independent of the IDE being used. See * #2142. */ -public class Mig202608001 extends IdeVersionMigration { +public class Mig202609002 extends IdeVersionMigration { - private static final Logger LOG = LoggerFactory.getLogger(Mig202608001.class); + private static final Logger LOG = LoggerFactory.getLogger(Mig202609002.class); /** * The constructor. */ - public Mig202608001() { + public Mig202609002() { - super("2026.08.001"); + super("2026.09.002"); } @Override diff --git a/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202609002Test.java similarity index 92% rename from cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java rename to cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202609002Test.java index 9870375814..b5c833535d 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202608001Test.java +++ b/cli/src/test/java/com/devonfw/tools/ide/migration/v2026/Mig202609002Test.java @@ -10,9 +10,9 @@ import com.devonfw.tools.ide.io.FileAccess; /** - * Test of {@link Mig202608001}. + * Test of {@link Mig202609002}. */ -class Mig202608001Test extends AbstractIdeContextTest { +class Mig202609002Test extends AbstractIdeContextTest { /** * Tests that an existing {@code .vscode/.userdata} folder is moved out of the workspace into {@code $IDE_HOME/.ide/vscode/«workspace»/config}. @@ -28,7 +28,7 @@ void testMovesVscodeUserDataOutOfWorkspace() { fileAccess.mkdirs(oldUserData); fileAccess.writeFileContent("dummy", oldUserData.resolve("state.json")); // act - new Mig202608001().run(context); + new Mig202609002().run(context); // assert Path newConfig = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode").resolve(context.getWorkspaceName()).resolve("config"); assertThat(newConfig.resolve("state.json")).exists().hasContent("dummy"); @@ -45,7 +45,7 @@ void testDoesNothingWhenNoUserData() { IdeTestContext context = newContext("vscode"); Path vscodeMeta = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode"); // act - new Mig202608001().run(context); + new Mig202609002().run(context); // assert assertThat(vscodeMeta).doesNotExist(); } @@ -66,7 +66,7 @@ void testSkipsWhenTargetAlreadyExists() { fileAccess.mkdirs(target); fileAccess.writeFileContent("new", target.resolve("state.json")); // act - new Mig202608001().run(context); + new Mig202609002().run(context); // assert assertThat(oldUserData).exists(); assertThat(target.resolve("state.json")).exists().hasContent("new"); diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java index 67ec79c670..c6ecaada29 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/vscode/VscodeTest.java @@ -1,5 +1,6 @@ package com.devonfw.tools.ide.tool.vscode; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -171,6 +172,9 @@ void testConfigureToolArgsUsesIdeMetadataPathForUserData() { Path expectedUserData = context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE).resolve("vscode").resolve(context.getWorkspaceName()).resolve("config"); assertThat(pc.capturedArgs).contains("--user-data-dir=" + expectedUserData); assertThat(pc.capturedArgs).noneMatch(arg -> arg.contains(".vscode")); + } + + /** * Tests that {@code VSCODE_OPTIONS} is honoured by appending its tokens as additional command-line arguments when starting the IDE (analogue to the * global {@code IDE_OPTIONS} used for IDEasy itself, see issue #788). */