mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
a couple of tests proving that LaterInvocator.ensureFlushRequested is really needed
This commit is contained in:
+32
@@ -15,10 +15,12 @@
|
||||
*/
|
||||
package com.intellij.openapi.application.impl;
|
||||
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Conditions;
|
||||
import com.intellij.openapi.util.EmptyRunnable;
|
||||
import com.intellij.testFramework.LoggedErrorProcessor;
|
||||
import com.intellij.testFramework.PlatformTestCase;
|
||||
import com.intellij.testFramework.SkipInHeadlessEnvironment;
|
||||
@@ -34,6 +36,7 @@ import java.util.ArrayList;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@SuppressWarnings({"SSBasedInspection", "SynchronizeOnThis"})
|
||||
@SkipInHeadlessEnvironment
|
||||
@@ -577,4 +580,33 @@ public class LaterInvocatorTest extends PlatformTestCase {
|
||||
assertTrue(e.getMessage(), e.getMessage().contains("Access is allowed from event dispatch thread only"));
|
||||
}
|
||||
}
|
||||
|
||||
public void testDispatchInvocationEventsWorksForJustSubmitted() {
|
||||
Application app = ApplicationManager.getApplication();
|
||||
app.invokeAndWait(() -> {
|
||||
app.invokeLater(() -> {
|
||||
myOrder.add("1");
|
||||
assertOrderedEquals(myOrder, "1");
|
||||
UIUtil.dispatchAllInvocationEvents();
|
||||
assertOrderedEquals(myOrder, "1", "2");
|
||||
});
|
||||
app.invokeLater(new MyRunnable("2"));
|
||||
UIUtil.dispatchAllInvocationEvents();
|
||||
});
|
||||
assertOrderedEquals(myOrder, "1", "2");
|
||||
}
|
||||
|
||||
public void testDispatchInvocationEventsVsInvokeLaterFromBgThreadRace() {
|
||||
Application app = ApplicationManager.getApplication();
|
||||
app.invokeAndWait(() -> {
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
AtomicBoolean executed = new AtomicBoolean();
|
||||
app.executeOnPooledThread(() -> app.invokeLater(EmptyRunnable.INSTANCE));
|
||||
app.invokeLater(() -> executed.set(true));
|
||||
UIUtil.dispatchAllInvocationEvents();
|
||||
assertTrue(executed.get());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user