[TEST] Migrate AbstractDiagnosticsNativeTest to new test runners

This commit is contained in:
Dmitriy Novozhilov
2020-12-14 18:36:46 +03:00
parent e7f8486078
commit 2aa1cb7451
7 changed files with 130 additions and 83 deletions
@@ -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. * 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 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.util.KtTestUtil;
import org.jetbrains.kotlin.test.TestMetadata; 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.io.File;
import java.util.regex.Pattern; 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") @SuppressWarnings("all")
@TestMetadata("compiler/testData/diagnostics/nativeTests") @TestMetadata("compiler/testData/diagnostics/nativeTests")
@TestDataPath("$PROJECT_ROOT") @TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTest { public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTest {
private void runTest(String testDataFilePath) throws Exception { @Test
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInNativeTests() throws Exception { public void testAllFilesPresentInNativeTests() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/nativeTests"), Pattern.compile("^(.+)\\.kt$"), null, true); KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/nativeTests"), Pattern.compile("^(.+)\\.kt$"), null, true);
} }
@Test
@TestMetadata("sharedImmutable.kt") @TestMetadata("sharedImmutable.kt")
public void testSharedImmutable() throws Exception { public void testSharedImmutable() throws Exception {
runTest("compiler/testData/diagnostics/nativeTests/sharedImmutable.kt"); runTest("compiler/testData/diagnostics/nativeTests/sharedImmutable.kt");
} }
@Test
@TestMetadata("threadLocal.kt") @TestMetadata("threadLocal.kt")
public void testThreadLocal() throws Exception { public void testThreadLocal() throws Exception {
runTest("compiler/testData/diagnostics/nativeTests/threadLocal.kt"); runTest("compiler/testData/diagnostics/nativeTests/threadLocal.kt");
} }
@Test
@TestMetadata("throws.kt") @TestMetadata("throws.kt")
public void testThrows() throws Exception { public void testThrows() throws Exception {
runTest("compiler/testData/diagnostics/nativeTests/throws.kt"); runTest("compiler/testData/diagnostics/nativeTests/throws.kt");
} }
@Test
@TestMetadata("throwsClash.kt") @TestMetadata("throwsClash.kt")
public void testThrowsClash() throws Exception { public void testThrowsClash() throws Exception {
runTest("compiler/testData/diagnostics/nativeTests/throwsClash.kt"); runTest("compiler/testData/diagnostics/nativeTests/throwsClash.kt");
} }
@Test
@TestMetadata("topLevelSingleton.kt") @TestMetadata("topLevelSingleton.kt")
public void testTopLevelSingleton() throws Exception { public void testTopLevelSingleton() throws Exception {
runTest("compiler/testData/diagnostics/nativeTests/topLevelSingleton.kt"); runTest("compiler/testData/diagnostics/nativeTests/topLevelSingleton.kt");
@@ -9,6 +9,8 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory 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.builtins.jvm.JvmBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace 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
import org.jetbrains.kotlin.config.JVMConfigurationKeys.JVM_TARGET import org.jetbrains.kotlin.config.JVMConfigurationKeys.JVM_TARGET
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.context.withModule
import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider 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.js.config.JsConfig
import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.native.FakeTopDownAnalyzerFacadeForNative
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.platform.js.isJs
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms 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.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider 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.directives.JvmEnvironmentConfigurationDirectives
import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.DependencyKind
import org.jetbrains.kotlin.test.model.FrontendFacade import org.jetbrains.kotlin.test.model.FrontendFacade
@@ -99,7 +103,6 @@ class ClassicFrontendFacade(
configuration, configuration,
packagePartProviderFactory, packagePartProviderFactory,
ktFiles, ktFiles,
languageVersionSettings,
dependentDescriptors, dependentDescriptors,
hasCommonModules hasCommonModules
) )
@@ -131,7 +134,6 @@ class ClassicFrontendFacade(
configuration: CompilerConfiguration, configuration: CompilerConfiguration,
packagePartProviderFactory: (GlobalSearchScope) -> JvmPackagePartProvider, packagePartProviderFactory: (GlobalSearchScope) -> JvmPackagePartProvider,
files: List<KtFile>, files: List<KtFile>,
languageVersionSettings: LanguageVersionSettings,
dependentDescriptors: List<ModuleDescriptorImpl>, dependentDescriptors: List<ModuleDescriptorImpl>,
hasCommonModules: Boolean hasCommonModules: Boolean
): AnalysisResult { ): AnalysisResult {
@@ -147,8 +149,8 @@ class ClassicFrontendFacade(
hasCommonModules hasCommonModules
) )
targetPlatform.isJs() -> performJsModuleResolve(project, configuration, files, dependentDescriptors) targetPlatform.isJs() -> performJsModuleResolve(project, configuration, files, dependentDescriptors)
targetPlatform.isNative() -> TODO() targetPlatform.isNative() -> performNativeModuleResolve(module, project, files)
targetPlatform.isCommon() -> performCommonModuleResolve(module, files, languageVersionSettings) targetPlatform.isCommon() -> performCommonModuleResolve(module, files)
else -> error("Should not be here") 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 moduleContentScope = GlobalSearchScope.allScope(project)
val moduleClassResolver = SingleModuleClassResolver() 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 jvmTarget = configuration[JVM_TARGET] ?: JvmTarget.DEFAULT
val container = createContainerForLazyResolveWithJava( val container = createContainerForLazyResolveWithJava(
JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), // TODO(dsavvinov): do not pass JvmTarget around 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( private fun performCommonModuleResolve(
module: TestModule, module: TestModule,
files: List<KtFile>, files: List<KtFile>,
languageVersionSettings: LanguageVersionSettings,
): AnalysisResult { ): AnalysisResult {
return CommonResolverForModuleFactory.analyzeFiles( return CommonResolverForModuleFactory.analyzeFiles(
files, files,
Name.special("<${module.name}>"), Name.special("<${module.name}>"),
dependOnBuiltIns = true, dependOnBuiltIns = true,
languageVersionSettings, module.languageVersionSettings,
module.targetPlatform, module.targetPlatform,
// TODO: add dependency manager // TODO: add dependency manager
) { _ -> ) { _ ->
@@ -260,4 +269,26 @@ class ClassicFrontendFacade(
MetadataPartProvider.Empty 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)
}
} }
@@ -39,6 +39,10 @@ fun main(args: Array<String>) {
testClass<AbstractDiagnosticsTestWithJvmIrBackend> { testClass<AbstractDiagnosticsTestWithJvmIrBackend> {
model("diagnostics/testsWithJvmBackend", targetBackend = TargetBackend.JVM_IR) model("diagnostics/testsWithJvmBackend", targetBackend = TargetBackend.JVM_IR)
} }
testClass<AbstractDiagnosticsNativeTest> {
model("diagnostics/nativeTests")
}
} }
testGroup("compiler/tests-common-new/tests-gen", "compiler/fir/analysis-tests/testData") { testGroup("compiler/tests-common-new/tests-gen", "compiler/fir/analysis-tests/testData") {
@@ -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,
)
}
}
@@ -20,6 +20,10 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.languageVersionSettings 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.psi.KtFile
import org.jetbrains.kotlin.test.model.TestFile import org.jetbrains.kotlin.test.model.TestFile
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
@@ -59,11 +63,20 @@ class CompilerConfigurationProviderImpl(
override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment { override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment {
return cache.getOrPut(module) { 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()) val projectEnv = KotlinCoreEnvironment.createProjectEnvironmentForTests(testRootDisposable, CompilerConfiguration())
KotlinCoreEnvironment.createForTests( KotlinCoreEnvironment.createForTests(
projectEnv, projectEnv,
createCompilerConfiguration(module, projectEnv.project), createCompilerConfiguration(module, projectEnv.project),
EnvironmentConfigFiles.JVM_CONFIG_FILES configFiles
) )
} }
} }
@@ -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. * 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.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.config.LanguageVersionSettings
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.container.useInstance 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.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureModule
import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.platform.konan.NativePlatforms
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.* 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.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory 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( fun analyzeFilesWithGivenTrace(
files: Collection<KtFile>, files: Collection<KtFile>,
trace: BindingTrace, trace: BindingTrace,
@@ -80,7 +35,7 @@ private object FakeTopDownAnalyzerFacadeForNative {
languageVersionSettings languageVersionSettings
) )
analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files as Collection<com.intellij.psi.PsiElement>)
return AnalysisResult.success(trace.bindingContext, moduleContext.module) return AnalysisResult.success(trace.bindingContext, moduleContext.module)
} }
} }
@@ -71,10 +71,6 @@ fun main(args: Array<String>) {
model("diagnostics/testsWithJsStdLibAndBackendCompilation") model("diagnostics/testsWithJsStdLibAndBackendCompilation")
} }
testClass<AbstractDiagnosticsNativeTest> {
model("diagnostics/nativeTests")
}
testClass<AbstractDiagnosticsWithJdk15Test> { testClass<AbstractDiagnosticsWithJdk15Test> {
model("diagnostics/testsWithJava15") model("diagnostics/testsWithJava15")
} }