[TEST] Migrate AbstractDiagnosticsNativeTest to new test runners
This commit is contained in:
+10
-10
@@ -3,52 +3,52 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.checkers;
|
||||
package org.jetbrains.kotlin.test.runners;
|
||||
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||
/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("compiler/testData/diagnostics/nativeTests")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTest {
|
||||
private void runTest(String testDataFilePath) throws Exception {
|
||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllFilesPresentInNativeTests() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/nativeTests"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("sharedImmutable.kt")
|
||||
public void testSharedImmutable() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/nativeTests/sharedImmutable.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("threadLocal.kt")
|
||||
public void testThreadLocal() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/nativeTests/threadLocal.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("throws.kt")
|
||||
public void testThrows() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/nativeTests/throws.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("throwsClash.kt")
|
||||
public void testThrowsClash() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/nativeTests/throwsClash.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("topLevelSingleton.kt")
|
||||
public void testTopLevelSingleton() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/nativeTests/topLevelSingleton.kt");
|
||||
+51
-20
@@ -9,6 +9,8 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace
|
||||
@@ -17,8 +19,8 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys.JVM_TARGET
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.container.get
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.context.ProjectContext
|
||||
import org.jetbrains.kotlin.context.withModule
|
||||
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider
|
||||
@@ -31,6 +33,7 @@ import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS
|
||||
import org.jetbrains.kotlin.js.config.JsConfig
|
||||
import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.native.FakeTopDownAnalyzerFacadeForNative
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
@@ -44,6 +47,7 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||
import org.jetbrains.kotlin.test.model.FrontendFacade
|
||||
@@ -99,7 +103,6 @@ class ClassicFrontendFacade(
|
||||
configuration,
|
||||
packagePartProviderFactory,
|
||||
ktFiles,
|
||||
languageVersionSettings,
|
||||
dependentDescriptors,
|
||||
hasCommonModules
|
||||
)
|
||||
@@ -131,7 +134,6 @@ class ClassicFrontendFacade(
|
||||
configuration: CompilerConfiguration,
|
||||
packagePartProviderFactory: (GlobalSearchScope) -> JvmPackagePartProvider,
|
||||
files: List<KtFile>,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
dependentDescriptors: List<ModuleDescriptorImpl>,
|
||||
hasCommonModules: Boolean
|
||||
): AnalysisResult {
|
||||
@@ -147,8 +149,8 @@ class ClassicFrontendFacade(
|
||||
hasCommonModules
|
||||
)
|
||||
targetPlatform.isJs() -> performJsModuleResolve(project, configuration, files, dependentDescriptors)
|
||||
targetPlatform.isNative() -> TODO()
|
||||
targetPlatform.isCommon() -> performCommonModuleResolve(module, files, languageVersionSettings)
|
||||
targetPlatform.isNative() -> performNativeModuleResolve(module, project, files)
|
||||
targetPlatform.isCommon() -> performCommonModuleResolve(module, files)
|
||||
else -> error("Should not be here")
|
||||
}
|
||||
}
|
||||
@@ -175,21 +177,12 @@ class ClassicFrontendFacade(
|
||||
)
|
||||
}
|
||||
|
||||
val projectContext = ProjectContext(project, "test project context")
|
||||
val storageManager = projectContext.storageManager
|
||||
|
||||
val builtIns = JvmBuiltIns(storageManager, JvmBuiltIns.Kind.FROM_CLASS_LOADER)
|
||||
val moduleDescriptor = ModuleDescriptorImpl(Name.special("<${module.name}>"), storageManager, builtIns, module.targetPlatform)
|
||||
val dependencies = buildList {
|
||||
add(moduleDescriptor)
|
||||
add(moduleDescriptor.builtIns.builtInsModule)
|
||||
addAll(dependentDescriptors)
|
||||
}
|
||||
moduleDescriptor.setDependencies(dependencies)
|
||||
|
||||
val moduleContentScope = GlobalSearchScope.allScope(project)
|
||||
val moduleClassResolver = SingleModuleClassResolver()
|
||||
val moduleContext = projectContext.withModule(moduleDescriptor)
|
||||
val moduleContext = createModuleContext(module, project, dependentDescriptors) {
|
||||
JvmBuiltIns(it, JvmBuiltIns.Kind.FROM_CLASS_LOADER)
|
||||
}
|
||||
val moduleDescriptor = moduleContext.module as ModuleDescriptorImpl
|
||||
val jvmTarget = configuration[JVM_TARGET] ?: JvmTarget.DEFAULT
|
||||
val container = createContainerForLazyResolveWithJava(
|
||||
JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), // TODO(dsavvinov): do not pass JvmTarget around
|
||||
@@ -243,16 +236,32 @@ class ClassicFrontendFacade(
|
||||
)
|
||||
}
|
||||
|
||||
private fun performNativeModuleResolve(
|
||||
module: TestModule,
|
||||
project: Project,
|
||||
files: List<KtFile>,
|
||||
): AnalysisResult {
|
||||
val moduleTrace = NoScopeRecordCliBindingTrace()
|
||||
val moduleContext = createModuleContext(module, project, dependentDescriptors = emptyList()) {
|
||||
DefaultBuiltIns()
|
||||
}
|
||||
return FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace(
|
||||
files,
|
||||
moduleTrace,
|
||||
moduleContext,
|
||||
module.languageVersionSettings
|
||||
)
|
||||
}
|
||||
|
||||
private fun performCommonModuleResolve(
|
||||
module: TestModule,
|
||||
files: List<KtFile>,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
): AnalysisResult {
|
||||
return CommonResolverForModuleFactory.analyzeFiles(
|
||||
files,
|
||||
Name.special("<${module.name}>"),
|
||||
dependOnBuiltIns = true,
|
||||
languageVersionSettings,
|
||||
module.languageVersionSettings,
|
||||
module.targetPlatform,
|
||||
// TODO: add dependency manager
|
||||
) { _ ->
|
||||
@@ -260,4 +269,26 @@ class ClassicFrontendFacade(
|
||||
MetadataPartProvider.Empty
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
private fun createModuleContext(
|
||||
module: TestModule,
|
||||
project: Project,
|
||||
dependentDescriptors: List<ModuleDescriptorImpl>,
|
||||
builtInsFactory: (StorageManager) -> KotlinBuiltIns,
|
||||
): ModuleContext {
|
||||
val projectContext = ProjectContext(project, "test project context")
|
||||
val storageManager = projectContext.storageManager
|
||||
|
||||
val builtIns = builtInsFactory(storageManager)
|
||||
val moduleDescriptor = ModuleDescriptorImpl(Name.special("<${module.name}>"), storageManager, builtIns, module.targetPlatform)
|
||||
val dependencies = buildList {
|
||||
add(moduleDescriptor)
|
||||
add(moduleDescriptor.builtIns.builtInsModule)
|
||||
addAll(dependentDescriptors)
|
||||
}
|
||||
moduleDescriptor.setDependencies(dependencies)
|
||||
|
||||
return projectContext.withModule(moduleDescriptor)
|
||||
}
|
||||
}
|
||||
|
||||
+4
@@ -39,6 +39,10 @@ fun main(args: Array<String>) {
|
||||
testClass<AbstractDiagnosticsTestWithJvmIrBackend> {
|
||||
model("diagnostics/testsWithJvmBackend", targetBackend = TargetBackend.JVM_IR)
|
||||
}
|
||||
|
||||
testClass<AbstractDiagnosticsNativeTest> {
|
||||
model("diagnostics/nativeTests")
|
||||
}
|
||||
}
|
||||
|
||||
testGroup("compiler/tests-common-new/tests-gen", "compiler/fir/analysis-tests/testData") {
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.runners
|
||||
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
|
||||
import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler
|
||||
import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler
|
||||
import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor
|
||||
import org.jetbrains.kotlin.test.model.BackendKind
|
||||
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||
import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider
|
||||
import org.jetbrains.kotlin.test.services.CoroutineHelpersSourceFilesProvider
|
||||
|
||||
abstract class AbstractDiagnosticsNativeTest : AbstractKotlinCompilerTest() {
|
||||
override fun TestConfigurationBuilder.configuration() {
|
||||
globalDefaults {
|
||||
frontend = FrontendKinds.ClassicFrontend
|
||||
backend = BackendKind.NoBackend
|
||||
targetPlatform = NativePlatforms.unspecifiedNativePlatform
|
||||
dependencyKind = DependencyKind.Source
|
||||
}
|
||||
|
||||
defaultDirectives {
|
||||
+JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
|
||||
}
|
||||
|
||||
enableMetaInfoHandler()
|
||||
|
||||
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
||||
useAdditionalSourceProviders(
|
||||
::AdditionalDiagnosticsSourceFilesProvider,
|
||||
::CoroutineHelpersSourceFilesProvider,
|
||||
)
|
||||
|
||||
useFrontendFacades(::ClassicFrontendFacade)
|
||||
useFrontendHandlers(
|
||||
::DeclarationsDumpHandler,
|
||||
::ClassicDiagnosticsHandler,
|
||||
)
|
||||
}
|
||||
}
|
||||
+14
-1
@@ -20,6 +20,10 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.CompilerConfigurationKey
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.platform.konan.isNative
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.model.TestFile
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
@@ -59,11 +63,20 @@ class CompilerConfigurationProviderImpl(
|
||||
|
||||
override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment {
|
||||
return cache.getOrPut(module) {
|
||||
val platform = module.targetPlatform
|
||||
val configFiles = when {
|
||||
platform.isJvm() -> EnvironmentConfigFiles.JVM_CONFIG_FILES
|
||||
platform.isJs() -> EnvironmentConfigFiles.JS_CONFIG_FILES
|
||||
platform.isNative() -> EnvironmentConfigFiles.NATIVE_CONFIG_FILES
|
||||
// TODO: is it correct?
|
||||
platform.isCommon() -> EnvironmentConfigFiles.METADATA_CONFIG_FILES
|
||||
else -> error("Unknown platform: $platform")
|
||||
}
|
||||
val projectEnv = KotlinCoreEnvironment.createProjectEnvironmentForTests(testRootDisposable, CompilerConfiguration())
|
||||
KotlinCoreEnvironment.createForTests(
|
||||
projectEnv,
|
||||
createCompilerConfiguration(module, projectEnv.project),
|
||||
EnvironmentConfigFiles.JVM_CONFIG_FILES
|
||||
configFiles
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-48
@@ -3,12 +3,9 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.checkers
|
||||
package org.jetbrains.kotlin.native
|
||||
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.container.get
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
@@ -16,7 +13,6 @@ import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.frontend.di.configureModule
|
||||
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
@@ -24,49 +20,8 @@ import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerService
|
||||
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import java.util.*
|
||||
|
||||
abstract class AbstractDiagnosticsNativeTest : AbstractDiagnosticsTest() {
|
||||
|
||||
override fun getEnvironmentConfigFiles(): EnvironmentConfigFiles = EnvironmentConfigFiles.NATIVE_CONFIG_FILES
|
||||
|
||||
override fun analyzeModuleContents(
|
||||
moduleContext: ModuleContext,
|
||||
files: List<KtFile>,
|
||||
moduleTrace: BindingTrace,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
separateModules: Boolean,
|
||||
jvmTarget: JvmTarget
|
||||
): AnalysisResult = FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace(
|
||||
files,
|
||||
moduleTrace,
|
||||
moduleContext,
|
||||
languageVersionSettings
|
||||
)
|
||||
|
||||
override fun shouldSkipJvmSignatureDiagnostics(groupedByModule: Map<TestModule?, List<TestFile>>): Boolean = true
|
||||
|
||||
override fun createModule(moduleName: String, storageManager: StorageManager): ModuleDescriptorImpl =
|
||||
ModuleDescriptorImpl(Name.special("<$moduleName>"), storageManager, DefaultBuiltIns())
|
||||
|
||||
override fun createSealedModule(storageManager: StorageManager): ModuleDescriptorImpl {
|
||||
val module = createModule("kotlin-native-test-module", storageManager)
|
||||
|
||||
val dependencies = ArrayList<ModuleDescriptorImpl>()
|
||||
|
||||
dependencies.add(module)
|
||||
dependencies.addAll(getAdditionalDependencies(module))
|
||||
dependencies.add(module.builtIns.builtInsModule)
|
||||
|
||||
module.setDependencies(dependencies)
|
||||
|
||||
return module
|
||||
}
|
||||
}
|
||||
|
||||
private object FakeTopDownAnalyzerFacadeForNative {
|
||||
|
||||
object FakeTopDownAnalyzerFacadeForNative {
|
||||
fun analyzeFilesWithGivenTrace(
|
||||
files: Collection<KtFile>,
|
||||
trace: BindingTrace,
|
||||
@@ -80,7 +35,7 @@ private object FakeTopDownAnalyzerFacadeForNative {
|
||||
languageVersionSettings
|
||||
)
|
||||
|
||||
analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
|
||||
analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files as Collection<com.intellij.psi.PsiElement>)
|
||||
return AnalysisResult.success(trace.bindingContext, moduleContext.module)
|
||||
}
|
||||
}
|
||||
@@ -71,10 +71,6 @@ fun main(args: Array<String>) {
|
||||
model("diagnostics/testsWithJsStdLibAndBackendCompilation")
|
||||
}
|
||||
|
||||
testClass<AbstractDiagnosticsNativeTest> {
|
||||
model("diagnostics/nativeTests")
|
||||
}
|
||||
|
||||
testClass<AbstractDiagnosticsWithJdk15Test> {
|
||||
model("diagnostics/testsWithJava15")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user