Skip to content

Commit ac3a045

Browse files
committed
#1802: cleaned up ProjectManagerTest, fixed AppBaseTest to follow new Select-Project-Then-Select-Workspace UI logic (previous commit)
1 parent 9978ce9 commit ac3a045

94 files changed

Lines changed: 67 additions & 470 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

gui/src/test/java/com/devonfw/ide/gui/AppBaseTest.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,29 +75,30 @@ protected static void generateProjectFolderStructure() throws IOException {
7575
* This test ensures that all IDE open buttons are disabled when no project is selected.
7676
*/
7777
@Test
78-
public void testIdeOpenButtonsDisabledWhenNoProjectSelected() {
78+
public void testIdeOpenButtonsDisabledWhenNoWorkspaceSelected() {
7979

8080
// assert that no project is selected
81-
assertThat(selectedProject.getValue()).isNull();
81+
assertThat(selectedWorkspace.getValue()).isNull();
8282

8383
// assert all IDE open buttons are disabled
8484
for (Button button : new Button[] { androidStudioOpen, eclipseOpen, intellijOpen, vsCodeOpen }) {
85-
assertThat(button.isDisabled()).as(button.getId() + " button should be disabled when no project has been selected").isTrue();
85+
assertThat(button.isDisabled()).as(button.getId() + " button should be disabled when no workspace has been selected").isTrue();
8686
}
8787
}
8888

8989
/**
9090
* This test ensures that all IDE open buttons are enabled when a project is selected.
9191
*/
9292
@Test
93-
public void testIdeOpenButtonsEnabledWhenProjectSelected() {
93+
public void testIdeOpenButtonsEnabledWhenWorkspaceSelected() {
9494

95-
// assert that a project is selected
95+
// assert that a project and workspace is selected
9696
interact(() -> selectedProject.getSelectionModel().select("project-1"));
97+
interact(() -> selectedWorkspace.getSelectionModel().select("main"));
9798

98-
// assert all IDE open buttons are disabled
99+
// assert all IDE open buttons are enabled
99100
for (Button button : new Button[] { androidStudioOpen, eclipseOpen, intellijOpen, vsCodeOpen }) {
100-
assertThat(!button.isDisabled()).as(button.getId() + " button should be enabled when a project has been selected").isTrue();
101+
assertThat(button.isDisabled()).as(button.getId() + " button should be enabled when a workspace has been selected").isFalse();
101102
}
102103
}
103104

@@ -118,7 +119,7 @@ public void testWorkspaceComboBoxDisabledWhenNoProjectSelected() {
118119
* Tests that the workspace {@link ComboBox} is enabled when a project is selected.
119120
*/
120121
@Test
121-
public void testWorkspaceComboboxEnabledEnabledWhenProjectSelected() {
122+
public void testWorkspaceComboBoxEnabledEnabledWhenProjectSelected() {
122123

123124
// assert that a project is selected
124125
interact(() -> selectedProject.getSelectionModel().select("project-1"));

gui/src/test/java/com/devonfw/ide/gui/context/ProjectManagerTest.java

Lines changed: 58 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import java.io.IOException;
55
import java.nio.file.Files;
66
import java.nio.file.Path;
7-
import java.nio.file.StandardCopyOption;
7+
import java.util.stream.Stream;
88

9-
import org.apache.commons.io.FileUtils;
109
import org.junit.jupiter.api.BeforeEach;
1110
import org.junit.jupiter.api.Test;
1211
import org.slf4j.Logger;
@@ -35,10 +34,15 @@ void resetContext() {
3534
}
3635

3736
@Test
38-
void testConstructorWithValidDirectory() {
37+
void testProjectManagerFull() {
3938

40-
//No exception should be thrown
4139
projectManager = new ProjectManager(ideRoot);
40+
41+
assertThat(projectManager).isNotNull();
42+
assertThat(projectManager.getProjectNames()).containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5");
43+
for (String projectName : projectManager.getProjectNames()) {
44+
assertThat(projectManager.getWorkspaceNames(projectName)).containsExactlyInAnyOrder("foo-test", "main");
45+
}
4246
}
4347

4448
@Test
@@ -83,214 +87,87 @@ void testConstructorWithFile() throws IOException {
8387
}
8488
}
8589

86-
// ============ readProjects() Tests ============
87-
8890
@Test
89-
void testReadProjectsWithEmptyProjectDirectory() {
91+
void testRefreshProjects() throws IOException {
9092

91-
context = newContext("emptyProjects", "");
9293
projectManager = new ProjectManager(ideRoot);
93-
projectManager.refreshProjects();
94+
assertThat(projectManager.getProjectNames()).containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5");
9495

95-
assertThat(projectManager.getProjectNames()).isEmpty();
96-
}
96+
Path project0 = ideRoot.resolve("project-0");
97+
Path project6 = ideRoot.resolve("project-6");
98+
copyDirectory(project0, project6);
9799

98-
@Test
99-
void testReadProjectsWithValidProjects() {
100+
projectManager.refreshProjects();
100101

101-
projectManager = new ProjectManager(ideRoot);
102+
// Verify that project-6 is now recognized
103+
assertThat(projectManager.getProjectNames()).containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5",
104+
"project-6");
105+
assertThat(projectManager.getWorkspaceNames("project-6")).containsExactlyInAnyOrder("foo-test", "main");
102106

103-
//test folder contains baseProject to project-5
104-
assertThat(projectManager.getProjectNames()).hasSize(6).as("Should have 6 projects")
105-
.containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5");
107+
// Cleanup
108+
deleteDirectory(project6);
106109
}
107110

108111
@Test
109-
void testReadProjectsIgnoresUnderscorePrefixed() throws Exception {
112+
void testReadProjectsExcludesFoldersWithoutWorkspaces() throws IOException {
110113

111-
// Create a project with underscore prefix
112-
Path underscoreProject = ideRoot.resolve("_project");
113-
Files.createDirectories(underscoreProject);
114-
Files.copy(ideRoot.resolve("project-0"), underscoreProject, StandardCopyOption.REPLACE_EXISTING);
114+
// Create a project folder without a workspaces subdirectory
115+
Path testProject = ideRoot.resolve("test-project-no-workspaces");
116+
Files.createDirectory(testProject);
115117

116118
projectManager = new ProjectManager(ideRoot);
117119

118-
// Should not include _project, same as _ide directory should be ignored
119-
assertThat(projectManager.getProjectNames()).doesNotContain("_project").hasSize(6);
120+
// Verify that test-project-no-workspaces is not recognized
121+
assertThat(projectManager.getProjectNames()).doesNotContain("test-project-no-workspaces");
122+
assertThat(projectManager.getProjectNames()).containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5");
120123

121-
//clean up
122-
Files.delete(underscoreProject);
124+
// Cleanup
125+
deleteDirectory(testProject);
123126
}
124127

125128
@Test
126-
void testReadProjectsIgnoresDirectoriesWithoutWorkspacesFolder() {
129+
void testReadProjectsExcludesUnderscorePrefixedFolders() {
127130

128-
context = newContext("noWorkspaces", "projectWithoutWorkspaces");
129131
projectManager = new ProjectManager(ideRoot);
130132

131-
// Should not include projectNoWorkspaces
132-
assertThat(projectManager.getProjectNames()).doesNotContain("projectWithoutWorkspaces");
133+
// Verify that _ide folder is not in the project names
134+
assertThat(projectManager.getProjectNames()).doesNotContain("_ide");
135+
assertThat(projectManager.getProjectNames()).containsExactlyInAnyOrder("project-0", "project-1", "project-2", "project-3", "project-4", "project-5");
133136
}
134137

135-
// ============ readWorkspaces() Tests ============
136-
137-
@Test
138-
void testReadWorkspacesWithMultipleWorkspaces() throws Exception {
139-
140-
Path project = ideRoot.resolve("project-0");
141-
Path workspacesDir = project.resolve("workspaces");
142-
143-
// Create additional workspaces besides existing
144-
Files.createDirectory(workspacesDir.resolve("dev"));
145-
Files.createDirectory(workspacesDir.resolve("prod"));
146-
147-
projectManager = new ProjectManager(ideRoot);
148-
149-
// Should have main, dev, prod workspaces
150-
assertThat(projectManager.getWorkspaceNames("project-0")).hasSize(4)
151-
.containsExactlyInAnyOrder("main", "foo-test", "dev", "prod");
152-
}
153-
154-
@Test
155-
void testReadWorkspacesEmptyWorkspaceDirectory() {
156-
157-
context = newContext("emptyWorkspaceFolders", "project-0");
158-
159-
projectManager = new ProjectManager(ideRoot);
160-
161-
// Should return empty list for empty workspaces directory
162-
assertThat(projectManager.getWorkspaceNames("project-0")).isEmpty();
163-
}
138+
private void copyDirectory(Path source, Path destination) throws IOException {
164139

165-
// ============ refreshProjects() Tests ============
166-
167-
@Test
168-
void testRefreshProjectsClearsExistingData() throws Exception {
169-
170-
projectManager = new ProjectManager(ideRoot);
171-
172-
// Get initial projects
173-
assertThat(projectManager.getProjectNames()).hasSize(6);
174-
175-
// Delete a project
176-
try (var stream = Files.walk(ideRoot.resolve("project-0"))) {
177-
stream.forEach(p -> {
140+
Files.createDirectory(destination);
141+
try (Stream<Path> stream = Files.list(source)) {
142+
stream.forEach(sourcePath -> {
178143
try {
179-
FileUtils.deleteDirectory(p.toFile());
180-
} catch (Exception e) {
181-
fail("Error deleting project for test case: {}", p, e);
144+
if (Files.isDirectory(sourcePath)) {
145+
copyDirectory(sourcePath, destination.resolve(sourcePath.getFileName()));
146+
} else {
147+
Files.copy(sourcePath, destination.resolve(sourcePath.getFileName()));
148+
}
149+
} catch (IOException e) {
150+
throw new RuntimeException("Failed to copy directory", e);
182151
}
183152
});
184153
}
185-
186-
// Refresh should clear old data and reload
187-
projectManager.refreshProjects();
188-
189-
assertThat(projectManager.getProjectNames()).hasSize(5).doesNotContain("project-0");
190-
}
191-
192-
@Test
193-
void testRefreshProjectsReloadsAll() throws Exception {
194-
195-
projectManager = new ProjectManager(ideRoot);
196-
197-
assertThat(projectManager.getProjectNames()).isEmpty();
198-
199-
Path newProject = ideRoot.resolve("newProject");
200-
Files.createDirectories(newProject.resolve("workspaces").resolve("main"));
201-
202-
projectManager.refreshProjects();
203-
204-
assertThat(projectManager.getProjectNames()).hasSize(1).contains("newProject");
205-
206-
//clean up
207-
Files.delete(newProject);
208-
}
209-
210-
@Test
211-
void testGetWorkspaceNamesReturnsValidList() {
212-
213-
projectManager = new ProjectManager(ideRoot);
214-
215-
assertThat(projectManager.getWorkspaceNames("project-0")).containsExactly("foo-test", "main");
216-
}
217-
218-
@Test
219-
void testGetWorkspaceNamesWithInvalidProject() {
220-
221-
projectManager = new ProjectManager(ideRoot);
222-
223-
// Should return null for unknown project
224-
assertThat(projectManager.getWorkspaceNames("unknownProject")).isNull();
225-
}
226-
227-
228-
@Test
229-
void testProjectWithMultipleWorkspaces() throws Exception {
230-
231-
Path project = ideRoot.resolve("project-0");
232-
Path workspacesDir = project.resolve("workspaces");
233-
234-
// Create multiple workspaces
235-
for (String workspace : new String[] { "dev", "test", "staging", "production" }) {
236-
Files.createDirectory(workspacesDir.resolve(workspace));
237-
}
238-
239-
projectManager = new ProjectManager(ideRoot);
240-
241-
// Should have all workspaces including main
242-
assertThat(projectManager.getWorkspaceNames("project-0")).hasSize(5)
243-
.contains("main", "dev", "test", "staging", "production");
244154
}
245155

246-
@Test
247-
void testMultipleProjectsWithWorkspaces() throws Exception {
156+
private void deleteDirectory(Path directory) throws IOException {
248157

249-
// Create different workspace structures for different projects
250-
for (int i = 0; i < 6; i++) {
251-
Path project = ideRoot.resolve("project-" + i);
252-
Path workspacesDir = project.resolve("workspaces");
253-
254-
// Add additional workspaces to each project
255-
for (int j = 1; j <= i; j++) {
256-
Files.createDirectory(workspacesDir.resolve("workspace-" + j));
257-
}
258-
}
259-
260-
projectManager = new ProjectManager(ideRoot);
261-
262-
// Verify each project has correct number of workspaces
263-
for (int i = 0; i < 6; i++) {
264-
String projectName = "project-" + i;
265-
// Each project has "main" + i additional workspaces
266-
assertThat(projectManager.getWorkspaceNames(projectName)).hasSize(i + 1);
158+
try (Stream<Path> stream = Files.list(directory)) {
159+
stream.forEach(path -> {
160+
try {
161+
if (Files.isDirectory(path)) {
162+
deleteDirectory(path);
163+
} else {
164+
Files.delete(path);
165+
}
166+
} catch (IOException e) {
167+
throw new RuntimeException("Failed to delete directory", e);
168+
}
169+
});
267170
}
268-
}
269-
270-
@Test
271-
void testProjectNamesWithSpecialCharacters() throws Exception {
272-
273-
Path specialProject = ideRoot.resolve("project-dash_underscore&");
274-
Files.createDirectories(specialProject.resolve("workspaces").resolve("main"));
275-
276-
projectManager = new ProjectManager(ideRoot);
277-
278-
assertThat(projectManager.getProjectNames()).contains("project-dash_underscore&");
279-
}
280-
281-
@Test
282-
void testWorkspaceNamesWithSpecialCharacters() throws Exception {
283-
284-
Path project = ideRoot.resolve("project-0");
285-
Path workspacesDir = project.resolve("workspaces");
286-
287-
// Create workspaces with special characters
288-
Files.createDirectory(workspacesDir.resolve("dev-environment"));
289-
Files.createDirectory(workspacesDir.resolve("test_workspace"));
290-
291-
projectManager = new ProjectManager(ideRoot);
292-
293-
assertThat(projectManager.getWorkspaceNames("project-0"))
294-
.contains("dev-environment", "test_workspace", "main");
171+
Files.delete(directory);
295172
}
296173
}

gui/src/test/resources/ide-projects/emptyProjects/_ide/bin/ide

Lines changed: 0 additions & 2 deletions
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/software/default/az/az/testVersion/.ide.software.version

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/software/readme

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/urls/java/java/17.0.10/linux_x64.urls

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/urls/java/java/17.0.10/mac_x64.urls

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/urls/java/java/17.0.10/windows_x64.urls

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/urls/java/java/17.0.6/linux_x64.urls

Lines changed: 0 additions & 1 deletion
This file was deleted.

gui/src/test/resources/ide-projects/emptyProjects/_ide/urls/java/java/17.0.6/mac_x64.urls

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)