From 125752add7255d9b390da11bfe34643d81eaf94b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 31 May 2016 19:36:32 +0300 Subject: [PATCH] test fixed: everybody posts to event queue like crazy, so ignore InvocationEvents --- .../com/intellij/ide/IdeEventQueueTest.java | 22 ++++++------------- .../testFramework/PlatformTestUtil.java | 1 + 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/ide/IdeEventQueueTest.java b/platform/platform-tests/testSrc/com/intellij/ide/IdeEventQueueTest.java index 9012ab2a7696..aaa4ae68e4e5 100644 --- a/platform/platform-tests/testSrc/com/intellij/ide/IdeEventQueueTest.java +++ b/platform/platform-tests/testSrc/com/intellij/ide/IdeEventQueueTest.java @@ -55,44 +55,36 @@ public class IdeEventQueueTest extends PlatformTestCase { eventQueue.postEvent(pressX); assertEquals(posted+1, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched, ideEventQueue.myKeyboardEventsDispatched.get()); - assertEquals(pressX, PlatformTestUtil.dispatchNextEventIfAny(ideEventQueue)); + assertEquals(pressX, dispatchAllInvocationEventsUntilOtherEvent(ideEventQueue)); assertEquals(posted+1, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched+1, ideEventQueue.myKeyboardEventsDispatched.get()); - dispatchAllInvocationEventsOnly(ideEventQueue); - // do not react to other events MouseEvent mouseClick = new MouseEvent(new JLabel(), MouseEvent.BUTTON1, 1, InputEvent.BUTTON1_DOWN_MASK, 12, 14, 1, true); eventQueue.postEvent(mouseClick); assertEquals(posted+1, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched+1, ideEventQueue.myKeyboardEventsDispatched.get()); - assertEquals(mouseClick, PlatformTestUtil.dispatchNextEventIfAny(ideEventQueue)); + assertEquals(mouseClick, dispatchAllInvocationEventsUntilOtherEvent(ideEventQueue)); assertEquals(posted+1, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched+1, ideEventQueue.myKeyboardEventsDispatched.get()); - dispatchAllInvocationEventsOnly(ideEventQueue); - KeyEvent keyRelease = new KeyEvent(new JLabel(), KeyEvent.KEY_RELEASED, 1, InputEvent.ALT_DOWN_MASK, 11, 'x'); eventQueue.postEvent(keyRelease); assertEquals(posted+2, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched+1, ideEventQueue.myKeyboardEventsDispatched.get()); - assertEquals(keyRelease, PlatformTestUtil.dispatchNextEventIfAny(ideEventQueue)); + assertEquals(keyRelease, dispatchAllInvocationEventsUntilOtherEvent(ideEventQueue)); assertEquals(posted+2, ideEventQueue.myKeyboardEventsPosted.get()); assertEquals(dispatched+2, ideEventQueue.myKeyboardEventsDispatched.get()); - - dispatchAllInvocationEventsOnly(ideEventQueue); } - // need this because IdeEventQueue.dispatchEvent() calls invokeLater() and everybody else does too - private static void dispatchAllInvocationEventsOnly(IdeEventQueue ideEventQueue) throws InterruptedException { + // need this because everybody can post some crazy stuff to IdeEventQueue, so we have to filter InvocationEvents out + private static AWTEvent dispatchAllInvocationEventsUntilOtherEvent(IdeEventQueue ideEventQueue) throws InterruptedException { while (true) { - AWTEvent event = ideEventQueue.peekEvent(); - if (!(event instanceof InvocationEvent)) break; - AWTEvent event1 = ideEventQueue.getNextEvent(); - ideEventQueue.dispatchEvent(event1); + AWTEvent event = PlatformTestUtil.dispatchNextEventIfAny(ideEventQueue); + if (!(event instanceof InvocationEvent)) return event; } } } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java index b6dd3e391813..7ee1acd1d50a 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java @@ -312,6 +312,7 @@ public class PlatformTestUtil { while (dispatchNextEventIfAny(eventQueue) != null); } + @TestOnly public static AWTEvent dispatchNextEventIfAny(@NotNull IdeEventQueue eventQueue) throws InterruptedException { AWTEvent event = eventQueue.peekEvent(); if (event == null) return null;