Skip to content

Commit 7eac0d7

Browse files
authored
fix: make WorkspaceFoldersTest more predictable (#1268)
1 parent c079425 commit 7eac0d7

1 file changed

Lines changed: 27 additions & 40 deletions

File tree

org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/WorkspaceFoldersTest.java

Lines changed: 27 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@
1313
package org.eclipse.lsp4e.test;
1414

1515
import static org.eclipse.lsp4e.test.utils.TestUtils.waitForAndAssertCondition;
16-
import static org.junit.Assert.*;
16+
import static org.junit.Assert.assertTrue;
1717

18-
import java.io.File;
1918
import java.net.URI;
19+
import java.nio.file.Paths;
2020
import java.util.Collection;
21-
import java.util.List;
2221

2322
import org.eclipse.core.resources.IFile;
2423
import org.eclipse.core.runtime.NullProgressMonitor;
@@ -29,11 +28,8 @@
2928
import org.eclipse.lsp4e.test.utils.TestUtils;
3029
import org.eclipse.lsp4e.test.utils.TestUtils.JobSynchronizer;
3130
import org.eclipse.lsp4e.tests.mock.MockLanguageServer;
32-
import org.eclipse.lsp4e.tests.mock.MockWorkspaceService;
3331
import org.eclipse.lsp4e.ui.UI;
34-
import org.eclipse.lsp4j.DidChangeWorkspaceFoldersParams;
3532
import org.eclipse.lsp4j.ServerCapabilities;
36-
import org.eclipse.lsp4j.WorkspaceFolder;
3733
import org.eclipse.lsp4j.WorkspaceFoldersOptions;
3834
import org.eclipse.lsp4j.WorkspaceServerCapabilities;
3935
import org.junit.Before;
@@ -92,12 +88,12 @@ public void testPojectCreate() throws Exception {
9288
UI.getActivePage().closeAllEditors(false);
9389
waitForAndAssertCondition(5_000, () -> !MockLanguageServer.INSTANCE.isRunning());
9490

95-
final MockWorkspaceService mockWorkspaceService = MockLanguageServer.INSTANCE.getWorkspaceService();
96-
final List<DidChangeWorkspaceFoldersParams> events = mockWorkspaceService.getWorkspaceFoldersEvents();
97-
assertEquals(1, events.size());
98-
final List<WorkspaceFolder> added = events.get(0).getEvent().getAdded();
99-
assertEquals(1, added.size());
100-
assertEquals(new File(project.getLocationURI()), new File(new URI(added.get(0).getUri()).normalize()));
91+
// test that the LS emitted a workspace-folder added event for our project
92+
final var expected = Paths.get(project.getLocationURI());
93+
assertTrue(MockLanguageServer.INSTANCE.getWorkspaceService() //
94+
.getWorkspaceFoldersEvents().stream() //
95+
.flatMap(event -> event.getEvent().getAdded().stream()) //
96+
.anyMatch(added -> Paths.get(URI.create(added.getUri())).equals(expected)));
10197
}
10298

10399
@Test
@@ -112,16 +108,12 @@ public void testProjectClose() throws Exception {
112108
project.close(synchronizer);
113109
synchronizer.await();
114110

115-
waitForAndAssertCondition(5_000, () -> {
116-
assertEquals(2, MockLanguageServer.INSTANCE.getWorkspaceService().getWorkspaceFoldersEvents().size());
117-
return true;
118-
});
119-
final MockWorkspaceService mockWorkspaceService = MockLanguageServer.INSTANCE.getWorkspaceService();
120-
final List<DidChangeWorkspaceFoldersParams> events = mockWorkspaceService.getWorkspaceFoldersEvents();
121-
assertEquals(2, events.size());
122-
final List<WorkspaceFolder> removed = events.get(1).getEvent().getRemoved();
123-
assertEquals(1, removed.size());
124-
assertEquals(new File(project.getLocationURI()), new File(new URI(removed.get(0).getUri())));
111+
// test that the LS emitted a workspace-folder removal event for our project
112+
final var expected = Paths.get(project.getLocationURI());
113+
waitForAndAssertCondition(5_000, () -> MockLanguageServer.INSTANCE.getWorkspaceService() //
114+
.getWorkspaceFoldersEvents().stream() //
115+
.flatMap(evt -> evt.getEvent().getRemoved().stream()) //
116+
.anyMatch(removed -> Paths.get(URI.create(removed.getUri())).equals(expected)));
125117
}
126118

127119
@Test
@@ -137,18 +129,16 @@ public void testProjectDelete() throws Exception {
137129
assertTrue(wrapper1.isActive());
138130

139131
// Grab this before deletion otherwise project.getLocationURI will be null...
140-
final var expected = new File(project.getLocationURI());
132+
final var expected = Paths.get(project.getLocationURI());
141133
final var synchronizer = new JobSynchronizer();
142134
project.delete(true, true, synchronizer);
143135
synchronizer.await();
144-
final MockWorkspaceService mockWorkspaceService = MockLanguageServer.INSTANCE.getWorkspaceService();
145-
final List<DidChangeWorkspaceFoldersParams> events = mockWorkspaceService.getWorkspaceFoldersEvents();
146-
assertEquals(2, events.size());
147-
final List<WorkspaceFolder> removed = events.get(1).getEvent().getRemoved();
148-
assertEquals(1, removed.size());
149-
150-
// Compare files to bodge round URI canonicalization problems
151-
assertEquals(expected, new File(new URI(removed.get(0).getUri())));
136+
137+
// test that the LS emitted a workspace-folder removal event for our project
138+
assertTrue(MockLanguageServer.INSTANCE.getWorkspaceService() //
139+
.getWorkspaceFoldersEvents().stream() //
140+
.flatMap(event -> event.getEvent().getRemoved().stream()) //
141+
.anyMatch(removed -> Paths.get(URI.create(removed.getUri())).equals(expected)));
152142
}
153143

154144
@Test
@@ -172,15 +162,12 @@ public void testProjectReopen() throws Exception {
172162

173163
waitForAndAssertCondition(5_000, () -> project.isOpen());
174164

175-
waitForAndAssertCondition(5_000, () -> {
176-
assertEquals(3, MockLanguageServer.INSTANCE.getWorkspaceService().getWorkspaceFoldersEvents().size());
177-
return true;
178-
});
179-
final MockWorkspaceService mockWorkspaceService = MockLanguageServer.INSTANCE.getWorkspaceService();
180-
final List<DidChangeWorkspaceFoldersParams> events = mockWorkspaceService.getWorkspaceFoldersEvents();
181-
final List<WorkspaceFolder> added = events.get(2).getEvent().getAdded();
182-
assertEquals(1, added.size());
183-
assertEquals(new File(project.getLocationURI()), new File(new URI(added.get(0).getUri())));
165+
// test that the LS emitted a workspace-folder added event for our project
166+
final var expected = Paths.get(project.getLocationURI());
167+
waitForAndAssertCondition(5_000, () -> MockLanguageServer.INSTANCE.getWorkspaceService() //
168+
.getWorkspaceFoldersEvents().stream() //
169+
.flatMap(evt -> evt.getEvent().getAdded().stream()) //
170+
.anyMatch(added -> Paths.get(URI.create(added.getUri())).equals(expected)));
184171
}
185172

186173
@Override

0 commit comments

Comments
 (0)