From 806e0099b312212512e025c40e2289bf03d8d258 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 15 Sep 2017 15:34:05 +0200 Subject: [PATCH] enable write-safe context checks in tests --- .../application/TransactionGuardImpl.java | 8 --- .../application/TransactionTest.groovy | 2 - .../testFramework/src/_LastInSuiteTest.java | 7 ++- .../testFramework/PlatformTestCase.java | 2 +- .../impl/CodeInsightTestFixtureImpl.java | 44 ++++++------- .../testFramework/vcs/FileBasedTest.java | 11 +--- .../ExternalChangesDetectionVcsTest.java | 62 ++++++++----------- .../validator/HgReferenceValidatorTest.java | 11 +--- 8 files changed, 53 insertions(+), 94 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java index 975513d19635..bbc5558ac72a 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java @@ -51,7 +51,6 @@ public class TransactionGuardImpl extends TransactionGuard { private TransactionIdImpl myCurrentTransaction; private boolean myWritingAllowed; private boolean myErrorReported; - private static boolean ourTestingTransactions; public TransactionGuardImpl() { myWriteSafeModalities.put(ModalityState.NON_MODAL, true); @@ -255,9 +254,6 @@ public class TransactionGuardImpl extends TransactionGuard { private static boolean areAssertionsEnabled() { Application app = ApplicationManager.getApplication(); - if (app.isUnitTestMode() && !ourTestingTransactions) { - return false; - } if (app instanceof ApplicationEx && !((ApplicationEx)app).isLoaded()) { return false; } @@ -340,10 +336,6 @@ public class TransactionGuardImpl extends TransactionGuard { .toString(); } - public static void setTestingTransactions(boolean testingTransactions) { - ourTestingTransactions = testingTransactions; - } - private static class Transaction { @NotNull final Runnable runnable; @Nullable final TransactionIdImpl expectedContext; diff --git a/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy b/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy index 14debcea1f54..832804b92ea9 100644 --- a/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy +++ b/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy @@ -59,13 +59,11 @@ class TransactionTest extends LightPlatformTestCase { protected void setUp() throws Exception { super.setUp() assert LaterInvocator.currentModalityState == ModalityState.NON_MODAL - TransactionGuardImpl.testingTransactions = true } @Override protected void tearDown() throws Exception { UIUtil.dispatchAllInvocationEvents() - TransactionGuardImpl.testingTransactions = false log.clear() LaterInvocator.leaveAllModals() super.tearDown() diff --git a/platform/testFramework/src/_LastInSuiteTest.java b/platform/testFramework/src/_LastInSuiteTest.java index 688d2678aae3..ce94ae0bc683 100644 --- a/platform/testFramework/src/_LastInSuiteTest.java +++ b/platform/testFramework/src/_LastInSuiteTest.java @@ -23,6 +23,7 @@ import com.intellij.openapi.application.TransactionGuard; import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.ShutDownTracker; +import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.LeakHunter; import com.intellij.testFramework.LightPlatformTestCase; import com.intellij.testFramework.PlatformTestUtil; @@ -56,7 +57,7 @@ public class _LastInSuiteTest extends TestCase { return buildConf == null ? name : name + "[" + buildConf + "]"; } - public void testProjectLeak() throws Exception { + public void testProjectLeak() { if (Boolean.getBoolean("idea.test.guimode")) { Application application = ApplicationManager.getApplication(); TransactionGuard.getInstance().submitTransactionAndWait(() -> { @@ -67,7 +68,7 @@ public class _LastInSuiteTest extends TestCase { return; } - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { + EdtTestUtil.runInEdtAndWait(() -> { try { LightPlatformTestCase.initApplication(); // in case nobody cared to init. LightPlatformTestCase.disposeApplication() would not work otherwise. } @@ -109,7 +110,7 @@ public class _LastInSuiteTest extends TestCase { } } - public void testStatistics() throws Exception { + public void testStatistics() { long started = _FirstInSuiteTest.getSuiteStartTime(); if (started != 0) { long testSuiteDuration = System.nanoTime() - started; diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index eb03010b5c03..237d793a873e 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -615,7 +615,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro } finally { try { - SwingUtilities.invokeAndWait(() -> { + EdtTestUtil.runInEdtAndWait(() -> { cleanupApplicationCaches(getProject()); resetAllFields(); }); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 31893fbab05f..6f3c7ec15bb4 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -783,7 +783,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override public void type(final char c) { assertInitialized(); - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { + ApplicationManager.getApplication().invokeAndWait((Runnable)() -> { final EditorActionManager actionManager = EditorActionManager.getInstance(); if (c == '\b') { performEditorAction(IdeActions.ACTION_EDITOR_BACKSPACE); @@ -1044,29 +1044,21 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig public LookupElement[] complete(@NotNull final CompletionType type, final int invocationCount) { assertInitialized(); myEmptyLookup = false; - return UIUtil.invokeAndWaitIfNeeded(new Computable() { - @Override - public LookupElement[] compute() { - CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() { - @Override - public void run() { - final CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(type) { - @Override - @SuppressWarnings("deprecation") - protected void completionFinished(CompletionProgressIndicator indicator, boolean hasModifiers) { - myEmptyLookup = indicator.getLookup().getItems().isEmpty(); - super.completionFinished(indicator, hasModifiers); - } - }; - Editor editor = getCompletionEditor(); - assertNotNull(editor); - handler.invokeCompletion(getProject(), editor, invocationCount); - PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); // to compare with file text - } - }, null, null, getEditor().getDocument()); - return getLookupElements(); - } - }); + ApplicationManager.getApplication().invokeAndWait(() -> CommandProcessor.getInstance().executeCommand(getProject(), () -> { + final CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(type) { + @Override + @SuppressWarnings("deprecation") + protected void completionFinished(CompletionProgressIndicator indicator, boolean hasModifiers) { + myEmptyLookup = indicator.getLookup().getItems().isEmpty(); + super.completionFinished(indicator, hasModifiers); + } + }; + Editor editor = getCompletionEditor(); + assertNotNull(editor); + handler.invokeCompletion(getProject(), editor, invocationCount); + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); // to compare with file text + }, null, null, getEditor().getDocument())); + return getLookupElements(); } @Nullable @@ -1170,13 +1162,13 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override public void checkResultByFile(@NotNull String expectedFile, boolean ignoreTrailingWhitespaces) { assertInitialized(); - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> checkResultByFile(expectedFile, getHostFile(), ignoreTrailingWhitespaces)); + ApplicationManager.getApplication().invokeAndWait(() -> checkResultByFile(expectedFile, getHostFile(), ignoreTrailingWhitespaces)); } @Override public void checkResultByFile(@NotNull String filePath, @NotNull String expectedFile, boolean ignoreTrailingWhitespaces) { assertInitialized(); - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> checkResultByFile(expectedFile, getFileToCheck(filePath), ignoreTrailingWhitespaces)); + ApplicationManager.getApplication().invokeAndWait(() -> checkResultByFile(expectedFile, getFileToCheck(filePath), ignoreTrailingWhitespaces)); } private PsiFile getFileToCheck(String filePath) { diff --git a/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/FileBasedTest.java b/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/FileBasedTest.java index d5849685a544..0a438cef783f 100644 --- a/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/FileBasedTest.java +++ b/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/FileBasedTest.java @@ -17,9 +17,9 @@ package com.intellij.testFramework.vcs; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory; -import com.intellij.util.ui.UIUtil; import org.junit.After; import org.junit.Before; @@ -40,13 +40,6 @@ public abstract class FileBasedTest { @After public void tearDown() throws Exception { myProject = null; - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { - try { - myProjectFixture.tearDown(); - } - catch (Exception e) { - throw new RuntimeException(e); - } - }); + EdtTestUtil.runInEdtAndWait(() -> myProjectFixture.tearDown()); } } diff --git a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/changes/committed/ExternalChangesDetectionVcsTest.java b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/changes/committed/ExternalChangesDetectionVcsTest.java index f37c56ccd37c..ce7aeafeb7f7 100644 --- a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/changes/committed/ExternalChangesDetectionVcsTest.java +++ b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/changes/committed/ExternalChangesDetectionVcsTest.java @@ -24,11 +24,11 @@ import com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory; import com.intellij.testFramework.fixtures.TempDirTestFixture; import com.intellij.testFramework.vcs.AbstractJunitVcsTestCase; import com.intellij.util.Processor; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.junit.After; import org.junit.Assert; @@ -53,50 +53,40 @@ public class ExternalChangesDetectionVcsTest extends AbstractJunitVcsTestCase { @Before public void setUp() { - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { - try { - final IdeaTestFixtureFactory fixtureFactory = IdeaTestFixtureFactory.getFixtureFactory(); - myTempDirTestFixture = fixtureFactory.createTempDirTestFixture(); - myTempDirTestFixture.setUp(); + EdtTestUtil.runInEdtAndWait(() -> { + final IdeaTestFixtureFactory fixtureFactory = IdeaTestFixtureFactory.getFixtureFactory(); + myTempDirTestFixture = fixtureFactory.createTempDirTestFixture(); + myTempDirTestFixture.setUp(); - myClientRoot = new File(myTempDirTestFixture.getTempDirPath(), "clientroot"); - myClientRoot.mkdir(); + myClientRoot = new File(myTempDirTestFixture.getTempDirPath(), "clientroot"); + myClientRoot.mkdir(); - initProject(myClientRoot, ExternalChangesDetectionVcsTest.this.getTestName()); + initProject(myClientRoot, ExternalChangesDetectionVcsTest.this.getTestName()); - myVcs = new MockAbstractVcs(myProject); - myVcs.setChangeProvider(new MyMockChangeProvider()); - myVcsManager = (ProjectLevelVcsManagerImpl)ProjectLevelVcsManager.getInstance(myProject); - myVcsManager.registerVcs(myVcs); - myVcsManager.setDirectoryMapping("", myVcs.getName()); + myVcs = new MockAbstractVcs(myProject); + myVcs.setChangeProvider(new MyMockChangeProvider()); + myVcsManager = (ProjectLevelVcsManagerImpl)ProjectLevelVcsManager.getInstance(myProject); + myVcsManager.registerVcs(myVcs); + myVcsManager.setDirectoryMapping("", myVcs.getName()); - myLFS = LocalFileSystem.getInstance(); - myChangeListManager = ChangeListManager.getInstance(myProject); - myVcsDirtyScopeManager = VcsDirtyScopeManager.getInstance(myProject); - } - catch (Exception e) { - throw new RuntimeException(e); - } + myLFS = LocalFileSystem.getInstance(); + myChangeListManager = ChangeListManager.getInstance(myProject); + myVcsDirtyScopeManager = VcsDirtyScopeManager.getInstance(myProject); }); } @After public void tearDown() { - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { - try { - myVcsManager.unregisterVcs(myVcs); - myVcs = null; - myVcsManager = null; - myChangeListManager = null; - myVcsDirtyScopeManager = null; - tearDownProject(); - myTempDirTestFixture.tearDown(); - myTempDirTestFixture = null; - FileUtil.delete(myClientRoot); - } - catch (Exception e) { - throw new RuntimeException(e); - } + EdtTestUtil.runInEdtAndWait(() -> { + myVcsManager.unregisterVcs(myVcs); + myVcs = null; + myVcsManager = null; + myChangeListManager = null; + myVcsDirtyScopeManager = null; + tearDownProject(); + myTempDirTestFixture.tearDown(); + myTempDirTestFixture = null; + FileUtil.delete(myClientRoot); }); } diff --git a/plugins/hg4idea/testSrc/hg4idea/test/validator/HgReferenceValidatorTest.java b/plugins/hg4idea/testSrc/hg4idea/test/validator/HgReferenceValidatorTest.java index 5e2debbdca18..06f3dcb5f99f 100644 --- a/plugins/hg4idea/testSrc/hg4idea/test/validator/HgReferenceValidatorTest.java +++ b/plugins/hg4idea/testSrc/hg4idea/test/validator/HgReferenceValidatorTest.java @@ -15,8 +15,8 @@ */ package hg4idea.test.validator; +import com.intellij.testFramework.EdtTestUtil; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.UIUtil; import hg4idea.test.HgPlatformTest; import org.jetbrains.annotations.NotNull; import org.junit.After; @@ -63,14 +63,7 @@ public class HgReferenceValidatorTest extends HgPlatformTest { @Override @After public void tearDown() { - UIUtil.invokeAndWaitIfNeeded((Runnable)() -> { - try { - HgReferenceValidatorTest.super.tearDown(); - } - catch (Exception e) { - throw new RuntimeException(e); - } - }); + EdtTestUtil.runInEdtAndWait(() -> super.tearDown()); } @SuppressWarnings({"JUnitTestCaseWithNonTrivialConstructors", "UnusedParameters"})