Skip to content

Commit 2a9d970

Browse files
committed
Make genericeditor CompletionTest code more direct
Another commit towards fixing #3155 . Simplify code, more direct calls, less casts, stronger DisplayHelper conditions to ensure desired state is achieved before expecting.
1 parent 66fb87c commit 2a9d970

File tree

1 file changed

+30
-35
lines changed
  • tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests

1 file changed

+30
-35
lines changed

tests/org.eclipse.ui.genericeditor.tests/src/org/eclipse/ui/genericeditor/tests/CompletionTest.java

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.List;
3333
import java.util.Queue;
3434
import java.util.Set;
35-
import java.util.function.BooleanSupplier;
3635
import java.util.stream.Collectors;
3736

3837
import org.junit.jupiter.api.AfterEach;
@@ -46,7 +45,6 @@
4645

4746
import org.eclipse.swt.SWT;
4847
import org.eclipse.swt.custom.ST;
49-
import org.eclipse.swt.custom.StyledText;
5048
import org.eclipse.swt.widgets.Composite;
5149
import org.eclipse.swt.widgets.Control;
5250
import org.eclipse.swt.widgets.Display;
@@ -87,7 +85,7 @@ public class CompletionTest extends AbstratGenericEditorTest {
8785
@DisabledOnOs(value = OS.MAC, disabledReason = "test fails on Mac, see https://github.com/eclipse-platform/eclipse.platform.ui/issues/906")
8886
public void testCompletion() throws Exception {
8987
editor.selectAndReveal(3, 0);
90-
this.completionShell = openConentAssist();
88+
this.completionShell = openContentAssist(true);
9189
final Table completionProposalList = findCompletionSelectionControl(completionShell);
9290
checkCompletionContent(completionProposalList);
9391
// TODO find a way to actually trigger completion and verify result against
@@ -102,7 +100,7 @@ public void testDefaultContentAssistBug570488() throws Exception {
102100
TestLogListener listener= new TestLogListener();
103101
log.addLogListener(listener);
104102
createAndOpenFile("Bug570488.txt", "bar 'bar'");
105-
openConentAssist(false);
103+
openContentAssist(false);
106104
DisplayHelper.runEventLoop(Display.getCurrent(), 0);
107105
assertFalse(listener.messages.stream().anyMatch(s -> s.matches(IStatus.ERROR)), "There are errors in the log");
108106
log.removeLogListener(listener);
@@ -120,10 +118,10 @@ public void testCompletionService() throws Exception {
120118
new Hashtable<>(Collections.singletonMap("contentType", "org.eclipse.ui.genericeditor.tests.content-type")));
121119
DisplayHelper.runEventLoop(Display.getCurrent(), 0);
122120
editor.selectAndReveal(3, 0);
123-
this.completionShell= openConentAssist();
121+
this.completionShell= openContentAssist(true);
124122
final Table completionProposalList= findCompletionSelectionControl(completionShell);
125-
checkCompletionContent(completionProposalList);
126123
assertTrue(service.called, "Service was not called!");
124+
checkCompletionContent(completionProposalList);
127125
registration.unregister();
128126
}
129127

@@ -132,17 +130,12 @@ public void testCompletionService() throws Exception {
132130
public void testCompletionUsingViewerSelection() throws Exception {
133131
editor.getDocumentProvider().getDocument(editor.getEditorInput()).set("abc");
134132
editor.selectAndReveal(0, 3);
135-
this.completionShell= openConentAssist();
133+
this.completionShell= openContentAssist(true);
136134
final Table completionProposalList = findCompletionSelectionControl(completionShell);
137-
waitForProposalRelatedCondition("Proposal list did not contain expected item: ABC", completionProposalList,
138-
() -> Arrays.stream(completionProposalList.getItems()).map(TableItem::getText).anyMatch("ABC"::equals), 5_000);
139-
}
140-
141-
private static void waitForProposalRelatedCondition(String errorMessage, Table completionProposalList, BooleanSupplier condition, int timeoutInMsec) {
142-
assertTrue(DisplayHelper.waitForCondition(completionProposalList.getDisplay(), timeoutInMsec, () -> {
135+
assertTrue(DisplayHelper.waitForCondition(completionProposalList.getDisplay(), 5000, () -> {
143136
assertFalse(completionProposalList.isDisposed(), "Completion proposal list was unexpectedly disposed");
144-
return condition.getAsBoolean();
145-
}), errorMessage);
137+
return Arrays.stream(completionProposalList.getItems()).map(TableItem::getText).anyMatch("ABC"::equals);
138+
}), "Proposal list did not contain expected item: ABC");
146139
}
147140

148141
@Test
@@ -151,20 +144,17 @@ public void testEnabledWhenCompletion() throws Exception {
151144
EnabledPropertyTester.setEnabled(false);
152145
createAndOpenFile("enabledWhen.txt", "bar 'bar'");
153146
editor.selectAndReveal(3, 0);
154-
assertNull(openConentAssist(false), "A new shell was found");
147+
assertNull(openContentAssist(false), "A new shell was found");
155148
cleanFileAndEditor();
156149

157150
// Confirm that when enabled, a completion shell is present
158151
EnabledPropertyTester.setEnabled(true);
159152
createAndOpenFile("enabledWhen.txt", "bar 'bar'");
160153
editor.selectAndReveal(3, 0);
161-
assertNotNull(openConentAssist());
154+
assertNotNull(openContentAssist(true));
162155
}
163156

164-
private Shell openConentAssist() {
165-
return openConentAssist(true);
166-
}
167-
private Shell openConentAssist(boolean expectShell) {
157+
private Shell openContentAssist(boolean expectShell) {
168158
ContentAssistAction action = (ContentAssistAction) editor.getAction(ITextEditorActionConstants.CONTENT_ASSIST);
169159
action.update();
170160
final Set<Shell> beforeShells = Arrays.stream(editor.getSite().getShell().getDisplay().getShells()).filter(Shell::isVisible).collect(Collectors.toSet());
@@ -183,19 +173,22 @@ private Shell openConentAssist(boolean expectShell) {
183173
*/
184174
private void checkCompletionContent(final Table completionProposalList) {
185175
// should be instantaneous, but happens to go asynchronous on CI so let's allow a wait
186-
waitForProposalRelatedCondition("Proposal list did not show two initial items", completionProposalList,
187-
() -> completionProposalList.getItemCount() == 2, 200);
188-
assertTrue(isComputingInfoEntry(completionProposalList.getItem(0)), "Missing computing info entry");
176+
assertTrue(DisplayHelper.waitForCondition(completionProposalList.getDisplay(), 200, () -> {
177+
assertFalse(completionProposalList.isDisposed(), "Completion proposal list was unexpectedly disposed");
178+
return completionProposalList.getItemCount() == 2 && completionProposalList.getItem(1).getData() != null;
179+
}), "Proposal list did not show two initial items");
189180
assertTrue(isComputingInfoEntry(completionProposalList.getItem(0)), "Missing computing info entry in proposal list");
190181
final TableItem initialProposalItem = completionProposalList.getItem(1);
182+
System.out.println(initialProposalItem.toString());
191183
final String initialProposalString = ((ICompletionProposal)initialProposalItem.getData()).getDisplayString();
192184
assertThat("Unexpected initial proposal item",
193185
BAR_CONTENT_ASSIST_PROPOSAL, endsWith(initialProposalString));
194186
completionProposalList.setSelection(initialProposalItem);
195187
// asynchronous
196-
waitForProposalRelatedCondition("Proposal list did not show two items after finishing computing", completionProposalList,
197-
() -> !isComputingInfoEntry(completionProposalList.getItem(0)) && completionProposalList.getItemCount() == 2,
198-
LongRunningBarContentAssistProcessor.DELAY + 200);
188+
assertTrue(DisplayHelper.waitForCondition(completionProposalList.getDisplay(), LongRunningBarContentAssistProcessor.DELAY * 2, () -> {
189+
assertFalse(completionProposalList.isDisposed(), "Completion proposal list was unexpectedly disposed");
190+
return !isComputingInfoEntry(completionProposalList.getItem(0)) && completionProposalList.getItemCount() == 2;
191+
}), "Proposal list did not show two items after finishing computing");
199192
final TableItem firstCompletionProposalItem = completionProposalList.getItem(0);
200193
final TableItem secondCompletionProposalItem = completionProposalList.getItem(1);
201194
String firstCompletionProposalText = ((ICompletionProposal)firstCompletionProposalItem.getData()).getDisplayString();
@@ -211,25 +204,27 @@ private static boolean isComputingInfoEntry(TableItem item) {
211204
}
212205

213206
public static Shell findNewShell(Set<Shell> beforeShells, Display display, boolean expectShell) {
214-
Shell[] afterShells = Arrays.stream(display.getShells())
207+
List<Shell> afterShells = Arrays.stream(display.getShells())
215208
.filter(Shell::isVisible)
216209
.filter(shell -> !beforeShells.contains(shell))
217-
.toArray(Shell[]::new);
210+
.toList();
218211
if (expectShell) {
219-
assertEquals(1, afterShells.length, "No new shell found");
212+
assertEquals(1, afterShells.size(), "No new shell found");
220213
}
221-
return afterShells.length > 0 ? afterShells[0] : null;
214+
return afterShells.isEmpty() ? null : afterShells.get(0);
222215
}
223216

224217
@Test
225218
@DisabledOnOs(value = OS.MAC, disabledReason = "test fails on Mac, see https://github.com/eclipse-platform/eclipse.platform.ui/issues/906")
226219
public void testCompletionFreeze_bug521484() throws Exception {
227220
editor.selectAndReveal(3, 0);
228-
this.completionShell=openConentAssist();
221+
this.completionShell=openContentAssist(true);
229222
final Table completionProposalList = findCompletionSelectionControl(this.completionShell);
230223
// should be instantaneous, but happens to go asynchronous on CI so let's allow a wait
231-
waitForProposalRelatedCondition("Proposal list did not show two items", completionProposalList,
232-
() -> completionProposalList.getItemCount() == 2, 200);
224+
assertTrue(DisplayHelper.waitForCondition(completionProposalList.getDisplay(), 200, () -> {
225+
assertFalse(completionProposalList.isDisposed(), "Completion proposal list was unexpectedly disposed");
226+
return completionProposalList.getItemCount() == 2;
227+
}), "Proposal list did not show two items");
233228
assertTrue(isComputingInfoEntry(completionProposalList.getItem(0)), "Missing computing info entry");
234229
// Some processors are long running, moving cursor can cause freeze (bug 521484)
235230
// asynchronous
@@ -254,7 +249,7 @@ public void testMoveCaretBackUsesAllProcessors_bug522255() throws Exception {
254249

255250
private void emulatePressLeftArrowKey() {
256251
editor.selectAndReveal(((ITextSelection)editor.getSelectionProvider().getSelection()).getOffset() - 1, 0);
257-
StyledText styledText = (StyledText) editor.getAdapter(Control.class);
252+
Control styledText = editor.getAdapter(Control.class);
258253
Event e = new Event();
259254
e.type = ST.VerifyKey;
260255
e.widget = styledText;

0 commit comments

Comments
 (0)