diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourceInitialSelectionTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourceInitialSelectionTest.java index 88e456b3085..33dd4f7ebda 100644 --- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourceInitialSelectionTest.java +++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/dialogs/ResourceInitialSelectionTest.java @@ -82,6 +82,9 @@ public void testSingleSelectionAndNoInitialSelectionWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertFalse("One file should be selected by default", selected.isEmpty()); @@ -100,6 +103,9 @@ public void testSingleSelectionAndOneInitialSelectionWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertEquals("One file should be selected by default", asList(FILES.get("foo.txt")), selected); @@ -119,6 +125,9 @@ public void testSingleSelectionAndOneInitialNonExistingSelectionWithInitialPatte dialog.open(); dialog.refresh(); + // Don't wait for full refresh - this test checks that invalid initial + // selections don't cause a selection before dialog is fully loaded + List selected = getSelectedItems(dialog); assertTrue("No file should be selected by default", selected.isEmpty()); @@ -136,6 +145,9 @@ public void testSingleSelectionAndOneInitialSelectionWithoutInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertTrue("No file should be selected by default", selected.isEmpty()); @@ -155,6 +167,9 @@ public void testSingleSelectionAndOneFilteredSelection() { dialog.open(); dialog.refresh(); + // Don't wait for full refresh - this test checks that filtered initial + // selections don't cause a selection before dialog is fully loaded + List selected = getSelectedItems(dialog); assertTrue("No file should be selected by default", selected.isEmpty()); @@ -174,6 +189,9 @@ public void testSingleSelectionAndTwoInitialSelectionsWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertEquals("The first file should be selected by default", asList(FILES.get("foo.txt")), selected); @@ -192,6 +210,9 @@ public void testMultiSelectionAndNoInitialSelectionWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertFalse("One file should be selected by default", selected.isEmpty()); @@ -211,6 +232,9 @@ public void testMultiSelectionAndOneInitialSelectionWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertEquals("One file should be selected by default", asList(FILES.get("foo.txt")), selected); @@ -228,6 +252,9 @@ public void testMultiSelectionAndOneInitialSelectionWithoutInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); assertTrue("No file should be selected by default", selected.isEmpty()); @@ -247,6 +274,9 @@ public void testMultiSelectionAndTwoInitialNonExistingSelectionWithInitialPatter dialog.open(); dialog.refresh(); + // Don't wait for full refresh - this test checks that invalid initial + // selections don't cause a selection before dialog is fully loaded + List selected = getSelectedItems(dialog); assertTrue("No file should be selected by default", selected.isEmpty()); @@ -266,6 +296,9 @@ public void testMultiSelectionAndSomeInitialNonExistingSelectionWithInitialPatte dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); Set expectedSelection = new HashSet<>(asList(FILES.get("bar.txt"), FILES.get("foofoo"))); boolean allInitialElementsAreSelected = expectedSelection.equals(new HashSet<>(selected)); @@ -288,6 +321,9 @@ public void testMultiSelectionAndTwoInitialSelectionsWithInitialPattern() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); boolean initialElementsAreSelected = selected.containsAll(initialSelection) && initialSelection.containsAll(selected); @@ -310,6 +346,9 @@ public void testMultiSelectionAndTwoInitialFilteredSelections() { dialog.open(); dialog.refresh(); + // Wait for background refresh jobs to complete + waitForDialogRefresh(); + List selected = getSelectedItems(dialog); List expectedSelection = asList(FILES.get("foo.txt"), FILES.get("bar.txt")); boolean initialElementsAreSelected = selected.containsAll(expectedSelection) @@ -408,6 +447,26 @@ private void processUIEvents() { } } + /** + * Wait for dialog refresh jobs to complete and process UI events. + * This ensures background jobs finish before assertions are made. + */ + private void waitForDialogRefresh() { + // Process UI events multiple times to allow background jobs to complete + // Similar to the fix in DecoratorAdaptableTests + for (int i = 0; i < 3; i++) { + processUIEvents(); + try { + Thread.sleep(50); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + // Final event loop processing + processUIEvents(); + } + /** * Delete project with retry mechanism to handle cases where background jobs * are still using the project resources.