From bc420f7dee5a4bdbe2e08235d813209bc36f8b02 Mon Sep 17 00:00:00 2001 From: Alex Plate Date: Thu, 28 Mar 2024 16:36:10 +0200 Subject: [PATCH] [Workspace Model] Make `async model update` test stable Previously, it was around 99.8% success rate. The workspace model is must probably affected by parallel execution of tests where another update of the model happens in the middle of run of this test GitOrigin-RevId: 2644511c899ec69572876593d962203ccbdfef7f --- .../workspaceModel/ide/WorkspaceModelTest.kt | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/WorkspaceModelTest.kt b/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/WorkspaceModelTest.kt index 255f0dd03b82..13e42a3cdef3 100644 --- a/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/WorkspaceModelTest.kt +++ b/platform/workspace/jps/tests/testSrc/com/intellij/workspaceModel/ide/WorkspaceModelTest.kt @@ -18,13 +18,15 @@ import com.intellij.testFramework.ApplicationRule import com.intellij.testFramework.rules.ProjectModelRule import com.intellij.testFramework.workspaceModel.updateProjectModel import com.intellij.workspaceModel.ide.impl.WorkspaceModelImpl -import junit.framework.Assert.* +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertFalse import org.junit.Assert import org.junit.ClassRule import org.junit.Rule import org.junit.Test import org.junit.jupiter.api.assertThrows import kotlin.test.assertContains +import kotlin.test.assertTrue class WorkspaceModelTest { companion object { @@ -54,20 +56,21 @@ class WorkspaceModelTest { @Test fun `async model update`() { - val model = WorkspaceModel.getInstance(projectModel.project) - val builderSnapshot = (model as WorkspaceModelInternal).getBuilderSnapshot() - builderSnapshot.builder addEntity ModuleEntity("MyModule", emptyList(), object : EntitySource {}) + // Run write action on root to prevent parallel tests to affect the workspace model + runWriteActionAndWait { + val model = WorkspaceModel.getInstance(projectModel.project) + val builderSnapshot = (model as WorkspaceModelInternal).getBuilderSnapshot() + builderSnapshot.builder addEntity ModuleEntity("MyModule", emptyList(), object : EntitySource {}) - val replacement = builderSnapshot.getStorageReplacement() + val replacement = builderSnapshot.getStorageReplacement() - val updated = runWriteActionAndWait { - (model as WorkspaceModelInternal).replaceProjectModel(replacement) + val updated = model.replaceProjectModel(replacement) + + assertTrue(updated) + + val moduleEntity = WorkspaceModel.getInstance(projectModel.project).currentSnapshot.entities(ModuleEntity::class.java).single() + assertEquals("MyModule", moduleEntity.name) } - - assertTrue(updated) - - val moduleEntity = WorkspaceModel.getInstance(projectModel.project).currentSnapshot.entities(ModuleEntity::class.java).single() - assertEquals("MyModule", moduleEntity.name) } @Test