a test for typing during copy commit with a visible lookup present

This commit is contained in:
peter
2011-08-11 16:51:06 +02:00
parent 455e6ad29f
commit 145992519b
4 changed files with 53 additions and 17 deletions
@@ -41,6 +41,7 @@ import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.progress.ProgressManager
import com.intellij.psi.PsiFile
import com.intellij.util.Consumer
/**
* @author peter
@@ -518,8 +519,17 @@ public interface Test {
}
}
static class LongContributor extends CompletionContributor {
@Override
void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet result) {
result.runRemainingContributors(parameters, { result.passResult(it) } as Consumer)
Thread.sleep 1000
}
}
public void testDuringCompletionMustFinish() {
registerLongCompletionContributor()
registerContributor(LongReplacementOffsetContributor)
edt { myFixture.addFileToProject 'directory/foo.txt', '' }
myFixture.configureByText "a.java", 'public interface Test { RuntiExce<caret>xxx }'
@@ -532,10 +542,10 @@ public interface Test {
myFixture.checkResult 'public interface Test { RuntimeException<caret>x }'
}
private def registerLongCompletionContributor() {
private def registerContributor(final Class contributor, LoadingOrder order = LoadingOrder.LAST) {
def ep = Extensions.rootArea.getExtensionPoint("com.intellij.completion.contributor")
def bean = new CompletionContributorEP(language: 'JAVA', implementationClass: LongReplacementOffsetContributor.name)
ep.registerExtension(bean, LoadingOrder.LAST)
def bean = new CompletionContributorEP(language: 'JAVA', implementationClass: contributor.name)
ep.registerExtension(bean, order)
disposeOnTearDown({ ep.unregisterExtension(bean) } as Disposable)
}
@@ -685,7 +695,7 @@ class Foo {
}
public void testRestartAndTypingDuringCopyCommit() {
registerLongCompletionContributor()
registerContributor(LongReplacementOffsetContributor)
myFixture.configureByText("a.java", """ class Foo { { int newa; <caret> } } """)
myFixture.type 'n'
@@ -701,7 +711,7 @@ class Foo {
}
public void testAutoRestartAndTypingDuringCopyCommit() {
registerLongCompletionContributor()
registerContributor(LongReplacementOffsetContributor)
myFixture.configureByText("a.java", """ class Foo { { int iteraaa; <caret> } } """)
type 'ite'
@@ -717,7 +727,7 @@ class Foo {
}
public void _testChoosingItemDuringCopyCommit() {
registerLongCompletionContributor()
registerContributor(LongReplacementOffsetContributor)
myFixture.configureByText("a.java", """ class Foo { { int iteraaa; <caret> } } """)
type 'ite'
@@ -730,19 +740,41 @@ class Foo {
}
public void testRestartWithInvisibleLookup() {
registerLongCompletionContributor()
registerContributor(LongReplacementOffsetContributor)
myFixture.configureByText("a.java", """ class Foo { { int abcdef; <caret> } } """)
myFixture.type 'a'
joinAutopopup()
assert lookup
edt { myFixture.type 'bc' }
joinAlarm()
joinAlarm()
joinCompletion()
joinAutopopup()
joinAutopopup()
joinCompletion()
assert lookup
edt { assert lookup.shown }
assert lookup.shown
}
public void testRestartWithVisibleLookup() {
registerContributor(LongContributor, LoadingOrder.FIRST)
myFixture.configureByText("a.java", """ class Foo { { int abcdef; a<caret> } } """)
myFixture.completeBasic()
while (!lookup.shown) {
Thread.sleep(1)
}
def l = lookup
edt {
assert lookup.calculating
myFixture.type 'b'
}
joinCommit {
myFixture.type 'c'
}
joinAutopopup()
joinCompletion()
assert lookup == l
assert !lookup.calculating
assert lookup.shown
}
private void joinSomething(int degree) {
@@ -24,7 +24,6 @@ import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.ex.DocumentEx
import com.intellij.psi.PsiDocumentManager
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
import com.intellij.util.concurrency.Semaphore
import com.intellij.util.ui.UIUtil
import java.util.concurrent.atomic.AtomicBoolean
@@ -88,11 +87,14 @@ abstract class CompletionAutoPopupTestCase extends LightCodeInsightFixtureTestCa
fail("Too long completion")
}
protected def joinCommit() {
protected def joinCommit(Closure cl = {}) {
final AtomicBoolean committed = new AtomicBoolean()
edt {
PsiDocumentManager.getInstance(project).cancelAndRunWhenAllCommitted("wait for all comm") {
ApplicationManager.application.invokeLater { committed.set(true) }
ApplicationManager.application.invokeLater {
cl()
committed.set(true)
}
}
}
def start = System.currentTimeMillis()
@@ -134,6 +134,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
myLookup.setCalculating(true);
myQueue = new MergingUpdateQueue("completion lookup progress", 200, true, myEditor.getContentComponent());
myQueue.setPassThrough(false);
ApplicationManager.getApplication().assertIsDispatchThread();
registerItself();
@@ -386,7 +387,6 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement
myItemSorters.put(item.getLookupElement(), (CompletionSorterImpl) item.getSorter());
myLookup.addItem(item.getLookupElement(), item.getPrefixMatcher());
myCount++;
if (unitTestMode) return;
if (myCount == 1) {
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
@@ -796,7 +796,9 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable
}
public boolean isShown() {
ApplicationManager.getApplication().assertIsDispatchThread();
if (!ApplicationManager.getApplication().isUnitTestMode()) {
ApplicationManager.getApplication().assertIsDispatchThread();
}
return myShown;
}