console: test reproducing unexpected clearing
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Wed, 25 Nov 2015 00:17:15 +0000 (03:17 +0300)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Wed, 25 Nov 2015 00:17:15 +0000 (03:17 +0300)
platform/platform-tests/testSrc/com/intellij/execution/impl/ConsoleViewImplTest.java

index ce55ad48acb0f6099e153bb0cb7048d526a66f56..e2a7de97bc19d090e9b6301060382e9ac14d8fc1 100644 (file)
@@ -27,46 +27,77 @@ import com.intellij.openapi.util.Disposer;
 import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.testFramework.LightPlatformTestCase;
 import com.intellij.testFramework.TestDataProvider;
+import com.intellij.util.Alarm;
+import com.intellij.util.SystemProperties;
+import com.intellij.util.TimeoutUtil;
+import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.OutputStream;
+import java.util.concurrent.CountDownLatch;
 
 public class ConsoleViewImplTest extends LightPlatformTestCase {
 
-  public void testTypeText() throws Exception {
-    final ConsoleViewImpl console = createConsole();
-    console.print("Initial", ConsoleViewContentType.NORMAL_OUTPUT);
-    console.flushDeferredText();
+  private ConsoleViewImpl myConsole;
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    myConsole = createConsole();
+  }
+
+  @Override
+  public void tearDown() throws Exception {
     try {
-      console.clear();
-      console.print("Hi", ConsoleViewContentType.NORMAL_OUTPUT);
-      assertEquals(2, console.getContentSize());
-    }
-    catch (Exception e) {
-      e.printStackTrace();
+      Disposer.dispose(myConsole);
     }
     finally {
-      Disposer.dispose(console);
+      super.tearDown();
     }
   }
 
-  public void testTypeInEmptyConsole() throws Exception {
-    final ConsoleViewImpl console = createConsole();
-    try {
+  public void testTypeText() throws Exception {
+    ConsoleViewImpl console = myConsole;
+    console.print("Initial", ConsoleViewContentType.NORMAL_OUTPUT);
+    console.flushDeferredText();
+    console.clear();
+    console.print("Hi", ConsoleViewContentType.NORMAL_OUTPUT);
+    assertEquals(2, console.getContentSize());
+  }
+
+  public void testDoubleClear() throws Exception {
+    ConsoleViewImpl console = myConsole;
+    Alarm alarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD);
+    CountDownLatch latch = new CountDownLatch(3);
+    alarm.addRequest(() -> {
       console.clear();
-      EditorActionManager actionManager = EditorActionManager.getInstance();
-      final DataContext dataContext = DataManager.getInstance().getDataContext();
-      TypedAction action = actionManager.getTypedAction();
-      action.actionPerformed(console.getEditor(), 'h', dataContext);
-      assertEquals(1, console.getContentSize());
-    }
-    catch (Exception e) {
-      e.printStackTrace();
-    }
-    finally {
-      Disposer.dispose(console);
-    }
+      latch.countDown();
+    }, 0);
+    alarm.addRequest(() -> {
+      console.clear();
+      latch.countDown();
+    }, 0);
+    alarm.addRequest(() -> {
+      console.print("Test", ConsoleViewContentType.NORMAL_OUTPUT);
+      latch.countDown();
+    }, 0);
+    latch.await();
+    UIUtil.dispatchAllInvocationEvents();
+    TimeoutUtil.sleep(SystemProperties.getIntProperty("console.flush.delay.ms", 200));
+    UIUtil.dispatchAllInvocationEvents();
+    assertFalse(console.hasDeferredOutput());
+    //assertEquals("Test", console.getText());
+  }
+
+  public void testTypeInEmptyConsole() throws Exception {
+    ConsoleViewImpl console = myConsole;
+    console.clear();
+    EditorActionManager actionManager = EditorActionManager.getInstance();
+    final DataContext dataContext = DataManager.getInstance().getDataContext();
+    TypedAction action = actionManager.getTypedAction();
+    action.actionPerformed(console.getEditor(), 'h', dataContext);
+    assertEquals(1, console.getContentSize());
   }
 
   public void testTypingAfterMultipleCR() throws Exception {
@@ -74,21 +105,16 @@ public class ConsoleViewImplTest extends LightPlatformTestCase {
     final TypedAction typedAction = actionManager.getTypedAction();
     final TestDataProvider dataContext = new TestDataProvider(getProject());
 
-    final ConsoleViewImpl console = createConsole();
+    final ConsoleViewImpl console = myConsole;
     final Editor editor = console.getEditor();
-    try {
-      console.print("System output\n", ConsoleViewContentType.SYSTEM_OUTPUT);
-      console.print("\r\r\r\r\r\r\r", ConsoleViewContentType.NORMAL_OUTPUT);
-      console.flushDeferredText();
+    console.print("System output\n", ConsoleViewContentType.SYSTEM_OUTPUT);
+    console.print("\r\r\r\r\r\r\r", ConsoleViewContentType.NORMAL_OUTPUT);
+    console.flushDeferredText();
 
-      typedAction.actionPerformed(editor, '1', dataContext);
-      typedAction.actionPerformed(editor, '2', dataContext);
+    typedAction.actionPerformed(editor, '1', dataContext);
+    typedAction.actionPerformed(editor, '2', dataContext);
 
-      assertEquals("System output\n12", editor.getDocument().getText());
-    }
-    finally {
-      Disposer.dispose(console);
-    }
+    assertEquals("System output\n12", editor.getDocument().getText());
   }
 
   @NotNull