From e835485f6247838291fec8a2e94ce4b0e7fe3f2f Mon Sep 17 00:00:00 2001 From: Anastasia Katsman Date: Mon, 17 Nov 2025 22:17:54 +0100 Subject: [PATCH] AT-3511: initial commit for sample test with fixtures not yet working GitOrigin-RevId: 449ae4455b2412b838a5575c842e72c9251d4026 --- .idea/modules.xml | 2 + build/bazel-generated-file-list.txt | 2 + .../junit5/codeInsight/BUILD.bazel | 9 ++- ...tform.testFramework.junit5.codeInsight.iml | 1 + ...tform.testFramework.junit5.codeInsight.xml | 5 ++ .../BUILD.bazel | 80 +++++++++++++++++++ ...ntellij.lambda.sampleTestsWithFixtures.iml | 65 +++++++++++++++ .../plugin/BUILD.bazel | 17 ++++ ....lambda.sampleTestsWithFixtures.plugin.iml | 11 +++ .../plugin/testResources/META-INF/plugin.xml | 28 +++++++ .../org.junit.jupiter.api.extension.Extension | 1 + ...j.lambda.sampleTestsWithFixtures._test.xml | 34 ++++++++ .../sampleTestsWithFixtures/SampleTest.kt | 39 +++++++++ .../util/SetLambdaPluginCallback.kt | 19 +++++ .../util/TestFixtureApi.kt | 40 ++++++++++ 15 files changed, 352 insertions(+), 1 deletion(-) create mode 100644 platform/testFramework/junit5/codeInsight/resources/intellij.platform.testFramework.junit5.codeInsight.xml create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/BUILD.bazel create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/intellij.lambda.sampleTestsWithFixtures.iml create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/plugin/BUILD.bazel create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/plugin/intellij.lambda.sampleTestsWithFixtures.plugin.iml create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/plugin/testResources/META-INF/plugin.xml create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/resources/META-INF/services/org.junit.jupiter.api.extension.Extension create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/resources/intellij.lambda.sampleTestsWithFixtures._test.xml create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/SampleTest.kt create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/SetLambdaPluginCallback.kt create mode 100644 tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/TestFixtureApi.kt diff --git a/.idea/modules.xml b/.idea/modules.xml index 679920988069..099a050ea0d5 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -812,6 +812,8 @@ + + diff --git a/build/bazel-generated-file-list.txt b/build/bazel-generated-file-list.txt index 3d184cda23e8..680c7d60f8e4 100644 --- a/build/bazel-generated-file-list.txt +++ b/build/bazel-generated-file-list.txt @@ -1495,6 +1495,8 @@ tools/devLauncher tools/devLauncher/tests tools/intellij.lambda.sampleTests tools/intellij.lambda.sampleTests/plugin +tools/intellij.lambda.sampleTestsWithFixtures +tools/intellij.lambda.sampleTestsWithFixtures/plugin tools/intellij.lambda.testFramework tools/intellij.lambda.testFramework/plugin tools/intellij.tools.ide.metrics.benchmark diff --git a/platform/testFramework/junit5/codeInsight/BUILD.bazel b/platform/testFramework/junit5/codeInsight/BUILD.bazel index cab1c87ba83d..7c6707a27c65 100644 --- a/platform/testFramework/junit5/codeInsight/BUILD.bazel +++ b/platform/testFramework/junit5/codeInsight/BUILD.bazel @@ -1,11 +1,18 @@ ### auto-generated section `build intellij.platform.testFramework.junit5.codeInsight` start -load("@rules_jvm//:jvm.bzl", "jvm_library") +load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup") + +resourcegroup( + name = "codeInsight_resources", + srcs = glob(["resources/**/*"]), + strip_prefix = "resources" +) jvm_library( name = "codeInsight", module_name = "intellij.platform.testFramework.junit5.codeInsight", visibility = ["//visibility:public"], srcs = glob(["src/**/*.kt", "src/**/*.java", "src/**/*.form"], allow_empty = True), + resources = [":codeInsight_resources"], deps = [ "//platform/testFramework", "//platform/testFramework/junit5", diff --git a/platform/testFramework/junit5/codeInsight/intellij.platform.testFramework.junit5.codeInsight.iml b/platform/testFramework/junit5/codeInsight/intellij.platform.testFramework.junit5.codeInsight.iml index 1d59049e80d5..45714b861749 100644 --- a/platform/testFramework/junit5/codeInsight/intellij.platform.testFramework.junit5.codeInsight.iml +++ b/platform/testFramework/junit5/codeInsight/intellij.platform.testFramework.junit5.codeInsight.iml @@ -3,6 +3,7 @@ + diff --git a/platform/testFramework/junit5/codeInsight/resources/intellij.platform.testFramework.junit5.codeInsight.xml b/platform/testFramework/junit5/codeInsight/resources/intellij.platform.testFramework.junit5.codeInsight.xml new file mode 100644 index 000000000000..61ddbd5e999c --- /dev/null +++ b/platform/testFramework/junit5/codeInsight/resources/intellij.platform.testFramework.junit5.codeInsight.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/BUILD.bazel b/tools/intellij.lambda.sampleTestsWithFixtures/BUILD.bazel new file mode 100644 index 000000000000..31d7400de69e --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/BUILD.bazel @@ -0,0 +1,80 @@ +### auto-generated section `build intellij.lambda.sampleTestsWithFixtures` start +load("//build:compiler-options.bzl", "create_kotlinc_options") +load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup") + +create_kotlinc_options( + name = "custom_lambda-sampleTestsWithFixtures", + x_context_parameters = True +) + +resourcegroup( + name = "lambda-sampleTestsWithFixtures_test_resources", + srcs = glob(["resources/**/*"]), + strip_prefix = "resources" +) + +jvm_library( + name = "lambda-sampleTestsWithFixtures_test_lib", + module_name = "intellij.lambda.sampleTestsWithFixtures", + visibility = ["//visibility:public"], + srcs = glob(["tests/**/*.kt", "tests/**/*.java", "tests/**/*.form"], allow_empty = True), + resources = [":lambda-sampleTestsWithFixtures_test_resources"], + kotlinc_opts = ":custom_lambda-sampleTestsWithFixtures", + deps = [ + "@lib//:kodein-di-jvm", + "@lib//:kotlin-stdlib", + "@lib//:kotlin-test", + "@lib//:assert_j", + "@lib//:rd-framework", + "@lib//:rd-core", + "//libraries/kotlin/reflect", + "//tools/intellij.tools.ide.starter:ide-starter", + "//tools/intellij.tools.ide.starter.junit5:ide-starter-junit5", + "//tools/intellij.tools.ide.starter.junit5:ide-starter-junit5_test_lib", + "//tools/intellij.tools.ide.starter.driver:ide-starter-driver", + "//tools/intellij.tools.ide.starter.build.server:ide-starter-build-server", + "//platform/core-api:core", + "//platform/core-impl", + "//platform/core-ui", + "//platform/lang-api:lang", + "//platform/lang-impl", + "//platform/platform-api:ide", + "//platform/editor-ui-api:editor-ui", + "//platform/editor-ui-ex:editor-ex", + "//platform/testFramework/junit5", + "//platform/testFramework/junit5:junit5_test_lib", + "//platform/code-style-api:codeStyle", + "//platform/execution-impl", + "//platform/platform-impl:ide-impl", + "//platform/platform-impl:ide-impl_test_lib", + "//platform/remoteDev-util", + "//platform/remoteDev-util:remoteDev-util_test_lib", + "//platform/analysis-api:analysis", + "//plugins/performanceTesting/core:performanceTesting", + "//plugins/performanceTesting/core:performanceTesting_test_lib", + "//platform/platform-impl/codeinsight-inline:ide-codeinsight-inline", + "//platform/xdebugger-api:debugger", + "//platform/xdebugger-impl:debugger-impl", + "//platform/xdebugger-impl:debugger-impl_test_lib", + "//platform/util/concurrency", + "//platform/util/concurrency:concurrency_test_lib", + "//platform/usageView", + "//tools/intellij.lambda.testFramework:lambda-testFramework", + "//libraries/junit5", + "//libraries/junit5-launcher", + "//libraries/junit5-params", + "//libraries/junit5-pioneer", + "//platform/testFramework", + "//platform/testFramework:testFramework_test_lib", + ] +) +### auto-generated section `build intellij.lambda.sampleTestsWithFixtures` end + +### auto-generated section `test intellij.lambda.sampleTestsWithFixtures` start +load("@community//build:tests-options.bzl", "jps_test") + +jps_test( + name = "lambda-sampleTestsWithFixtures_test", + runtime_deps = [":lambda-sampleTestsWithFixtures_test_lib"] +) +### auto-generated section `test intellij.lambda.sampleTestsWithFixtures` end \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/intellij.lambda.sampleTestsWithFixtures.iml b/tools/intellij.lambda.sampleTestsWithFixtures/intellij.lambda.sampleTestsWithFixtures.iml new file mode 100644 index 000000000000..eca0e9006dee --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/intellij.lambda.sampleTestsWithFixtures.iml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/plugin/BUILD.bazel b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/BUILD.bazel new file mode 100644 index 000000000000..6b8db4083be4 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/BUILD.bazel @@ -0,0 +1,17 @@ +### auto-generated section `build intellij.lambda.sampleTestsWithFixtures.plugin` start +load("@rules_jvm//:jvm.bzl", "jvm_library", "resourcegroup") + +resourcegroup( + name = "plugin_test_resources", + srcs = glob(["testResources/**/*"]), + strip_prefix = "testResources" +) + +jvm_library( + name = "plugin_test_lib", + module_name = "intellij.lambda.sampleTestsWithFixtures.plugin", + visibility = ["//visibility:public"], + srcs = glob([], allow_empty = True), + resources = [":plugin_test_resources"] +) +### auto-generated section `build intellij.lambda.sampleTestsWithFixtures.plugin` end \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/plugin/intellij.lambda.sampleTestsWithFixtures.plugin.iml b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/intellij.lambda.sampleTestsWithFixtures.plugin.iml new file mode 100644 index 000000000000..dafc111814c7 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/intellij.lambda.sampleTestsWithFixtures.plugin.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/plugin/testResources/META-INF/plugin.xml b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/testResources/META-INF/plugin.xml new file mode 100644 index 000000000000..297f123a6faf --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/plugin/testResources/META-INF/plugin.xml @@ -0,0 +1,28 @@ + + com.intellij.lambda.sampleTestsWithFixtures.plugin + JetBrains + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/tools/intellij.lambda.sampleTestsWithFixtures/resources/META-INF/services/org.junit.jupiter.api.extension.Extension new file mode 100644 index 000000000000..ee0023c935f9 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/resources/META-INF/services/org.junit.jupiter.api.extension.Extension @@ -0,0 +1 @@ +com.intellij.lambda.sampleTestsWithFixtures.util.SetLambdaPluginCallback \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/resources/intellij.lambda.sampleTestsWithFixtures._test.xml b/tools/intellij.lambda.sampleTestsWithFixtures/resources/intellij.lambda.sampleTestsWithFixtures._test.xml new file mode 100644 index 000000000000..67139820dd10 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/resources/intellij.lambda.sampleTestsWithFixtures._test.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/SampleTest.kt b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/SampleTest.kt new file mode 100644 index 000000000000..ead1e17c4fd4 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/SampleTest.kt @@ -0,0 +1,39 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.lambda.sampleTestsWithFixtures + +import com.intellij.lambda.sampleTestsWithFixtures.util.openNewEditor +import com.intellij.lambda.testFramework.junit.ExecuteInMonolithAndSplitMode +import com.intellij.lambda.testFramework.junit.IdeRunMode +import com.intellij.lambda.testFramework.testApi.editor.openFile +import com.intellij.lambda.testFramework.testApi.getProject +import com.intellij.lambda.testFramework.testApi.getProjects +import com.intellij.lambda.testFramework.testApi.waitForProject +import com.intellij.lambda.testFramework.utils.BackgroundRunWithLambda +import com.intellij.openapi.diagnostic.Logger +import kotlinx.coroutines.runBlocking +import org.junit.jupiter.api.TestTemplate +import kotlin.time.Duration.Companion.seconds + +@ExecuteInMonolithAndSplitMode +class SampleTest { + @TestTemplate + fun `serialized test`(ide: BackgroundRunWithLambda) = runBlocking { + ide.apply { + runInBackend { + //waitForProject(20.seconds) + } + + run { + openNewEditor("/src/com/example/Foo.java") + Logger.getInstance("test").warn("Projects: " + getProjects().joinToString { it.name }) + } + + runInBackend { + Logger.getInstance("test").warn("backend Projects: " + getProject()) + openFile("src/com/example/Foo.java", waitForReadyState = false, requireFocus = false) + } + } + Unit + } +} + diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/SetLambdaPluginCallback.kt b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/SetLambdaPluginCallback.kt new file mode 100644 index 000000000000..dc9a85dba26e --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/SetLambdaPluginCallback.kt @@ -0,0 +1,19 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.lambda.sampleTestsWithFixtures.util + +import com.intellij.lambda.testFramework.utils.LambdaTestPluginHolder +import org.junit.jupiter.api.extension.AfterAllCallback +import org.junit.jupiter.api.extension.BeforeAllCallback +import org.junit.jupiter.api.extension.ExtensionContext + +class SetLambdaPluginCallback : BeforeAllCallback, AfterAllCallback { + override fun beforeAll(context: ExtensionContext) { + LambdaTestPluginHolder.setupAdditionalLambdaPlugin("intellij.lambda.sampleTestsWithFixtures._test", + "intellij.lambda.sampleTestsWithFixtures.plugin", + "lambda-sampleTestsWithFixtures-plugin") + } + + override fun afterAll(context: ExtensionContext) { + LambdaTestPluginHolder.cleanUpAdditionalLambdaPlugin() + } +} \ No newline at end of file diff --git a/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/TestFixtureApi.kt b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/TestFixtureApi.kt new file mode 100644 index 000000000000..40e762002a01 --- /dev/null +++ b/tools/intellij.lambda.sampleTestsWithFixtures/tests/com/intellij/lambda/sampleTestsWithFixtures/util/TestFixtureApi.kt @@ -0,0 +1,40 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.lambda.sampleTestsWithFixtures.util + +import com.intellij.remoteDev.tests.LambdaIdeContext +import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory +import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl +import com.intellij.testFramework.fixtures.impl.TempDirTestFixtureImpl +import kotlinx.coroutines.currentCoroutineContext +import kotlinx.coroutines.job + +context(lambdaIdeContext: LambdaIdeContext) +suspend fun openNewEditor(relativePath: String) { + val projectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder("Test") + val codeInsightFixture = CodeInsightTestFixtureImpl(projectBuilder.fixture, TempDirTestFixtureImpl()) + codeInsightFixture.setUp() + codeInsightFixture.openFileInEditor( + codeInsightFixture + .addFileToProject( + relativePath, + // language=java + """ + package com.example; + + class Foo { + private boolean unboxedZ = false; + private byte unboxedB = 0; + private char unboxedC = 'a'; + private double unboxedD = 0.0; + private float unboxedF = 0.0f; + private int unboxedI = 0; + private long unboxedJ = 0l; + private short unboxedS = 0; + } + """ + .trimIndent(), + ) + .virtualFile + ) + currentCoroutineContext().job.invokeOnCompletion { codeInsightFixture.tearDown() } +}