bfbce06ed7b8e4dadbd1de03fc1849537302e962
[idea/community.git] / platform / platform-tests / testSrc / com / intellij / execution / impl / ConsoleViewImplTest.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.execution.impl;
17
18 import com.intellij.execution.process.ProcessHandler;
19 import com.intellij.execution.ui.ConsoleViewContentType;
20 import com.intellij.ide.DataManager;
21 import com.intellij.openapi.actionSystem.DataContext;
22 import com.intellij.openapi.editor.Editor;
23 import com.intellij.openapi.editor.actionSystem.EditorActionManager;
24 import com.intellij.openapi.editor.actionSystem.TypedAction;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.openapi.util.Disposer;
27 import com.intellij.psi.search.GlobalSearchScope;
28 import com.intellij.testFramework.LightPlatformTestCase;
29 import com.intellij.testFramework.TestDataProvider;
30 import com.intellij.util.Alarm;
31 import com.intellij.util.SystemProperties;
32 import com.intellij.util.TimeoutUtil;
33 import com.intellij.util.ui.UIUtil;
34 import org.jetbrains.annotations.NotNull;
35 import org.jetbrains.annotations.Nullable;
36
37 import java.io.OutputStream;
38 import java.util.concurrent.CountDownLatch;
39
40 public class ConsoleViewImplTest extends LightPlatformTestCase {
41
42   private ConsoleViewImpl myConsole;
43
44   @Override
45   public void setUp() throws Exception {
46     super.setUp();
47     myConsole = createConsole();
48   }
49
50   @Override
51   public void tearDown() throws Exception {
52     try {
53       Disposer.dispose(myConsole);
54     }
55     finally {
56       super.tearDown();
57     }
58   }
59
60   public void testTypeText() throws Exception {
61     ConsoleViewImpl console = myConsole;
62     console.print("Initial", ConsoleViewContentType.NORMAL_OUTPUT);
63     console.flushDeferredText();
64     console.clear();
65     console.print("Hi", ConsoleViewContentType.NORMAL_OUTPUT);
66     assertEquals(2, console.getContentSize());
67   }
68
69   public void testConsolePrintsSomethingAfterDoubleClear() throws Exception {
70     ConsoleViewImpl console = myConsole;
71     Alarm alarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD);
72     CountDownLatch latch = new CountDownLatch(1);
73     alarm.addRequest(() -> {
74       console.clear();
75       console.clear();
76       console.print("Test", ConsoleViewContentType.NORMAL_OUTPUT);
77       latch.countDown();
78     }, 0);
79     latch.await();
80     UIUtil.dispatchAllInvocationEvents();
81     TimeoutUtil.sleep(SystemProperties.getIntProperty("console.flush.delay.ms", 200));
82     UIUtil.dispatchAllInvocationEvents();
83     assertFalse(console.hasDeferredOutput());
84     assertEquals("Test", console.getText());
85   }
86
87   public void testTypeInEmptyConsole() throws Exception {
88     ConsoleViewImpl console = myConsole;
89     console.clear();
90     EditorActionManager actionManager = EditorActionManager.getInstance();
91     DataContext dataContext = DataManager.getInstance().getDataContext(console.getComponent());
92     TypedAction action = actionManager.getTypedAction();
93     action.actionPerformed(console.getEditor(), 'h', dataContext);
94     assertEquals(1, console.getContentSize());
95   }
96
97   public void testTypingAfterMultipleCR() throws Exception {
98     final EditorActionManager actionManager = EditorActionManager.getInstance();
99     final TypedAction typedAction = actionManager.getTypedAction();
100     final TestDataProvider dataContext = new TestDataProvider(getProject());
101
102     final ConsoleViewImpl console = myConsole;
103     final Editor editor = console.getEditor();
104     console.print("System output\n", ConsoleViewContentType.SYSTEM_OUTPUT);
105     console.print("\r\r\r\r\r\r\r", ConsoleViewContentType.NORMAL_OUTPUT);
106     console.flushDeferredText();
107
108     typedAction.actionPerformed(editor, '1', dataContext);
109     typedAction.actionPerformed(editor, '2', dataContext);
110
111     assertEquals("System output\n12", editor.getDocument().getText());
112   }
113
114   @NotNull
115   private static ConsoleViewImpl createConsole() {
116     Project project = getProject();
117     ConsoleViewImpl console = new ConsoleViewImpl(project,
118                                                   GlobalSearchScope.allScope(project),
119                                                   false,
120                                                   false);
121     console.getComponent();
122     ProcessHandler processHandler = new MyProcessHandler();
123     processHandler.startNotify();
124     console.attachToProcess(processHandler);
125     return console;
126   }
127
128   private static class MyProcessHandler extends ProcessHandler {
129     @Override
130     protected void destroyProcessImpl() {
131       notifyProcessTerminated(0);
132     }
133
134     @Override
135     protected void detachProcessImpl() {
136     }
137
138     @Override
139     public boolean detachIsDefault() {
140       return false;
141     }
142
143     @Nullable
144     @Override
145     public OutputStream getProcessInput() {
146       return null;
147     }
148   }
149 }