6136 lines
191 KiB
Groovy
6136 lines
191 KiB
Groovy
/*
|
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
* that can be found in the LICENSE file.
|
|
*/
|
|
|
|
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileNativeBinary
|
|
import org.jetbrains.kotlin.*
|
|
import org.jetbrains.kotlin.konan.target.*
|
|
import org.jetbrains.kotlin.UtilsKt
|
|
|
|
import java.nio.file.Paths
|
|
import java.util.regex.Pattern
|
|
|
|
import static org.jetbrains.kotlin.konan.target.Architecture.*
|
|
|
|
buildscript {
|
|
repositories {
|
|
if (UtilsKt.getCacheRedirectorEnabled(project))
|
|
maven { url 'https://cache-redirector.jetbrains.com/maven-central'}
|
|
else
|
|
mavenCentral()
|
|
|
|
maven {
|
|
url project.bootstrapKotlinRepo
|
|
}
|
|
}
|
|
ext.useCustomDist = UtilsKt.getUseCustomDist(project)
|
|
ext.kotlinNativeDist = UtilsKt.getKotlinNativeDist(project)
|
|
if (!useCustomDist) {
|
|
ext.setProperty("kotlin.native.home", kotlinNativeDist.absolutePath)
|
|
ext.setProperty("org.jetbrains.kotlin.native.home", kotlinNativeDist.absolutePath)
|
|
ext.setProperty("konan.home", kotlinNativeDist.absolutePath)
|
|
}
|
|
}
|
|
|
|
apply plugin: 'konan'
|
|
apply plugin: 'kotlin'
|
|
|
|
configurations {
|
|
cli_bc
|
|
update_tests
|
|
update_stdlib_tests
|
|
|
|
nopPluginApi
|
|
api.extendsFrom nopPluginApi
|
|
}
|
|
|
|
dependencies {
|
|
api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7'
|
|
cli_bc project(path: ':kotlin-native:backend.native', configuration: 'cli_bcApiElements')
|
|
}
|
|
ext.testOutputRoot = rootProject.file("test.output").absolutePath
|
|
ext.externalTestsDir = project.file("build/external")
|
|
ext.externalStdlibTestsDir = project.file("build/stdlib_external/stdlib")
|
|
externalTestsDir.mkdirs()
|
|
externalStdlibTestsDir.mkdirs()
|
|
|
|
ext.platformManager = project.project(":kotlin-native").platformManager
|
|
ext.target = platformManager.targetManager(project.testTarget).target
|
|
|
|
ext.testLibraryDir = "${ext.testOutputRoot}/klib/platform/${project.target.name}"
|
|
|
|
// Add executor to run tests depending on a target
|
|
project.extensions.executor = ExecutorServiceKt.create(project)
|
|
|
|
|
|
compileTestKotlin {
|
|
kotlinOptions {
|
|
freeCompilerArgs += "-Xskip-prerelease-check"
|
|
}
|
|
}
|
|
|
|
// Do not generate run tasks for konan built artifacts
|
|
ext.konanNoRun = true
|
|
|
|
final CacheTesting cacheTesting = CacheTestingKt.configureCacheTesting(project)
|
|
if (cacheTesting != null) {
|
|
// Check for debug build and set the -g option.
|
|
if (project.globalTestArgs.contains("-opt")) {
|
|
throw new IllegalArgumentException("Cache testing should be run with debug build. " +
|
|
"Remove -opt options from the test args")
|
|
}
|
|
if (!project.globalTestArgs.contains("-g")) {
|
|
project.globalTestArgs.add("-g")
|
|
}
|
|
|
|
// Note: can't do this in [CacheTesting.configure] since task classes aren't accessible there.
|
|
tasks.withType(KonanCompileNativeBinary.class).configureEach {
|
|
dependsOn cacheTesting.buildCacheTask
|
|
extraOpts cacheTesting.compilerArgs
|
|
}
|
|
|
|
tasks.withType(RunExternalTestGroup.class).configureEach {
|
|
dependsOn cacheTesting.buildCacheTask
|
|
flags = (flags ?: []) + cacheTesting.compilerArgs
|
|
}
|
|
}
|
|
|
|
// Enable two-stage test compilation if the test_two_stage property is set.
|
|
ext.twoStageEnabled = project.hasProperty("test_two_stage")
|
|
|
|
tasks.withType(KonanCompileNativeBinary.class).configureEach {
|
|
enableTwoStageCompilation = twoStageEnabled
|
|
}
|
|
|
|
tasks.withType(RunExternalTestGroup.class).configureEach {
|
|
enableTwoStageCompilation = twoStageEnabled
|
|
}
|
|
|
|
ext.isExperimentalMM = project.globalTestArgs.contains("-memory-model") && project.globalTestArgs.contains("experimental")
|
|
ext.isNoopGC = project.globalTestArgs.contains("-Xgc=noop")
|
|
|
|
if (ext.isExperimentalMM) {
|
|
// TODO: Make it more aggressive and only turn it on for a subset of tests.
|
|
tasks.withType(KonanCompileNativeBinary.class).configureEach {
|
|
extraOpts "-Xgc-aggressive"
|
|
}
|
|
}
|
|
|
|
// TODO: It also makes sense to test -g without asserts, and also to test -opt with asserts.
|
|
if (project.globalTestArgs.contains("-g")) {
|
|
tasks.withType(KonanCompileNativeBinary.class).configureEach {
|
|
extraOpts "-Xbinary=runtimeAssertionsMode=panic"
|
|
}
|
|
|
|
tasks.withType(RunExternalTestGroup.class).configureEach {
|
|
flags = (flags ?: []) + "-Xbinary=runtimeAssertionsMode=panic"
|
|
}
|
|
}
|
|
|
|
allprojects {
|
|
// Root directories for test output (logs, compiled files, statistics etc). Only single path must be in each set.
|
|
// backend.native/tests
|
|
ext.testOutputLocal = rootProject.file("$testOutputRoot/local")
|
|
|
|
// backend.native/tests/external
|
|
ext.testOutputExternal = rootProject.file("$testOutputRoot/external")
|
|
|
|
// backend.native/tests/stdlib_external
|
|
ext.testOutputStdlib = rootProject.file("$testOutputRoot/stdlib")
|
|
|
|
// backend.native/tests/framework
|
|
ext.testOutputFramework = rootProject.file("$testOutputRoot/framework")
|
|
|
|
// backent.native/tests/coverage
|
|
ext.testOutputCoverage = rootProject.file("$testOutputRoot/coverage")
|
|
|
|
ext.testOutputFileCheck = rootProject.file("$testOutputRoot/filecheck")
|
|
}
|
|
testOutputExternal.mkdirs()
|
|
testOutputStdlib.mkdirs()
|
|
|
|
konanArtifacts {
|
|
library('testLibrary') {
|
|
srcDir 'testLibrary'
|
|
}
|
|
library('baseTestClass', targets: [target]) {
|
|
srcFiles 'testing/library.kt'
|
|
}
|
|
UtilsKt.dependsOnDist(UtilsKt.findKonanBuildTask(project, "testLibrary", HostManager.@Companion.getHost()))
|
|
}
|
|
configure(project.tasks.findByName("compileKonanBaseTestClass${UtilsKt.getTestTargetSuffix(project)}")) {
|
|
UtilsKt.dependsOnDist(it)
|
|
}
|
|
|
|
def installTestLib = tasks.register("installTestLibrary", KonanKlibInstallTask) {
|
|
dependsOn "compileKonanTestLibraryHost"
|
|
klib = project.provider { konanArtifacts.testLibrary.getArtifactByTarget('host') }
|
|
repo = rootProject.file(testLibraryDir)
|
|
|
|
doLast {
|
|
// Remove the version in build/, so that we don't link two copies.
|
|
def file = project.file("build/konan/libs/${project.target.name}/testLibrary.klib")
|
|
file.delete()
|
|
}
|
|
}
|
|
|
|
void konanc(String[] args) {
|
|
def konancScript = isWindows() ? "konanc.bat" : "konanc"
|
|
def konanc = "$kotlinNativeDist/bin/$konancScript"
|
|
def allArgs = args.join(" ")
|
|
println("$konanc $allArgs")
|
|
"$konanc $allArgs".execute().waitFor()
|
|
}
|
|
|
|
clean {
|
|
doLast {
|
|
delete(project(":kotlin-native").file(testOutputRoot))
|
|
}
|
|
}
|
|
|
|
TaskCollection<Task> tasksOf(Class<? extends Task> type, Closure<Boolean> filter = { return true }) {
|
|
String prefix = project.findProperty("prefix")
|
|
project.tasks.withType(type)
|
|
.matching { filter(it) && it.enabled && (prefix != null ? it.name.startsWith(prefix) : true) }
|
|
}
|
|
|
|
run {
|
|
dependsOn(tasksOf(KonanTest))
|
|
// Add framework tests
|
|
dependsOn(tasksOf(FrameworkTest))
|
|
dependsOn(tasksOf(MetadataComparisonTest))
|
|
// Add regular gradle test tasks
|
|
dependsOn(tasksOf(Test))
|
|
dependsOn(tasksOf(CoverageTest))
|
|
dependsOn(":kotlin-native:Interop:Indexer:check")
|
|
}
|
|
|
|
task sanity {
|
|
def platformLibsTasks =":distPlatformLibs" + ":kotlin-native:platformLibs"
|
|
dependsOn(tasksOf(KonanTest) { task ->
|
|
!UtilsKt.isDependsOnPlatformLibs(task) &&
|
|
task.name != "library_mismatch" // This test requires the wasm32 stdlib which is unavailable during a sanity run.
|
|
})
|
|
// Add framework tests
|
|
dependsOn(tasksOf(FrameworkTest) { task ->
|
|
!UtilsKt.isDependsOnPlatformLibs(task)
|
|
})
|
|
dependsOn(tasksOf(MetadataComparisonTest))
|
|
// Add regular gradle test tasks
|
|
dependsOn(tasksOf(Test))
|
|
dependsOn(tasksOf(CoverageTest))
|
|
dependsOn(tasksOf(FileCheckTest))
|
|
dependsOn(":kotlin-native:Interop:Indexer:check")
|
|
dependsOn(":kotlin-native:Interop:StubGenerator:check")
|
|
}
|
|
|
|
// Collect reports in one json.
|
|
task resultsTask() {
|
|
doLast {
|
|
List<KonanTestGroupReport> reports = []
|
|
def statistics = new Statistics()
|
|
tasks.withType(RunExternalTestGroup).matching { it.state.executed }.each {
|
|
reports += new KonanTestGroupReport(it.name, it.testGroupReporter.suiteReports)
|
|
statistics.add(it.testGroupReporter.statistics)
|
|
}
|
|
|
|
tasks.withType(KonanGTest).matching { it.state.executed }.each {
|
|
statistics.add(it.statistics)
|
|
}
|
|
|
|
ExternalReportUtilsKt.saveReport("$testOutputExternal/reports.json", statistics, reports)
|
|
use(KonanTestSuiteReportKt) {
|
|
project.logger.quiet("DONE.\n\n" +
|
|
"TOTAL: $statistics.total\n" +
|
|
"PASSED: $statistics.passed\n" +
|
|
"FAILED: $statistics.failed\n" +
|
|
(statistics.error != 0 ? "ERROR: $statistics.error\n" : "") +
|
|
"SKIPPED: $statistics.skipped")
|
|
}
|
|
}
|
|
}
|
|
|
|
boolean isExcluded(String dir) {
|
|
// List of tests that fail due to unresolved compiler bugs
|
|
def excluded = [ ]
|
|
|
|
boolean result = false
|
|
excluded.forEach {
|
|
if (dir.endsWith(it.replace("/", File.separator))) {
|
|
result = true
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
/**
|
|
* Creates a task for a standalone test. Configures runner and adds building task.
|
|
*/
|
|
Task standaloneTest(String name, Closure configureClosure) {
|
|
return KotlinNativeTestKt.createTest(project, name, KonanStandaloneTest) { task ->
|
|
task.configure(configureClosure)
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
program(name, targets: [target.name]) {
|
|
baseDir "$testOutputLocal/$name"
|
|
srcFiles task.getSources()
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates a task for a linking test. Configures runner and adds library and test build tasks.
|
|
*/
|
|
Task linkTest(String name, Closure<KonanLinkTest> configureClosure) {
|
|
return KotlinNativeTestKt.createTest(project, name, KonanLinkTest) { task ->
|
|
task.configure(configureClosure)
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
def lib = "lib$name"
|
|
def targetName = target.name
|
|
// build a library from KonanLinkTest::lib property
|
|
library(lib, targets: [targetName]) {
|
|
srcFiles task.lib
|
|
baseDir "$testOutputLocal/$name"
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
UtilsKt.dependsOnKonanBuildingTask(task, lib, target)
|
|
|
|
// Build an executable with library
|
|
program(name, targets: [targetName]) {
|
|
libraries {
|
|
klib lib
|
|
}
|
|
baseDir "$testOutputLocal/$name"
|
|
srcFiles task.getSources()
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates a task for a dynamic test. Configures runner and adds library and test build tasks.
|
|
*/
|
|
Task dynamicTest(String name, Closure<KonanDynamicTest> configureClosure) {
|
|
return KotlinNativeTestKt.createTest(project, name, KonanDynamicTest) { task ->
|
|
task.configure(configureClosure)
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
def targetName = target.name
|
|
def lib = task.interop
|
|
if (lib != null) {
|
|
UtilsKt.dependsOnKonanBuildingTask(task, lib, target)
|
|
}
|
|
dynamic(name, targets: [targetName]) {
|
|
if (lib != null) {
|
|
libraries {
|
|
artifact lib
|
|
}
|
|
}
|
|
srcFiles task.getSources()
|
|
baseDir "$testOutputLocal/$name"
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
if (targetName == "mingw_x64" || targetName == "mingw_x86") {
|
|
extraOpts "-linker-option", "-Wl,--out-implib,$testOutputLocal/$name/$targetName/${name}.dll.a"
|
|
}
|
|
}
|
|
}
|
|
def buildTask = UtilsKt.findKonanBuildTask(project, name, target)
|
|
UtilsKt.dependsOnDist(buildTask)
|
|
}
|
|
}
|
|
}
|
|
|
|
Map<String, List<String>> ignoredTests = [:]
|
|
|
|
task run_external () {
|
|
outputs.upToDateWhen{ false }
|
|
|
|
rootProject.files(
|
|
'compiler/testData/codegen/box',
|
|
'compiler/testData/codegen/boxInline'
|
|
).asFileTree.visit { file ->
|
|
if (!file.isDirectory() || !file.file.list().any{ it.endsWith(".kt")})
|
|
return
|
|
def taskPath = rootProject.relativePath(file.file)
|
|
def fileSeparator = System.properties["file.separator"]
|
|
def taskName = taskPath.split("\\$fileSeparator").join('_')
|
|
project.tasks.register(taskName, RunExternalTestGroup) {
|
|
it.groupDirectory = taskPath
|
|
it.finalizedBy resultsTask
|
|
it.ignoredTests = ignoredTests[taskName]
|
|
}
|
|
}
|
|
|
|
// Set up dependencies.
|
|
dependsOn(tasksOf(RunExternalTestGroup))
|
|
dependsOn("stdlibTest")
|
|
dependsOn("stdlibTestInWorker")
|
|
}
|
|
|
|
task daily() {
|
|
dependsOn(run_external)
|
|
}
|
|
|
|
|
|
task slackReport(type:Reporter) {
|
|
reportHome = rootProject.file("test.output").absoluteFile
|
|
}
|
|
|
|
task slackReportNightly(type:NightlyReporter) {
|
|
externalMacosReport = "external_macos_results/reports.json"
|
|
externalLinuxReport = "external_linux_results/reports.json"
|
|
externalWindowsReport = "external_windows_results/reports.json"
|
|
}
|
|
|
|
linkTest("localDelegatedPropertyLink") {
|
|
source = "lower/local_delegated_property_link/main.kt"
|
|
lib = "lower/local_delegated_property_link/lib.kt"
|
|
}
|
|
|
|
task sum(type: KonanLocalTest) {
|
|
source = "codegen/function/sum.kt"
|
|
}
|
|
|
|
task method_call(type: KonanLocalTest) {
|
|
source = "codegen/object/method_call.kt"
|
|
}
|
|
|
|
task fields(type: KonanLocalTest) {
|
|
source = "codegen/object/fields.kt"
|
|
}
|
|
|
|
task fields1(type: KonanLocalTest) {
|
|
source = "codegen/object/fields1.kt"
|
|
}
|
|
|
|
task fields2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/object/fields2.kt"
|
|
}
|
|
|
|
// This test checks object layout can't be done in
|
|
// KonanLocalTest paradigm
|
|
//task constructor(type: UnitKonanTest) {
|
|
// source = "codegen/object/constructor.kt"
|
|
//}
|
|
|
|
task objectInitialization(type: KonanLocalTest) {
|
|
source = "codegen/object/initialization.kt"
|
|
}
|
|
|
|
task objectInitialization1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/object/initialization1.kt"
|
|
}
|
|
|
|
standaloneTest("object_globalInitializer") {
|
|
source = "codegen/object/globalInitializer.kt"
|
|
}
|
|
|
|
task check_type(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/check_type.kt"
|
|
}
|
|
|
|
task safe_cast(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/safe_cast.kt"
|
|
}
|
|
|
|
task typealias1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/typealias1.kt"
|
|
}
|
|
|
|
task aritmetic(type: KonanLocalTest) {
|
|
source = "codegen/function/arithmetic.kt"
|
|
}
|
|
|
|
task sum1(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_foo_bar.kt"
|
|
}
|
|
|
|
task sum2(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_imm.kt"
|
|
}
|
|
|
|
task sum_func(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_func.kt"
|
|
}
|
|
|
|
task sum_mixed(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_mixed.kt"
|
|
}
|
|
|
|
task sum_illy(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_silly.kt"
|
|
}
|
|
|
|
task function_defaults(type: KonanLocalTest) {
|
|
source = "codegen/function/defaults.kt"
|
|
}
|
|
|
|
task function_defaults1(type: KonanLocalTest) {
|
|
source = "codegen/function/defaults1.kt"
|
|
}
|
|
|
|
task function_defaults2(type: KonanLocalTest) {
|
|
source = "codegen/function/defaults2.kt"
|
|
}
|
|
|
|
task function_defaults3(type: KonanLocalTest) {
|
|
source = "codegen/function/defaults3.kt"
|
|
}
|
|
|
|
task function_defaults4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults4.kt"
|
|
}
|
|
|
|
task function_defaults5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults5.kt"
|
|
}
|
|
|
|
task function_defaults6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults6.kt"
|
|
}
|
|
|
|
task function_defaults7(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults7.kt"
|
|
}
|
|
|
|
task function_defaults8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults8.kt"
|
|
}
|
|
|
|
task function_defaults9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults9.kt"
|
|
}
|
|
|
|
task function_defaults10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaults10.kt"
|
|
}
|
|
|
|
task function_defaults_from_fake_override(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaultsFromFakeOverride.kt"
|
|
}
|
|
|
|
task function_defaults_with_vararg1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaultsWithVarArg1.kt"
|
|
}
|
|
|
|
task function_defaults_with_vararg2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/defaultsWithVarArg2.kt"
|
|
}
|
|
|
|
task function_defaults_with_inline_classes(type: KonanLocalTest) {
|
|
source = "codegen/function/defaultsWithInlineClasses.kt"
|
|
}
|
|
|
|
task sum_3const(type: KonanLocalTest) {
|
|
source = "codegen/function/sum_3const.kt"
|
|
}
|
|
|
|
standaloneTest("function_nothingN_returning_safe_call") {
|
|
flags = ["-g", "-entry", "codegen.function.nothingN_returning_safe_call.main"]
|
|
source = "codegen/function/nothingNReturningSafeCall.kt"
|
|
}
|
|
|
|
standaloneTest("unreachable_statement_after_return") {
|
|
flags = ["-g", "-entry", "codegen.function.unreachable_statement_after_return.main"]
|
|
source = "codegen/function/unreachableStatementAfterReturn.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_types(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_types.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_overflow(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_overflow.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_errors(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
source = "codegen/controlflow/for_loops_errors.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_empty_range(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_empty_range.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_nested(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_nested.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_coroutines(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_coroutines.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_let_with_nullable(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_let_with_nullable.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_call_order(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_call_order.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_indices(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_indices.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_nested(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_nested.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_side_effects(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_side_effects.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_break_continue(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_break_continue.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_mutation(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_mutation.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task codegen_controlflow_for_loops_array_nullable(type: KonanLocalTest) {
|
|
source = "codegen/controlflow/for_loops_array_nullable.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task local_variable(type: KonanLocalTest) {
|
|
source = "codegen/basics/local_variable.kt"
|
|
}
|
|
|
|
task canonical_name(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/canonical_name.kt"
|
|
}
|
|
|
|
task cast_simple(type: KonanLocalTest) {
|
|
source = "codegen/basics/cast_simple.kt"
|
|
}
|
|
|
|
task cast_null(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/basics/cast_null.kt"
|
|
}
|
|
|
|
task unchecked_cast1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/unchecked_cast1.kt"
|
|
}
|
|
|
|
task unchecked_cast2(type: KonanLocalTest) {
|
|
enabled = false
|
|
useGoldenData = true
|
|
source = "codegen/basics/unchecked_cast2.kt"
|
|
}
|
|
|
|
task unchecked_cast3(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/basics/unchecked_cast3.kt"
|
|
}
|
|
|
|
task unchecked_cast4(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/basics/unchecked_cast4.kt"
|
|
}
|
|
|
|
task null_check(type: KonanLocalTest) {
|
|
source = "codegen/basics/null_check.kt"
|
|
}
|
|
|
|
task array_to_any(type: KonanLocalTest) {
|
|
source = "codegen/basics/array_to_any.kt"
|
|
}
|
|
|
|
standaloneTest("runtime_basic_init") {
|
|
source = "runtime/basic/init.kt"
|
|
expectedExitStatus = 0
|
|
}
|
|
|
|
standaloneTest("runtime_basic_exit") {
|
|
source = "runtime/basic/exit.kt"
|
|
expectedExitStatus = 42
|
|
}
|
|
|
|
task runtime_random(type: KonanLocalTest) {
|
|
source = "runtime/basic/random.kt"
|
|
}
|
|
|
|
task runtime_basic_simd(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "runtime/basic/simd.kt"
|
|
}
|
|
|
|
task runtime_worker_random(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Uses workers.
|
|
source = "runtime/basic/worker_random.kt"
|
|
}
|
|
|
|
task hello0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/hello0.kt"
|
|
}
|
|
|
|
task stringTrim(type: KonanLocalTest) {
|
|
source = "codegen/stringTrim/stringTrim.kt"
|
|
}
|
|
|
|
standaloneTest("hello1") {
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/hello1.kt"
|
|
}
|
|
|
|
standaloneTest("hello2") {
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/hello2.kt"
|
|
}
|
|
|
|
standaloneTest("readlnOrNull_empty") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readlnOrNull_empty.kt"
|
|
}
|
|
|
|
standaloneTest("readln_empty") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useTestData = true
|
|
outputChecker = { s -> s.contains("ReadAfterEOFException") }
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/basic/readln_empty.kt"
|
|
}
|
|
|
|
standaloneTest("readln_alone_CR") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_alone_CR.kt"
|
|
}
|
|
|
|
standaloneTest("readln_empty_new_line") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_empty_new_line.kt"
|
|
}
|
|
|
|
standaloneTest("readln_multiline") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_multiline.kt"
|
|
}
|
|
|
|
standaloneTest("readln_CR_and_CRLF") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_CR_and_CRLF.kt"
|
|
}
|
|
|
|
standaloneTest("readln_long_line") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_long_line.kt"
|
|
}
|
|
|
|
standaloneTest("readln_cyrillic") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_cyrillic.kt"
|
|
}
|
|
|
|
standaloneTest("readln_multiple_empty_new_lines") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-48738
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readln_multiple_empty_new_lines.kt"
|
|
}
|
|
|
|
task hello3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/hello3.kt"
|
|
}
|
|
|
|
task hello4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/hello4.kt"
|
|
}
|
|
|
|
standaloneTest('enumEquals') {
|
|
useGoldenData = true
|
|
source = "runtime/basic/enum_equals.kt"
|
|
flags = ['-XXLanguage:-ProhibitComparisonOfIncompatibleEnums', '-e', 'runtime.basic.enum_equals.main']
|
|
}
|
|
|
|
standaloneTest("entry0") {
|
|
useGoldenData = true
|
|
source = "runtime/basic/entry0.kt"
|
|
flags = ["-entry", "runtime.basic.entry0.main"]
|
|
}
|
|
|
|
standaloneTest("entry1") {
|
|
useGoldenData = true
|
|
source = "runtime/basic/entry1.kt"
|
|
flags = ["-entry", "foo"]
|
|
}
|
|
|
|
linkTest("entry2") {
|
|
useGoldenData = true
|
|
source = "runtime/basic/entry2.kt"
|
|
lib = "runtime/basic/libentry2.kt"
|
|
flags = ["-entry", "foo"]
|
|
}
|
|
|
|
standaloneTest("entry3") {
|
|
useGoldenData = true
|
|
source = "runtime/basic/entry3.kt"
|
|
flags = ["-entry", "bar"]
|
|
}
|
|
|
|
standaloneTest("entry4") {
|
|
useGoldenData = true
|
|
source = "runtime/basic/entry4.kt"
|
|
}
|
|
|
|
standaloneTest("readline0") {
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readline0.kt"
|
|
}
|
|
|
|
standaloneTest("readline1") {
|
|
useGoldenData = true
|
|
useTestData = true
|
|
source = "runtime/basic/readline1.kt"
|
|
}
|
|
|
|
task tostring0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/tostring0.kt"
|
|
}
|
|
|
|
task tostring1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/tostring1.kt"
|
|
}
|
|
|
|
task tostring2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/tostring2.kt"
|
|
}
|
|
|
|
task tostring3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/tostring3.kt"
|
|
}
|
|
|
|
task tostring4(type: KonanLocalTest) {
|
|
source = "runtime/basic/tostring4.kt"
|
|
}
|
|
|
|
task empty_substring(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/empty_substring.kt"
|
|
}
|
|
|
|
standaloneTest("cleaner_basic") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_basic.kt"
|
|
flags = ['-tr', '-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
standaloneTest("cleaner_workers") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_workers.kt"
|
|
flags = ['-tr', '-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
standaloneTest("cleaner_in_main_with_checker") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_in_main_with_checker.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("cleaner_in_main_without_checker") {
|
|
enabled = (project.testTarget != 'wasm32') // Cleaners need workers
|
|
source = "runtime/basic/cleaner_in_main_without_checker.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("cleaner_leak_without_checker") {
|
|
enabled = (project.testTarget != 'wasm32') // Cleaners need workers
|
|
source = "runtime/basic/cleaner_leak_without_checker.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("cleaner_leak_with_checker") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_leak_with_checker.kt"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() }
|
|
}
|
|
|
|
standaloneTest("cleaner_in_tls_main_without_checker") {
|
|
enabled = (project.testTarget != 'wasm32') // Cleaners need workers
|
|
source = "runtime/basic/cleaner_in_tls_main_without_checker.kt"
|
|
}
|
|
|
|
standaloneTest("cleaner_in_tls_main_with_checker") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_in_tls_main_with_checker.kt"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> (s =~ /Cleaner (0x)?[0-9a-fA-F]+ was disposed during program exit/).find() }
|
|
}
|
|
|
|
standaloneTest("cleaner_in_tls_worker") {
|
|
enabled = (project.testTarget != 'wasm32') && // Cleaners need workers
|
|
!isNoopGC
|
|
source = "runtime/basic/cleaner_in_tls_worker.kt"
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
standaloneTest("worker_bound_reference0") {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
source = "runtime/concurrent/worker_bound_reference0.kt"
|
|
flags = ['-tr']
|
|
|
|
if (isNoopGC) {
|
|
def exclude = [
|
|
"*.testCollect",
|
|
"*.testCollectFrozen",
|
|
"*.testCollectInWorkerFrozen",
|
|
"*.collectCyclicGarbage",
|
|
"*.collectCyclicGarbageWithAtomicsFrozen",
|
|
"*.collectCrossThreadCyclicGarbageWithAtomicsFrozen"
|
|
]
|
|
arguments += ["--ktest_filter=*-${exclude.join(":")}"]
|
|
}
|
|
}
|
|
|
|
task worker0(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker0.kt"
|
|
}
|
|
|
|
task worker1(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker1.kt"
|
|
}
|
|
|
|
task worker2(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker2.kt"
|
|
}
|
|
|
|
task worker3(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker3.kt"
|
|
}
|
|
|
|
task worker4(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker4.kt"
|
|
}
|
|
|
|
// This tests changes main thread worker queue state, so better be executed alone.
|
|
standaloneTest("worker5") {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker5.kt"
|
|
}
|
|
|
|
task worker6(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker6.kt"
|
|
}
|
|
|
|
task worker7(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker7.kt"
|
|
}
|
|
|
|
task worker8(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker8.kt"
|
|
}
|
|
|
|
task worker9(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
|
|
!isExperimentalMM
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker9.kt"
|
|
}
|
|
|
|
task worker9_experimentalMM(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
|
|
isExperimentalMM
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker9_experimentalMM.kt"
|
|
}
|
|
|
|
task worker10(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') && // Workers need pthreads.
|
|
!isNoopGC
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker10.kt"
|
|
}
|
|
|
|
task worker11(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/worker11.kt"
|
|
}
|
|
|
|
task worker_exception_messages(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
source = "runtime/workers/worker_exception_messages.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions") {
|
|
flags = ["-tr", "-Xworker-exception-handling=use-hook"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
!it.contains("testExecuteAfterStartQuiet error") && it.contains("testExecuteStart error") && !it.contains("testExecuteStartQuiet error")
|
|
}
|
|
source = "runtime/workers/worker_exceptions.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_legacy") {
|
|
flags = ["-tr", "-Xworker-exception-handling=legacy"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
it.contains("testExecuteAfterStartLegacy error") && it.contains("testExecuteStartLegacy error")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_legacy.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate") {
|
|
flags = ["-Xworker-exception-handling=use-hook"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = {
|
|
it.contains("some error") && !it.contains("Will not happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_legacy") {
|
|
flags = ["-Xworker-exception-handling=legacy"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
it.contains("some error") && it.contains("Will not happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_hook") {
|
|
flags = ["-Xworker-exception-handling=use-hook"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
it.contains("hook called") && !it.contains("some error") && it.contains("Will happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_hook.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_hook_legacy") {
|
|
flags = ["-Xworker-exception-handling=legacy"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
!it.contains("hook called") && it.contains("some error") && it.contains("Will happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_hook.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_current") {
|
|
flags = ["-Xworker-exception-handling=use-hook"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = {
|
|
it.contains("some error") && !it.contains("Will not happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_current.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_current_legacy") {
|
|
flags = ["-Xworker-exception-handling=legacy"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
it.contains("some error") && it.contains("Will not happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_current.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_hook_current") {
|
|
flags = ["-Xworker-exception-handling=use-hook"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
it.contains("hook called") && !it.contains("some error") && it.contains("Will happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_hook_current.kt"
|
|
}
|
|
|
|
standaloneTest("worker_exceptions_terminate_hook_current_legacy") {
|
|
flags = ["-Xworker-exception-handling=legacy"]
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
outputChecker = {
|
|
!it.contains("hook called") && it.contains("some error") && it.contains("Will happen")
|
|
}
|
|
source = "runtime/workers/worker_exceptions_terminate_hook_current.kt"
|
|
}
|
|
|
|
standaloneTest("worker_threadlocal_no_leak") {
|
|
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
|
source = "runtime/workers/worker_threadlocal_no_leak.kt"
|
|
}
|
|
|
|
task freeze0(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No workers on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze0.kt"
|
|
}
|
|
|
|
task freeze1(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze1.kt"
|
|
}
|
|
|
|
task freeze_stress(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze_stress.kt"
|
|
}
|
|
|
|
task freeze2(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze2.kt"
|
|
}
|
|
|
|
task freeze3(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze3.kt"
|
|
}
|
|
|
|
task freeze4(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze4.kt"
|
|
}
|
|
|
|
task freeze5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze5.kt"
|
|
}
|
|
|
|
task freeze6(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') && // No exceptions on WASM.
|
|
!isNoopGC
|
|
useGoldenData = true
|
|
source = "runtime/workers/freeze6.kt"
|
|
}
|
|
|
|
task atomic0(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/atomic0.kt"
|
|
}
|
|
|
|
standaloneTest("atomic1") {
|
|
// Note: This test reproduces a race, so it'll start flaking if problem is reintroduced.
|
|
enabled = false // Needs USE_CYCLIC_GC, which is disabled.
|
|
source = "runtime/workers/atomic1.kt"
|
|
}
|
|
|
|
task atomic2(type: KonanLocalTest) {
|
|
source = "runtime/workers/atomic2.kt"
|
|
}
|
|
|
|
task lazy0(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/lazy0.kt"
|
|
}
|
|
|
|
task lazy1(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Need exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/workers/lazy1.kt"
|
|
}
|
|
|
|
standaloneTest("lazy2") {
|
|
useGoldenData = true
|
|
source = "runtime/workers/lazy2.kt"
|
|
}
|
|
|
|
standaloneTest("lazy3") {
|
|
enabled = !isNoopGC
|
|
source = "runtime/workers/lazy3.kt"
|
|
}
|
|
|
|
task lazy4(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. Need exceptions
|
|
source = "runtime/workers/lazy4.kt"
|
|
}
|
|
|
|
task mutableData1(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads. Need exceptions
|
|
source = "runtime/workers/mutableData1.kt"
|
|
}
|
|
|
|
task enumIdentity(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Workers need pthreads.
|
|
useGoldenData = true
|
|
source = "runtime/workers/enum_identity.kt"
|
|
}
|
|
|
|
standaloneTest("leakWorker") {
|
|
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
|
source = "runtime/workers/leak_worker.kt"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Unfinished workers detected, 1 workers leaked!") }
|
|
}
|
|
|
|
standaloneTest("leakMemoryWithWorkerTermination") {
|
|
disabled = (project.testTarget == 'wasm32') // Needs pthreads.
|
|
source = "runtime/workers/leak_memory_with_worker_termination.kt"
|
|
|
|
if (!isExperimentalMM) { // Experimental MM will not report memory leaks.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
|
}
|
|
}
|
|
|
|
task superFunCall(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/superFunCall.kt"
|
|
}
|
|
|
|
task superGetterCall(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/superGetterCall.kt"
|
|
}
|
|
|
|
task superSetterCall(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/superSetterCall.kt"
|
|
}
|
|
|
|
task enum0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/test0.kt"
|
|
}
|
|
|
|
task enum1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/test1.kt"
|
|
}
|
|
|
|
task enum_valueOf(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/valueOf.kt"
|
|
}
|
|
|
|
task enum_values(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/values.kt"
|
|
}
|
|
|
|
task enum_vCallNoEntryClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/vCallNoEntryClass.kt"
|
|
}
|
|
|
|
task enum_vCallWithEntryClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/vCallWithEntryClass.kt"
|
|
}
|
|
|
|
task enum_companionObject(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/companionObject.kt"
|
|
}
|
|
|
|
task enum_interfaceCallNoEntryClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/interfaceCallNoEntryClass.kt"
|
|
}
|
|
|
|
task enum_interfaceCallWithEntryClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/interfaceCallWithEntryClass.kt"
|
|
}
|
|
|
|
linkTest("enum_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/enum/linkTest_main.kt"
|
|
lib = "codegen/enum/linkTest_lib.kt"
|
|
}
|
|
|
|
task enum_varargParam(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/varargParam.kt"
|
|
}
|
|
|
|
task enum_nested(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/nested.kt"
|
|
}
|
|
|
|
task enum_isFrozen(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/enum/isFrozen.kt"
|
|
}
|
|
|
|
task enum_loop(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/loop.kt"
|
|
}
|
|
|
|
task enum_reorderedArguments(type: KonanLocalTest) {
|
|
source = "codegen/enum/reorderedArguments.kt"
|
|
}
|
|
|
|
standaloneTest('switchLowering') {
|
|
useGoldenData = true
|
|
source = "codegen/enum/switchLowering.kt"
|
|
flags = ['-XXLanguage:-ProhibitComparisonOfIncompatibleEnums', '-e', 'codegen.enum.switchLowering.main']
|
|
}
|
|
|
|
task enum_lambdaInDefault(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/enum/lambdaInDefault.kt"
|
|
}
|
|
|
|
linkTest("mangling") {
|
|
useGoldenData = true
|
|
source = "mangling/mangling.kt"
|
|
lib = "mangling/manglinglib.kt"
|
|
}
|
|
|
|
task innerClass_simple(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/simple.kt"
|
|
}
|
|
|
|
task innerClass_getOuterVal(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/getOuterVal.kt"
|
|
}
|
|
|
|
task innerClass_generic(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/generic.kt"
|
|
}
|
|
|
|
task innerClass_doubleInner(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/doubleInner.kt"
|
|
}
|
|
|
|
task innerClass_qualifiedThis(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/qualifiedThis.kt"
|
|
}
|
|
|
|
task innerClass_superOuter(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/superOuter.kt"
|
|
}
|
|
|
|
task innerClass_noPrimaryConstructor(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/noPrimaryConstructor.kt"
|
|
}
|
|
|
|
task innerClass_secondaryConstructor(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/secondaryConstructor.kt"
|
|
}
|
|
|
|
linkTest("innerClass_linkTest") {
|
|
source = "codegen/innerClass/linkTest_main.kt"
|
|
lib = "codegen/innerClass/linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("innerClass_inheritance_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/inheritance_linkTest_main.kt"
|
|
lib = "codegen/innerClass/inheritance_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("innerClass_inheritance2_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/inheritance2_linkTest_main.kt"
|
|
lib = "codegen/innerClass/inheritance2_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("innerClass_inheritance3_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/innerClass/inheritance3_linkTest_main.kt"
|
|
lib = "codegen/innerClass/inheritance3_linkTest_lib.kt"
|
|
}
|
|
|
|
task localClass_localHierarchy(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/localHierarchy.kt"
|
|
}
|
|
|
|
standaloneTest("objectDeclaration_globalConstants") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
flags = ["-opt", "-opt-in=kotlin.native.internal.InternalForKotlinNative", "-tr"]
|
|
source = "codegen/objectDeclaration/globalConstants.kt"
|
|
}
|
|
|
|
task object_isFrozen(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/objectDeclaration/isFrozen.kt"
|
|
}
|
|
|
|
task localClass_objectExpressionInProperty(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/objectExpressionInProperty.kt"
|
|
}
|
|
|
|
task localClass_objectExpressionInInitializer(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/objectExpressionInInitializer.kt"
|
|
}
|
|
|
|
task localClass_innerWithCapture(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/innerWithCapture.kt"
|
|
}
|
|
|
|
task localClass_innerTakesCapturedFromOuter(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/innerTakesCapturedFromOuter.kt"
|
|
}
|
|
|
|
task localClass_virtualCallFromConstructor(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/virtualCallFromConstructor.kt"
|
|
}
|
|
|
|
task localClass_noPrimaryConstructor(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/noPrimaryConstructor.kt"
|
|
}
|
|
|
|
task localClass_localFunctionCallFromLocalClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/localFunctionCallFromLocalClass.kt"
|
|
}
|
|
|
|
task localClass_localFunctionInLocalClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/localFunctionInLocalClass.kt"
|
|
}
|
|
|
|
task localClass_tryCatch(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/localClass/tryCatch.kt"
|
|
}
|
|
|
|
task function_localFunction(type : KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/localFunction.kt"
|
|
}
|
|
|
|
task function_localFunction2(type : KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/localFunction2.kt"
|
|
}
|
|
|
|
task function_localFunction3(type : KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/localFunction3.kt"
|
|
}
|
|
|
|
task initializers_correctOrder1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/initializers/correctOrder1.kt"
|
|
}
|
|
|
|
task initializers_correctOrder2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/initializers/correctOrder2.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_correctOrder3") {
|
|
source = "codegen/initializers/correctOrder3.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_globalInitedAfterAccessingFile") {
|
|
source = "codegen/initializers/globalInitedAfterAccessingFile.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_globalNotInitedAfterAccessingClassInternals") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/globalNotInitedAfterAccessingClassInternals.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_globalInitedBeforeThreadLocal") {
|
|
source = "codegen/initializers/globalInitedBeforeThreadLocal.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_eagerInitializationGlobal1") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/eagerInitializationGlobal1.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_eagerInitializationGlobal2") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/eagerInitializationGlobal2.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_eagerInitializationThreadLocal1") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/eagerInitializationThreadLocal1.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_eagerInitializationThreadLocal2") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/eagerInitializationThreadLocal2.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_testInfrastructure") {
|
|
enabled = project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM
|
|
source = "codegen/initializers/testInfrastructure.kt"
|
|
flags = ["-tr"]
|
|
}
|
|
|
|
standaloneTest("initializers_workers1") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Workers are not supported
|
|
source = "codegen/initializers/workers1.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_workers2") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Workers are not supported
|
|
source = "codegen/initializers/workers2.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_failInInitializer1") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/failInInitializer1.kt"
|
|
useGoldenData = true
|
|
flags = ['-Xir-property-lazy-initialization=enable']
|
|
}
|
|
|
|
standaloneTest("initializers_failInInitializer2") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/failInInitializer2.kt"
|
|
useGoldenData = true
|
|
flags = ['-Xir-property-lazy-initialization=enable']
|
|
}
|
|
|
|
standaloneTest("initializers_failInInitializer3") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/failInInitializer3.kt"
|
|
useGoldenData = true
|
|
flags = ['-Xir-property-lazy-initialization=enable']
|
|
}
|
|
|
|
standaloneTest("initializers_failInInitializer4") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/failInInitializer4.kt"
|
|
useGoldenData = true
|
|
flags = ['-Xir-property-lazy-initialization=enable']
|
|
}
|
|
|
|
standaloneTest("initializers_when1") {
|
|
source = "codegen/initializers/when1.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_when2") {
|
|
source = "codegen/initializers/when2.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_throw1") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/throw1.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_throw2") {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/initializers/throw2.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_while1") {
|
|
source = "codegen/initializers/while1.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_while2") {
|
|
source = "codegen/initializers/while2.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_while3") {
|
|
source = "codegen/initializers/while3.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_return1") {
|
|
source = "codegen/initializers/return1.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_return2") {
|
|
source = "codegen/initializers/return2.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("initializers_object") {
|
|
source = "codegen/initializers/object.kt"
|
|
flags = ['-Xir-property-lazy-initialization=enable']
|
|
}
|
|
|
|
linkTest("initializers_linkTest1") {
|
|
useGoldenData = true
|
|
source = "codegen/initializers/linkTest1_main.kt"
|
|
lib = "codegen/initializers/linkTest1_lib.kt"
|
|
}
|
|
|
|
linkTest("initializers_linkTest2") {
|
|
useGoldenData = true
|
|
source = "codegen/initializers/linkTest2_main.kt"
|
|
lib = "codegen/initializers/linkTest2_lib.kt"
|
|
}
|
|
|
|
linkTest("initializers_sharedVarInInitBlock") {
|
|
source = "codegen/initializers/sharedVarInInitBlock_main.kt"
|
|
lib = "codegen/initializers/sharedVarInInitBlock_lib.kt"
|
|
}
|
|
|
|
standaloneTest("initializers_static") {
|
|
source = "codegen/initializers/static.kt"
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative', "-tr"]
|
|
}
|
|
|
|
task arithmetic_basic(type: KonanLocalTest) {
|
|
source = "codegen/arithmetic/basic.kt"
|
|
}
|
|
|
|
task arithmetic_division(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/arithmetic/division.kt"
|
|
}
|
|
|
|
task arithmetic_github1856(type: KonanLocalTest) {
|
|
source = "codegen/arithmetic/github1856.kt"
|
|
}
|
|
|
|
task bridges_test0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test0.kt"
|
|
}
|
|
|
|
task bridges_test1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test1.kt"
|
|
}
|
|
|
|
task bridges_test2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test2.kt"
|
|
}
|
|
|
|
task bridges_test3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test3.kt"
|
|
}
|
|
|
|
task bridges_test4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test4.kt"
|
|
}
|
|
|
|
task bridges_test5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test5.kt"
|
|
}
|
|
|
|
task bridges_test6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test6.kt"
|
|
}
|
|
|
|
task bridges_test7(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test7.kt"
|
|
}
|
|
|
|
task bridges_test8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test8.kt"
|
|
}
|
|
|
|
task bridges_test9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test9.kt"
|
|
}
|
|
|
|
task bridges_test10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test10.kt"
|
|
}
|
|
|
|
task bridges_test11(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test11.kt"
|
|
}
|
|
|
|
task bridges_test12(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test12.kt"
|
|
}
|
|
|
|
task bridges_test13(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test13.kt"
|
|
}
|
|
|
|
task bridges_test14(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test14.kt"
|
|
}
|
|
|
|
task bridges_test15(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test15.kt"
|
|
}
|
|
|
|
task bridges_test16(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test16.kt"
|
|
}
|
|
|
|
task bridges_test17(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test17.kt"
|
|
}
|
|
|
|
task bridges_test18(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/test18.kt"
|
|
}
|
|
|
|
linkTest("bridges_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/linkTest_main.kt"
|
|
lib = "codegen/bridges/linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("bridges_linkTest2") {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/linkTest2_main.kt"
|
|
lib = "codegen/bridges/linkTest2_lib.kt"
|
|
}
|
|
|
|
task bridges_special(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/bridges/special.kt"
|
|
}
|
|
|
|
task bridges_specialGeneric(type: KonanLocalTest) {
|
|
source = "codegen/bridges/specialGeneric.kt"
|
|
}
|
|
|
|
task bridges_nativePointed(type: KonanLocalTest) {
|
|
source = "codegen/bridges/nativePointed.kt"
|
|
}
|
|
|
|
task returnTypeSignature(type: KonanLocalTest) {
|
|
source = "codegen/bridges/returnTypeSignature.kt"
|
|
}
|
|
|
|
task classDelegation_method(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/classDelegation/method.kt"
|
|
}
|
|
|
|
task classDelegation_property(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/classDelegation/property.kt"
|
|
}
|
|
|
|
task classDelegation_generic(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/classDelegation/generic.kt"
|
|
}
|
|
|
|
task classDelegation_withBridge(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/classDelegation/withBridge.kt"
|
|
}
|
|
|
|
linkTest("classDelegation_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/classDelegation/linkTest_main.kt"
|
|
lib = "codegen/classDelegation/linkTest_lib.kt"
|
|
}
|
|
|
|
standaloneTest("contracts") {
|
|
flags = [ '-opt-in=kotlin.RequiresOptIn', '-tr' ]
|
|
source = "codegen/contracts/contracts.kt"
|
|
}
|
|
|
|
task delegatedProperty_simpleVal(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/simpleVal.kt"
|
|
}
|
|
|
|
task delegatedProperty_simpleVar(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/simpleVar.kt"
|
|
}
|
|
|
|
task delegatedProperty_packageLevel(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/packageLevel.kt"
|
|
}
|
|
|
|
task delegatedProperty_local(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/local.kt"
|
|
}
|
|
|
|
linkTest("delegatedProperty_delegatedOverride") {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/delegatedOverride_main.kt"
|
|
lib = "codegen/delegatedProperty/delegatedOverride_lib.kt"
|
|
}
|
|
|
|
linkTest("delegatedProperty_correctFieldsOrder") {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/correctFieldsOrder_main.kt"
|
|
lib = "codegen/delegatedProperty/correctFieldsOrder_lib.kt"
|
|
}
|
|
|
|
task delegatedProperty_lazy(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/lazy.kt"
|
|
}
|
|
|
|
task delegatedProperty_observable(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/observable.kt"
|
|
}
|
|
|
|
task delegatedProperty_map(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/delegatedProperty/map.kt"
|
|
}
|
|
|
|
task propertyCallableReference_valClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/valClass.kt"
|
|
}
|
|
|
|
task propertyCallableReference_valModule(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/valModule.kt"
|
|
}
|
|
|
|
task propertyCallableReference_varClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/varClass.kt"
|
|
}
|
|
|
|
task propertyCallableReference_varModule(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/varModule.kt"
|
|
}
|
|
|
|
task propertyCallableReference_valExtension(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/valExtension.kt"
|
|
}
|
|
|
|
task propertyCallableReference_varExtension(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/varExtension.kt"
|
|
}
|
|
|
|
linkTest("propertyCallableReference_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/linkTest_main.kt"
|
|
lib = "codegen/propertyCallableReference/linkTest_lib.kt"
|
|
}
|
|
|
|
task propertyCallableReference_dynamicReceiver(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/propertyCallableReference/dynamicReceiver.kt"
|
|
}
|
|
|
|
task lateinit_initialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/initialized.kt"
|
|
}
|
|
|
|
task lateinit_notInitialized(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/notInitialized.kt"
|
|
}
|
|
|
|
task lateinit_inBaseClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/inBaseClass.kt"
|
|
}
|
|
|
|
task lateinit_localInitialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/localInitialized.kt"
|
|
}
|
|
|
|
task lateinit_localNotInitialized(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/localNotInitialized.kt"
|
|
}
|
|
|
|
task lateinit_localCapturedInitialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/localCapturedInitialized.kt"
|
|
}
|
|
|
|
task lateinit_localCapturedNotInitialized(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/localCapturedNotInitialized.kt"
|
|
}
|
|
|
|
task lateinit_isInitialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/isInitialized.kt"
|
|
}
|
|
|
|
task lateinit_globalIsInitialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/globalIsInitialized.kt"
|
|
}
|
|
|
|
task lateinit_innerIsInitialized(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lateinit/innerIsInitialized.kt"
|
|
}
|
|
|
|
task sanity_assertions_enabled_for_local_tests(type: KonanLocalTest) {
|
|
source = "sanity/assertions_enabled_for_local_tests.kt"
|
|
}
|
|
|
|
task kclass0(type: KonanLocalTest) {
|
|
source = "codegen/kclass/kclass0.kt"
|
|
}
|
|
|
|
task kclass1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/kclass/kclass1.kt"
|
|
}
|
|
|
|
task kclassEnumArgument(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/kclass/kClassEnumArgument.kt"
|
|
}
|
|
|
|
task ktype1(type: KonanLocalTest) {
|
|
source = "codegen/ktype/ktype1.kt"
|
|
}
|
|
|
|
task ktype_nonReified(type: KonanLocalTest) {
|
|
source = "codegen/ktype/nonReified.kt"
|
|
}
|
|
|
|
task associatedObjects1(type: KonanLocalTest) {
|
|
source = "codegen/associatedObjects/associatedObjects1.kt"
|
|
}
|
|
|
|
task coroutines_simple(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/simple.kt"
|
|
}
|
|
|
|
task coroutines_degenerate1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/degenerate1.kt"
|
|
}
|
|
|
|
task coroutines_degenerate2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/degenerate2.kt"
|
|
}
|
|
|
|
task coroutines_withReceiver(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/withReceiver.kt"
|
|
}
|
|
|
|
task coroutines_correctOrder1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/correctOrder1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_chain(type: KonanLocalTest) {
|
|
source = "codegen/coroutines/controlFlow_chain.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_if1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_if1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_if2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_if2.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally2.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally3.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally4.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally5(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally5.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally6(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally6.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_finally7(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_finally7.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_inline1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_inline1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_inline2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_inline2.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_inline3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_inline3.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_tryCatch1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_tryCatch1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_tryCatch2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_tryCatch2.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_tryCatch3(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_tryCatch3.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_tryCatch4(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_tryCatch4.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_tryCatch5(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_tryCatch5.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_while1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_while1.kt"
|
|
}
|
|
|
|
task coroutines_controlFlow_while2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/controlFlow_while2.kt"
|
|
}
|
|
|
|
task coroutines_returnsNothing1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/returnsNothing1.kt"
|
|
}
|
|
|
|
task coroutines_returnsUnit1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/returnsUnit1.kt"
|
|
}
|
|
|
|
task coroutines_coroutineContext1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/coroutineContext1.kt"
|
|
}
|
|
|
|
task coroutines_coroutineContext2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/coroutineContext2.kt"
|
|
}
|
|
|
|
task coroutines_anonymousObject(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/anonymousObject.kt"
|
|
}
|
|
|
|
task coroutines_functionReference_simple(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/functionReference_simple.kt"
|
|
}
|
|
|
|
task coroutines_functionReference_eqeq_name(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/functionReference_eqeq_name.kt"
|
|
}
|
|
|
|
task coroutines_functionReference_invokeAsFunction(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/functionReference_invokeAsFunction.kt"
|
|
}
|
|
|
|
task coroutines_functionReference_lambdaAsSuspendLambda(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/functionReference_lambdaAsSuspendLambda.kt"
|
|
}
|
|
|
|
task coroutines_kt41394(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/kt41394.kt"
|
|
}
|
|
|
|
standaloneTest('coroutines_suspendConversion') {
|
|
useGoldenData = true
|
|
source = "codegen/coroutines/suspendConversion.kt"
|
|
flags = ['-XXLanguage:+SuspendConversion']
|
|
}
|
|
|
|
task AbstractMutableCollection(type: KonanLocalTest) {
|
|
expectedExitStatus = 0
|
|
source = "runtime/collections/AbstractMutableCollection.kt"
|
|
}
|
|
|
|
task BitSet(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
expectedExitStatus = 0
|
|
source = "runtime/collections/BitSet.kt"
|
|
}
|
|
|
|
task stack_array(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/stack_array.kt"
|
|
}
|
|
|
|
task array0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/array0.kt"
|
|
}
|
|
|
|
task array1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/array1.kt"
|
|
}
|
|
|
|
task array2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/array2.kt"
|
|
}
|
|
|
|
task array3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/array3.kt"
|
|
}
|
|
|
|
task array4(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/collections/array4.kt"
|
|
}
|
|
|
|
task array5(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "runtime/collections/array5.kt"
|
|
}
|
|
|
|
task typed_array0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/typed_array0.kt"
|
|
}
|
|
|
|
task typed_array1(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // No exceptions on WASM.
|
|
useGoldenData = true
|
|
source = "runtime/collections/typed_array1.kt"
|
|
}
|
|
|
|
|
|
task sort0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/sort0.kt"
|
|
}
|
|
|
|
task sort1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/sort1.kt"
|
|
}
|
|
|
|
task sortWith(type: KonanLocalTest) {
|
|
source = "runtime/collections/SortWith.kt"
|
|
}
|
|
|
|
task if_else(type: KonanLocalTest) {
|
|
source = "codegen/branching/if_else.kt"
|
|
}
|
|
|
|
task immutable_binary_blob_in_lambda(type: KonanLocalTest) {
|
|
source = "lower/immutable_blob_in_lambda.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task when2(type: KonanLocalTest) {
|
|
source = "codegen/branching/when2.kt"
|
|
}
|
|
|
|
task when5(type: KonanLocalTest) {
|
|
source = "codegen/branching/when5.kt"
|
|
}
|
|
|
|
task when6(type: KonanLocalTest) {
|
|
source = "codegen/branching/when6.kt"
|
|
}
|
|
|
|
task when7(type: KonanLocalTest) {
|
|
source = "codegen/branching/when7.kt"
|
|
}
|
|
|
|
task when8(type: KonanLocalTest) {
|
|
source = "codegen/branching/when8.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task when9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/branching/when9.kt"
|
|
}
|
|
|
|
task when_through(type: KonanLocalTest) {
|
|
source = "codegen/branching/when_through.kt"
|
|
}
|
|
|
|
task advanced_when2(type: KonanLocalTest) {
|
|
source = "codegen/branching/advanced_when2.kt"
|
|
}
|
|
|
|
task advanced_when5(type: KonanLocalTest) {
|
|
source = "codegen/branching/advanced_when5.kt"
|
|
}
|
|
|
|
task when_with_try1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/branching/when_with_try1.kt"
|
|
}
|
|
|
|
task arraysForLoops(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "codegen/bce/arraysForLoops.kt"
|
|
}
|
|
|
|
task bool_yes(type: KonanLocalTest) {
|
|
source = "codegen/function/boolean.kt"
|
|
}
|
|
|
|
task named(type: KonanLocalTest) {
|
|
source = "codegen/function/named.kt"
|
|
}
|
|
|
|
|
|
task plus_eq(type: KonanLocalTest) {
|
|
source = "codegen/function/plus_eq.kt"
|
|
}
|
|
|
|
task minus_eq(type: KonanLocalTest) {
|
|
source = "codegen/function/minus_eq.kt"
|
|
}
|
|
|
|
task eqeq(type: KonanLocalTest) {
|
|
source = "codegen/function/eqeq.kt"
|
|
}
|
|
|
|
task function_referenceBigArity(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/function/referenceBigArity.kt"
|
|
}
|
|
|
|
task cycle(type: KonanLocalTest) {
|
|
source = "codegen/cycles/cycle.kt"
|
|
}
|
|
|
|
task cycle_do(type: KonanLocalTest) {
|
|
source = "codegen/cycles/cycle_do.kt"
|
|
}
|
|
|
|
task cycle_for(type: KonanLocalTest) {
|
|
source = "codegen/cycles/cycle_for.kt"
|
|
}
|
|
|
|
task abstract_super(type: KonanLocalTest) {
|
|
source = "datagen/rtti/abstract_super.kt"
|
|
}
|
|
|
|
task vtable1(type: KonanLocalTest) {
|
|
source = "datagen/rtti/vtable1.kt"
|
|
}
|
|
|
|
task vtable_any(type: KonanLocalTest) {
|
|
source = "datagen/rtti/vtable_any.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task strdedup1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "datagen/literals/strdedup1.kt"
|
|
}
|
|
|
|
task strdedup2(type: KonanLocalTest) {
|
|
// TODO: string deduplication across several components seems to require
|
|
// linking them as bitcode modules before translating to machine code.
|
|
enabled = false
|
|
|
|
useGoldenData = true
|
|
source = "datagen/literals/strdedup2.kt"
|
|
}
|
|
|
|
task empty_string(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "datagen/literals/empty_string.kt"
|
|
}
|
|
|
|
task intrinsic(type: KonanLocalTest) {
|
|
source = "codegen/function/intrinsic.kt"
|
|
}
|
|
|
|
// Disabled until we extract the classes that should be
|
|
// always present from stdlib into a separate binary.
|
|
//
|
|
//linkTest("link") {
|
|
// useGoldenData = true
|
|
// source = "link/src/bar.kt"
|
|
// lib = "link/lib"
|
|
//}(
|
|
|
|
linkTest("link_omit_unused") {
|
|
useGoldenData = true
|
|
source = "link/omit/main.kt"
|
|
lib = "link/omit/library.kt"
|
|
}
|
|
|
|
standaloneTest("link_default_libs") {
|
|
enabled = (project.testTarget != 'wasm32') // there will be no posix.klib for wasm
|
|
useGoldenData = true
|
|
source = "link/default/default.kt"
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
standaloneTest("link_testLib_explicitly1") {
|
|
// there is no testLibrary for cross targets yet.
|
|
enabled = project.target.name == project.hostName &&
|
|
(project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM)
|
|
dependsOn installTestLib
|
|
useGoldenData = true
|
|
source = "link/testLib_explicitly1.kt"
|
|
// We force library inclusion, so need to see the warning banner.
|
|
flags = ['-l', 'testLibrary', '-r', testLibraryDir]
|
|
doLast {
|
|
def file = new File("$testLibraryDir/testLibrary")
|
|
file.deleteDir()
|
|
}
|
|
}
|
|
|
|
standaloneTest("link_testLib_explicitly2") {
|
|
// there is no testLibrary for cross targets yet.
|
|
enabled = project.target.name == project.hostName &&
|
|
!(project.globalTestArgs.contains('-Xir-property-lazy-initialization=enable') || isExperimentalMM)
|
|
dependsOn installTestLib
|
|
useGoldenData = true
|
|
source = "link/testLib_explicitly2.kt"
|
|
// We force library inclusion, so need to see the warning banner.
|
|
flags = ['-l', 'testLibrary', '-r', testLibraryDir]
|
|
doLast {
|
|
def file = new File("$testLibraryDir/testLibrary")
|
|
file.deleteDir()
|
|
}
|
|
}
|
|
|
|
linkTest("no_purge_for_dependencies") {
|
|
enabled = (project.testTarget != 'wasm32') // there will be no posix.klib for wasm
|
|
useGoldenData = true
|
|
source = "link/purge1/prog.kt"
|
|
lib = "link/purge1/lib.kt"
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
linkTest("lib@name") {
|
|
useGoldenData = true
|
|
source = "link/klib_name/prog.kt"
|
|
lib = "link/klib_name/lib.kt"
|
|
}
|
|
|
|
task for0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/for0.kt"
|
|
}
|
|
|
|
task throw0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/throw0.kt"
|
|
}
|
|
|
|
task statements0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/statements0.kt"
|
|
}
|
|
|
|
standaloneTest("annotations0") {
|
|
source = "codegen/annotations/annotations0.kt"
|
|
flags = ['-tr']
|
|
}
|
|
|
|
task boxing0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing0.kt"
|
|
}
|
|
|
|
task boxing1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing1.kt"
|
|
}
|
|
|
|
task boxing2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing2.kt"
|
|
}
|
|
|
|
task boxing3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing3.kt"
|
|
}
|
|
|
|
task boxing4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing4.kt"
|
|
}
|
|
|
|
task boxing5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing5.kt"
|
|
}
|
|
|
|
task boxing6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing6.kt"
|
|
}
|
|
|
|
task boxing7(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing7.kt"
|
|
}
|
|
|
|
task boxing8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing8.kt"
|
|
}
|
|
|
|
task boxing9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing9.kt"
|
|
}
|
|
|
|
task boxing10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing10.kt"
|
|
}
|
|
|
|
task boxing11(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing11.kt"
|
|
}
|
|
|
|
task boxing12(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing12.kt"
|
|
}
|
|
|
|
task boxing13(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing13.kt"
|
|
}
|
|
|
|
task boxing14(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing14.kt"
|
|
}
|
|
|
|
task boxing15(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/boxing15.kt"
|
|
}
|
|
|
|
task boxCache0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/boxing/box_cache0.kt"
|
|
}
|
|
|
|
task interface0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/interface0.kt"
|
|
}
|
|
|
|
task hash0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/hash0.kt"
|
|
}
|
|
|
|
task ieee754(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/ieee754.kt"
|
|
}
|
|
|
|
standaloneTest("hypotenuse") {
|
|
source = "runtime/basic/hypot.kt"
|
|
}
|
|
|
|
task array_list1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/array_list1.kt"
|
|
}
|
|
|
|
task array_list2(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // uses exceptions
|
|
useGoldenData = true
|
|
source = "runtime/collections/array_list2.kt"
|
|
}
|
|
|
|
task hash_map0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/hash_map0.kt"
|
|
}
|
|
|
|
task hash_map1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/hash_map1.kt"
|
|
}
|
|
|
|
task hash_set0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/hash_set0.kt"
|
|
}
|
|
|
|
task listof0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/listof0.kt"
|
|
}
|
|
|
|
task listof1(type: KonanLocalTest) {
|
|
enabled = false
|
|
useGoldenData = true
|
|
source = "datagen/literals/listof1.kt"
|
|
}
|
|
|
|
|
|
task moderately_large_array(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/moderately_large_array.kt"
|
|
}
|
|
|
|
task moderately_large_array1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/moderately_large_array1.kt"
|
|
}
|
|
|
|
task string_builder0(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/text/string_builder0.kt"
|
|
}
|
|
|
|
task string_builder1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/text/string_builder1.kt"
|
|
}
|
|
|
|
task string0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/text/string0.kt"
|
|
}
|
|
|
|
task parse0(type: KonanLocalTest) {
|
|
source = "runtime/text/parse0.kt"
|
|
}
|
|
|
|
task to_string0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/text/to_string0.kt"
|
|
}
|
|
|
|
task trim(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions
|
|
useGoldenData = true
|
|
source = "runtime/text/trim.kt"
|
|
}
|
|
|
|
task chars0(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "runtime/text/chars0.kt"
|
|
expectedExitStatus = 0
|
|
}
|
|
|
|
task indexof(type: KonanLocalTest) {
|
|
source = "runtime/text/indexof.kt"
|
|
}
|
|
|
|
task utf8(type: KonanLocalTest) {
|
|
// Uses exceptions so cannot run on wasm.
|
|
enabled = project.testTarget != 'wasm32'
|
|
useGoldenData = true
|
|
source = "runtime/text/utf8.kt"
|
|
}
|
|
|
|
task catch1(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/exceptions/catch1.kt"
|
|
}
|
|
|
|
task catch2(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/exceptions/catch2.kt"
|
|
}
|
|
|
|
task catch7(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/exceptions/catch7.kt"
|
|
}
|
|
|
|
task extend_exception(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/exceptions/extend0.kt"
|
|
}
|
|
|
|
standaloneTest("check_stacktrace_format") {
|
|
disabled = !supportsCoreSymbolication(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g']
|
|
source = "runtime/exceptions/check_stacktrace_format.kt"
|
|
}
|
|
|
|
standaloneTest("check_stacktrace_format_coresymbolication") {
|
|
disabled = !supportsCoreSymbolication(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xbinary=sourceInfoType=coresymbolication']
|
|
source = "runtime/exceptions/check_stacktrace_format.kt"
|
|
}
|
|
|
|
standaloneTest("stack_trace_inline") {
|
|
disabled = !supportsCoreSymbolication(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xg-generate-debug-trampoline=enable', '-Xbinary=sourceInfoType=coresymbolication']
|
|
source = "runtime/exceptions/stack_trace_inline.kt"
|
|
// test on simulator is writing Invalid connection: com.apple.coresymbolicationd by unknown reason
|
|
// so we need to use custom checker as workaround
|
|
outputChecker = { str -> str.split("\n").contains("0") }
|
|
}
|
|
|
|
standaloneTest("stack_trace_out_of_bounds") {
|
|
disabled = !supportsCoreSymbolication(project) || project.globalTestArgs.contains('-opt') || (project.testTarget == 'ios_arm64')
|
|
flags = ['-g', '-Xg-generate-debug-trampoline=enable', '-Xbinary=stripDebugInfoFromNativeLibs=false']
|
|
source = "runtime/exceptions/stack_trace_out_of_bounds.kt"
|
|
}
|
|
|
|
standaloneTest("kt-37572") {
|
|
disabled = !supportsCoreSymbolication(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xbinary=sourceInfoType=coresymbolication']
|
|
source = "runtime/exceptions/kt-37572.kt"
|
|
// test on simulator is writing Invalid connection: com.apple.coresymbolicationd by unknown reason
|
|
// so we need to use custom checker as workaround
|
|
outputChecker = { str -> str.split("\n").contains("0") }
|
|
}
|
|
|
|
standaloneTest("check_stacktrace_format_libbacktrace") {
|
|
disabled = !supportsLibBacktrace(project)|| project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xbinary=sourceInfoType=libbacktrace']
|
|
source = "runtime/exceptions/check_stacktrace_format.kt"
|
|
}
|
|
|
|
standaloneTest("stack_trace_inline_libbacktrace") {
|
|
disabled = !supportsLibBacktrace(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xbinary=sourceInfoType=libbacktrace']
|
|
source = "runtime/exceptions/stack_trace_inline.kt"
|
|
outputChecker = { str -> str.split("\n").contains("1") }
|
|
}
|
|
|
|
standaloneTest("kt-37572-libbacktrace") {
|
|
disabled = !supportsLibBacktrace(project) || project.globalTestArgs.contains('-opt')
|
|
flags = ['-g', '-Xbinary=sourceInfoType=libbacktrace']
|
|
source = "runtime/exceptions/kt-37572.kt"
|
|
outputChecker = { str -> str.split("\n").contains("2") }
|
|
}
|
|
|
|
standaloneTest("custom_hook") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("value 42: Error. Runnable state: true") && it.contains("Uncaught Kotlin exception: kotlin.Error: an error")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_memory_leak") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Hook 42") && it.contains("Uncaught Kotlin exception: kotlin.Error: an error")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook_memory_leak.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_get") {
|
|
source = "runtime/exceptions/custom_hook_get.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_no_reset") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Hook called") && it.contains("Uncaught Kotlin exception: kotlin.Error: some error")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook_no_reset.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_throws") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Hook called") && it.contains("Uncaught Kotlin exception: kotlin.Error: another error") && !it.contains("some error")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook_throws.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_unhandled_exception") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/exceptions/custom_hook_unhandled_exception.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_terminate") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Hook called")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook_terminate.kt"
|
|
}
|
|
|
|
standaloneTest("custom_hook_terminate_unhandled_exception") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Hook called") && it.contains("Uncaught Kotlin exception: kotlin.Error: some error") && !it.contains("Not going to happen")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/custom_hook_terminate_unhandled_exception.kt"
|
|
}
|
|
|
|
standaloneTest("exception_in_global_init") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
source = "runtime/exceptions/exception_in_global_init.kt"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Uncaught Kotlin exception: kotlin.IllegalStateException: FAIL") && !s.contains("in kotlin main") }
|
|
}
|
|
|
|
task rethrow_exception(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
source = "runtime/exceptions/rethrow.kt"
|
|
}
|
|
|
|
task throw_from_catch(type: KonanLocalTest) {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
source = "runtime/exceptions/throw_from_catch.kt"
|
|
}
|
|
|
|
standaloneTest("terminate") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/terminate.kt"
|
|
}
|
|
|
|
standaloneTest("unhandled_exception") {
|
|
enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
outputChecker = {
|
|
it.contains("Uncaught Kotlin exception: kotlin.Error: some error")
|
|
}
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/exceptions/unhandled_exception.kt"
|
|
}
|
|
|
|
standaloneTest("runtime_math_exceptions") {
|
|
enabled = (project.testTarget != 'wasm32')
|
|
source = "stdlib_external/numbers/MathExceptionTest.kt"
|
|
flags = ['-tr']
|
|
}
|
|
|
|
standaloneTest("runtime_math") {
|
|
source = "stdlib_external/numbers/MathTest.kt"
|
|
flags = ['-tr']
|
|
}
|
|
|
|
standaloneTest("runtime_math_harmony") {
|
|
source = "stdlib_external/numbers/HarmonyMathTests.kt"
|
|
flags = ['-tr']
|
|
}
|
|
|
|
task catch3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/catch3.kt"
|
|
}
|
|
|
|
task catch4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/catch4.kt"
|
|
}
|
|
|
|
task catch5(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/try/catch5.kt"
|
|
}
|
|
|
|
task catch6(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/try/catch6.kt"
|
|
}
|
|
|
|
task catch8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/catch8.kt"
|
|
}
|
|
|
|
task finally1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally1.kt"
|
|
}
|
|
|
|
task finally2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally2.kt"
|
|
}
|
|
|
|
task finally3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally3.kt"
|
|
}
|
|
|
|
task finally4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally4.kt"
|
|
}
|
|
|
|
task finally5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally5.kt"
|
|
}
|
|
|
|
task finally6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally6.kt"
|
|
}
|
|
|
|
task finally7(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally7.kt"
|
|
}
|
|
|
|
task finally8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally8.kt"
|
|
}
|
|
|
|
task finally9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally9.kt"
|
|
}
|
|
|
|
task finally10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally10.kt"
|
|
}
|
|
|
|
task finally11(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/finally11.kt"
|
|
}
|
|
|
|
task finally_returnsDifferentTypes(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/returnsDifferentTypes.kt"
|
|
}
|
|
|
|
task scope1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/dataflow/scope1.kt"
|
|
}
|
|
|
|
task uninitialized_val(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/dataflow/uninitialized_val.kt"
|
|
}
|
|
|
|
task try1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/try1.kt"
|
|
}
|
|
|
|
task try2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/try2.kt"
|
|
}
|
|
|
|
task try3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/try3.kt"
|
|
}
|
|
|
|
task try4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/try/try4.kt"
|
|
}
|
|
|
|
task unreachable1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/controlflow/unreachable1.kt"
|
|
}
|
|
|
|
task break_continue(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/controlflow/break.kt"
|
|
}
|
|
|
|
task break1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/controlflow/break1.kt"
|
|
}
|
|
|
|
task range0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/collections/range0.kt"
|
|
}
|
|
|
|
standaloneTest("args0") {
|
|
arguments = ["AAA", "BB", "C"]
|
|
useGoldenData = true
|
|
source = "runtime/basic/args0.kt"
|
|
}
|
|
|
|
standaloneTest("devirtualization_lateinitInterface") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
flags = ["-opt"]
|
|
source = "codegen/devirtualization/lateinitInterface.kt"
|
|
}
|
|
|
|
standaloneTest("devirtualization_getter_looking_as_box_function") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
flags = ["-opt"]
|
|
source = "codegen/devirtualization/getter_looking_as_box_function.kt"
|
|
}
|
|
|
|
standaloneTest("devirtualization_inline_getter") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
flags = ["-opt"]
|
|
source = "codegen/devirtualization/inline_getter.kt"
|
|
}
|
|
|
|
|
|
standaloneTest("devirtualization_anonymousObject") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
flags = ["-opt"]
|
|
source = "codegen/devirtualization/anonymousObject.kt"
|
|
}
|
|
|
|
task interfaceCallsNCasts_conservativeItable(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/interfaceCallsNCasts/conservativeItable.kt"
|
|
}
|
|
|
|
task interfaceCallsNCasts_functionNameClash(type: KonanLocalTest) {
|
|
source = "codegen/interfaceCallsNCasts/functionNameClash.kt"
|
|
}
|
|
|
|
task interfaceCallsNCasts_finalMethod(type: KonanLocalTest) {
|
|
source = "codegen/interfaceCallsNCasts/finalMethod.kt"
|
|
}
|
|
|
|
task interfaceCallsNCasts_diamond(type: KonanLocalTest) {
|
|
source = "codegen/interfaceCallsNCasts/diamond.kt"
|
|
}
|
|
|
|
task spread_operator_0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/spread_operator_0.kt"
|
|
}
|
|
|
|
task main_exception(type: KonanLocalTest) {
|
|
outputChecker = { s -> s.contains("kotlin.Error: Hello!") }
|
|
expectedExitStatus = 1
|
|
source = "runtime/basic/main_exception.kt"
|
|
}
|
|
|
|
task runtime_basic_standard(type: KonanLocalTest) {
|
|
source = "runtime/basic/standard.kt"
|
|
}
|
|
|
|
standaloneTest("runtime_basic_assert_failed") {
|
|
expectedExitStatusChecker = { it != 0 }
|
|
source = "runtime/basic/assert_failed.kt"
|
|
}
|
|
|
|
standaloneTest("runtime_basic_assert_passed") {
|
|
expectedExitStatus = 0
|
|
source = "runtime/basic/assert_passed.kt"
|
|
}
|
|
|
|
standaloneTest("runtime_basic_assert_disabled") {
|
|
expectedExitStatus = 0
|
|
enableKonanAssertions = false
|
|
source = "runtime/basic/assert_failed.kt"
|
|
}
|
|
|
|
task initializers0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/initializers0.kt"
|
|
}
|
|
|
|
|
|
task initializers1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
enabled = false
|
|
source = "runtime/basic/initializers1.kt"
|
|
}
|
|
|
|
|
|
task concatenation(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/concatenation.kt"
|
|
}
|
|
|
|
task const_infinity(type: KonanLocalTest) {
|
|
source = "codegen/basics/const_infinity.kt"
|
|
}
|
|
|
|
task lambda1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda1.kt"
|
|
}
|
|
|
|
task lambda2(type: KonanLocalTest) {
|
|
arguments = ["arg0"]
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda2.kt"
|
|
}
|
|
|
|
task lambda3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda3.kt"
|
|
}
|
|
|
|
task lambda4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda4.kt"
|
|
}
|
|
|
|
task lambda5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda5.kt"
|
|
}
|
|
|
|
task lambda6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda6.kt"
|
|
}
|
|
|
|
task lambda7(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda7.kt"
|
|
}
|
|
|
|
task lambda8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda8.kt"
|
|
}
|
|
|
|
task lambda9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda9.kt"
|
|
}
|
|
|
|
task lambda10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda10.kt"
|
|
}
|
|
|
|
task lambda11(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda11.kt"
|
|
}
|
|
|
|
task lambda12(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda12.kt"
|
|
}
|
|
|
|
task lambda13(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/lambda/lambda13.kt"
|
|
}
|
|
|
|
standaloneTest("lambda14") {
|
|
source = "codegen/lambda/lambda14.kt"
|
|
flags = ['-tr']
|
|
}
|
|
|
|
task lambda_kt49360(type: KonanLocalTest) {
|
|
source = "codegen/lambda/lambda_kt49360.kt"
|
|
}
|
|
|
|
task funInterface_implIsNotFunction(type: KonanLocalTest) {
|
|
source = "codegen/funInterface/implIsNotFunction.kt"
|
|
}
|
|
|
|
task funInterface_nonTrivialProjectionInSuperType(type: KonanLocalTest) {
|
|
source = "codegen/funInterface/nonTrivialProjectionInSuperType.kt"
|
|
}
|
|
|
|
task funInterface_kt43887(type: KonanLocalTest) {
|
|
source = "codegen/funInterface/kt43887.kt"
|
|
}
|
|
|
|
task funInterface_kt49384(type: KonanLocalTest) {
|
|
source = "codegen/funInterface/kt49384.kt"
|
|
}
|
|
|
|
task objectExpression1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/objectExpression/expr1.kt"
|
|
}
|
|
|
|
task objectExpression2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/objectExpression/expr2.kt"
|
|
}
|
|
|
|
task objectExpression3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/objectExpression/expr3.kt"
|
|
}
|
|
|
|
standaloneTest("initializers2") {
|
|
useGoldenData = true
|
|
|
|
source = "runtime/basic/initializers2.kt"
|
|
}
|
|
|
|
task initializers3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/initializers3.kt"
|
|
}
|
|
|
|
task initializers4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/initializers4.kt"
|
|
}
|
|
|
|
task initializers5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/initializers5.kt"
|
|
}
|
|
|
|
task initializers6(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Needs workers.
|
|
source = "runtime/basic/initializers6.kt"
|
|
}
|
|
|
|
task initializers7(type: KonanLocalTest) {
|
|
source = "runtime/basic/initializers7.kt"
|
|
}
|
|
|
|
task initializers8(type: KonanLocalTest) {
|
|
source = "runtime/basic/initializers8.kt"
|
|
}
|
|
|
|
task expression_as_statement(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/basics/expression_as_statement.kt"
|
|
}
|
|
|
|
task codegen_escapeAnalysis_zeroOutObjectOnAlloc(type: KonanLocalTest) {
|
|
source = "codegen/escapeAnalysis/zeroOutObjectOnAlloc.kt"
|
|
}
|
|
|
|
task codegen_escapeAnalysis_recursion(type: KonanLocalTest) {
|
|
source = "codegen/escapeAnalysis/recursion.kt"
|
|
}
|
|
|
|
standaloneTest("codegen_escapeAnalysis_stackAllocated") {
|
|
disabled = (cacheTesting != null) || // Cache is not compatible with -opt.
|
|
project.globalTestArgs.contains('-g') // -g and -opt are incompatible
|
|
flags = ['-opt', '-tr', '-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
source = "codegen/escapeAnalysis/stackAllocated.kt"
|
|
}
|
|
|
|
task memory_var1(type: KonanLocalTest) {
|
|
source = "runtime/memory/var1.kt"
|
|
}
|
|
|
|
task memory_var2(type: KonanLocalTest) {
|
|
source = "runtime/memory/var2.kt"
|
|
}
|
|
|
|
task memory_var3(type: KonanLocalTest) {
|
|
source = "runtime/memory/var3.kt"
|
|
}
|
|
|
|
task memory_var4(type: KonanLocalTest) {
|
|
source = "runtime/memory/var4.kt"
|
|
}
|
|
|
|
task memory_throw_cleanup(type: KonanLocalTest) {
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "runtime/memory/throw_cleanup.kt"
|
|
}
|
|
|
|
task memory_escape0(type: KonanLocalTest) {
|
|
source = "runtime/memory/escape0.kt"
|
|
}
|
|
|
|
task memory_escape1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/memory/escape1.kt"
|
|
}
|
|
|
|
task memory_cycles0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/memory/cycles0.kt"
|
|
}
|
|
|
|
task memory_cycles1(type: KonanLocalTest) {
|
|
enabled = !isNoopGC
|
|
source = "runtime/memory/cycles1.kt"
|
|
}
|
|
|
|
task memory_basic0(type: KonanLocalTest) {
|
|
source = "runtime/memory/basic0.kt"
|
|
}
|
|
|
|
task memory_escape2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/memory/escape2.kt"
|
|
}
|
|
|
|
task memory_weak0(type: KonanLocalTest) {
|
|
enabled = !isNoopGC
|
|
useGoldenData = true
|
|
source = "runtime/memory/weak0.kt"
|
|
}
|
|
|
|
task memory_weak1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "runtime/memory/weak1.kt"
|
|
}
|
|
|
|
standaloneTest("memory_only_gc") {
|
|
source = "runtime/memory/only_gc.kt"
|
|
}
|
|
|
|
task memory_stable_ref_cross_thread_check(type: KonanLocalTest) {
|
|
disabled = (project.testTarget == 'wasm32') // Needs workers.
|
|
source = "runtime/memory/stable_ref_cross_thread_check.kt"
|
|
}
|
|
|
|
standaloneTest("cycle_detector") {
|
|
disabled = project.globalTestArgs.contains('-opt') || // Needs debug build.
|
|
(project.testTarget == 'wasm32') || // CycleDetector is disabled on WASM.
|
|
isExperimentalMM // Experimental MM will not support CycleDetector.
|
|
flags = ['-tr', '-g']
|
|
source = "runtime/memory/cycle_detector.kt"
|
|
}
|
|
|
|
standaloneTest("cycle_collector") {
|
|
disabled = true // Needs USE_CYCLIC_GC, which is disabled.
|
|
source = "runtime/memory/cycle_collector.kt"
|
|
}
|
|
|
|
standaloneTest("cycle_collector_deadlock1") {
|
|
disabled = true // Needs USE_CYCLIC_GC, which is disabled.
|
|
source = "runtime/memory/cycle_collector_deadlock1.kt"
|
|
}
|
|
|
|
standaloneTest("leakMemory") {
|
|
source = "runtime/memory/leak_memory.kt"
|
|
if (!isExperimentalMM) { // Experimental MM will not report memory leaks.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
|
}
|
|
}
|
|
|
|
standaloneTest("leakMemoryWithTestRunner") {
|
|
source = "runtime/memory/leak_memory_test_runner.kt"
|
|
flags = ['-tr']
|
|
if (!isExperimentalMM) { // Experimental MM will not report memory leaks.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
|
}
|
|
}
|
|
|
|
standaloneTest("stress_gc_allocations") {
|
|
// TODO: Support obtaining peak RSS on more platforms.
|
|
enabled = (project.testTarget != "wasm32") &&
|
|
(project.testTarget != "watchos_arm32") &&
|
|
(project.testTarget != "watchos_arm64") &&
|
|
(project.testTarget != "watchos_x86") &&
|
|
(project.testTarget != "watchos_x64") &&
|
|
(project.testTarget != "watchos_simulator_arm64") &&
|
|
!isNoopGC
|
|
source = "runtime/memory/stress_gc_allocations.kt"
|
|
flags = ['-tr', '-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
standaloneTest("mpp1") {
|
|
source = "codegen/mpp/mpp1.kt"
|
|
flags = ['-tr', '-Xmulti-platform']
|
|
}
|
|
|
|
linkTest("mpp2") {
|
|
useGoldenData = true
|
|
source = "codegen/mpp/mpp2.kt"
|
|
lib = "codegen/mpp/libmpp2.kt"
|
|
flags = ['-Xmulti-platform']
|
|
}
|
|
|
|
standaloneTest("mpp_default_args") {
|
|
source = "codegen/mpp/mpp_default_args.kt"
|
|
flags = ['-tr', '-Xmulti-platform']
|
|
}
|
|
|
|
standaloneTest("mpp_optional_expectation") {
|
|
source = "codegen/mpp/mpp_optional_expectation.kt"
|
|
def outputRoot = project.ext.testOutputLocal.toString()
|
|
def srcPath = "$outputRoot/$name/mpp_optional_expectation.kt".with {
|
|
isWindows() ? it.replaceAll("/", "\\\\") : it
|
|
}
|
|
flags = [
|
|
'-Xmulti-platform',
|
|
"-Xcommon-sources=$srcPath"
|
|
]
|
|
}
|
|
|
|
standaloneTest("freezing_control_basic_full") {
|
|
enabled = isExperimentalMM
|
|
source = "runtime/freezing_control/basic.kt"
|
|
flags = [
|
|
'-Xbinary=freezing=full',
|
|
'-friend-modules', project.rootProject.file("${UtilsKt.getKotlinNativeDist(project)}/klib/common/stdlib").absolutePath
|
|
]
|
|
arguments = ['full']
|
|
}
|
|
|
|
standaloneTest("freezing_control_basic_disabled") {
|
|
enabled = isExperimentalMM
|
|
source = "runtime/freezing_control/basic.kt"
|
|
flags = [
|
|
'-Xbinary=freezing=disabled',
|
|
'-friend-modules', project.rootProject.file("${UtilsKt.getKotlinNativeDist(project)}/klib/common/stdlib").absolutePath
|
|
]
|
|
arguments = ['disabled']
|
|
}
|
|
|
|
standaloneTest("freezing_control_basic_explicitOnly") {
|
|
enabled = isExperimentalMM
|
|
source = "runtime/freezing_control/basic.kt"
|
|
flags = [
|
|
'-Xbinary=freezing=explicitOnly',
|
|
'-friend-modules', project.rootProject.file("${UtilsKt.getKotlinNativeDist(project)}/klib/common/stdlib").absolutePath
|
|
]
|
|
arguments = ['explicitOnly']
|
|
}
|
|
|
|
task unit1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/unit1.kt"
|
|
}
|
|
|
|
task unit2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/unit2.kt"
|
|
}
|
|
|
|
task unit3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/unit3.kt"
|
|
}
|
|
|
|
task unit4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/basics/unit4.kt"
|
|
}
|
|
|
|
task kt42000_1(type: KonanLocalTest) {
|
|
source = "codegen/basics/k42000_1.kt"
|
|
}
|
|
|
|
task kt42000_2(type: KonanLocalTest) {
|
|
source = "codegen/basics/k42000_2.kt"
|
|
}
|
|
|
|
task inline0(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline0.kt"
|
|
}
|
|
|
|
task vararg0(type: KonanLocalTest) {
|
|
source = "lower/vararg.kt"
|
|
}
|
|
|
|
task vararg_of_literals(type: KonanLocalTest) {
|
|
enabled = false
|
|
useGoldenData = true
|
|
source = "lower/vararg_of_literals.kt"
|
|
}
|
|
|
|
standaloneTest('tailrec') {
|
|
useGoldenData = true
|
|
source = "lower/tailrec.kt"
|
|
flags = ['-XXLanguage:-ProhibitTailrecOnVirtualMember', '-e', 'lower.tailrec.main']
|
|
}
|
|
|
|
task inline1(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline1.kt"
|
|
}
|
|
|
|
task inline2(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline2.kt"
|
|
}
|
|
|
|
task inline3(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline3.kt"
|
|
}
|
|
|
|
task inline4(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline4.kt"
|
|
}
|
|
|
|
task inline5(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline5.kt"
|
|
}
|
|
|
|
task inline6(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline6.kt"
|
|
}
|
|
|
|
task inline7(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline7.kt"
|
|
}
|
|
|
|
task inline8(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline8.kt"
|
|
}
|
|
|
|
task inline9(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline9.kt"
|
|
}
|
|
|
|
task inline10(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline10.kt"
|
|
}
|
|
|
|
task inline13(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline13.kt"
|
|
}
|
|
|
|
task inline14(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline14.kt"
|
|
}
|
|
|
|
task inline15(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline15.kt"
|
|
}
|
|
|
|
task inline16(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline16.kt"
|
|
}
|
|
|
|
task inline17(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline17.kt"
|
|
}
|
|
|
|
task inline18(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline18.kt"
|
|
}
|
|
|
|
task inline19(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline19.kt"
|
|
}
|
|
|
|
task inline20(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline20.kt"
|
|
}
|
|
|
|
task inline21(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline21.kt"
|
|
}
|
|
|
|
task inline22(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline22.kt"
|
|
}
|
|
|
|
task inline23(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline23.kt"
|
|
}
|
|
|
|
task inline24(type: KonanLocalTest) {
|
|
enabled = false
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline24.kt"
|
|
}
|
|
|
|
task inline25(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline25.kt"
|
|
}
|
|
|
|
task inline26(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/inline26.kt"
|
|
}
|
|
|
|
task inline_type_substitution_in_fake_override(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/typeSubstitutionInFakeOverride.kt"
|
|
}
|
|
|
|
task inline_localFunctionInInitializerBlock(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/localFunctionInInitializerBlock.kt"
|
|
}
|
|
|
|
task inline_lambdaInDefaultValue(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/lambdaInDefaultValue.kt"
|
|
}
|
|
|
|
task inline_lambdaAsAny(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/lambdaAsAny.kt"
|
|
}
|
|
|
|
task inline_getClass(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/getClass.kt"
|
|
}
|
|
|
|
task inline_statementAsLastExprInBlock(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/statementAsLastExprInBlock.kt"
|
|
}
|
|
|
|
task inline_returnLocalClassFromBlock(type: KonanLocalTest) {
|
|
enabled = false
|
|
useGoldenData = true
|
|
source = "codegen/inline/returnLocalClassFromBlock.kt"
|
|
}
|
|
|
|
task inline_changingCapturedLocal(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/changingCapturedLocal.kt"
|
|
}
|
|
|
|
task inline_defaultArgs(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/defaultArgs.kt"
|
|
}
|
|
|
|
task inline_propertyAccessorInline(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/propertyAccessorInline.kt"
|
|
}
|
|
|
|
task inline_twiceInlinedObject(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/twiceInlinedObject.kt"
|
|
}
|
|
|
|
task inline_localObjectReturnedFromWhen(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/localObjectReturnedFromWhen.kt"
|
|
}
|
|
|
|
task inline_genericFunctionReference(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/genericFunctionReference.kt"
|
|
}
|
|
|
|
task inline_correctOrderFunctionReference(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/correctOrderFunctionReference.kt"
|
|
}
|
|
|
|
task inline_coercionToUnit(type: KonanLocalTest) {
|
|
useGoldenData = true
|
|
source = "codegen/inline/coercionToUnit.kt"
|
|
}
|
|
|
|
task inline_redundantCoercionsCleaner(type: KonanLocalTest) {
|
|
source = "codegen/inline/redundantCoercionsCleaner.kt"
|
|
}
|
|
|
|
task classDeclarationInsideInline(type: KonanLocalTest) {
|
|
source = "codegen/inline/classDeclarationInsideInline.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
task inlineClass0(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/inlineClass0.kt"
|
|
}
|
|
|
|
task inlineClass_customEquals(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/customEquals.kt"
|
|
}
|
|
|
|
task inlineClass_defaultEquals(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/defaultEquals.kt"
|
|
}
|
|
|
|
task inlineClass_secondaryConstructorWithGenerics(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/secondaryConstructorWithGenerics.kt"
|
|
}
|
|
|
|
task inlineClass_nestedInlineClasses(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/nestedInlineClasses.kt"
|
|
}
|
|
|
|
task valueClass0(type: KonanLocalTest) {
|
|
source = "codegen/inlineClass/valueClass0.kt"
|
|
}
|
|
|
|
task deserialized_inline0(type: KonanLocalTest) {
|
|
source = "serialization/deserialized_inline0.kt"
|
|
}
|
|
|
|
task deserialized_listof0(type: KonanLocalTest) {
|
|
source = "serialization/deserialized_listof0.kt"
|
|
}
|
|
|
|
task deserialized_fields(type: KonanLocalTest) {
|
|
source = "serialization/deserialized_fields.kt"
|
|
}
|
|
|
|
KotlinNativeTestKt.createTest(project, "kt39548", KonanStandaloneTest) { task ->
|
|
// Test infrastructure doesn't support generated source;
|
|
// workaround by specifying dummy source:
|
|
task.source = "does/not/exist/kt39548.dummy.kt"
|
|
task.enabled = isWindowsTarget(project)
|
|
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
program(name, targets: [target.name]) {
|
|
baseDir "$testOutputLocal/$name"
|
|
srcFiles "$buildDir/kt39548/kt39548.kt" // Generated by doBeforeBuild task.
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
doBeforeBuild {
|
|
GenTestKT39548Kt.genTestKT39548(file("$buildDir/kt39548/kt39548.kt"))
|
|
}
|
|
}
|
|
}
|
|
|
|
linkTest("deserialized_members") {
|
|
source = "serialization/deserialized_members/main.kt"
|
|
lib = "serialization/deserialized_members/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_catch") {
|
|
source = "serialization/serialized_catch/main.kt"
|
|
lib = "serialization/serialized_catch/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_doWhile") {
|
|
source = "serialization/serialized_doWhile/main.kt"
|
|
lib = "serialization/serialized_doWhile/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_vararg") {
|
|
source = "serialization/serialized_vararg/main.kt"
|
|
lib = "serialization/serialized_vararg/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_default_args") {
|
|
source = "serialization/serialized_default_args/main.kt"
|
|
lib = "serialization/serialized_default_args/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("serialized_no_typemap") {
|
|
source = "serialization/regression/no_type_map.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_enum_ordinal") {
|
|
source = "serialization/enum_ordinal/main.kt"
|
|
lib = "serialization/enum_ordinal/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("serialized_char_constant") {
|
|
source = "serialization/serialized_char_constant/main.kt"
|
|
lib = "serialization/serialized_char_constant/library.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("testing_annotations") {
|
|
source = "testing/annotations.kt"
|
|
flags = ['-tr']
|
|
arguments = ['--ktest_logger=SIMPLE']
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("testing_assertions") {
|
|
source = "testing/assertions.kt"
|
|
flags = ['-tr']
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
expectedExitStatus = 0
|
|
}
|
|
|
|
standaloneTest("testing_custom_main") {
|
|
source = "testing/custom_main.kt"
|
|
flags = ['-tr', '-e', 'kotlin.test.tests.main']
|
|
arguments = ['--ktest_logger=SIMPLE', '--ktest_repeat=2']
|
|
useGoldenData = true
|
|
}
|
|
|
|
standaloneTest("testing_library_usage") {
|
|
def target = project.testTarget ?: 'host'
|
|
dependsOn konanArtifacts.baseTestClass.getByTarget(target)
|
|
def klib = konanArtifacts.baseTestClass.getArtifactByTarget(target)
|
|
source = 'testing/library_user.kt'
|
|
flags = ['-tr', '-e', 'main', '-l', klib.absolutePath]
|
|
arguments = ['--ktest_logger=SILENT']
|
|
}
|
|
|
|
class Filter {
|
|
List<String> positive
|
|
List<String> negative
|
|
List<String> expectedTests
|
|
|
|
Filter(List<String> positive, List<String> negative, List<String> expectedTests) {
|
|
this.positive = positive
|
|
this.negative = negative
|
|
this.expectedTests = expectedTests
|
|
}
|
|
|
|
List<String> args() {
|
|
List<String> result = []
|
|
if (positive != null && !positive.isEmpty()) {
|
|
result += "--ktest_gradle_filter=${asListOfPatterns(positive)}"
|
|
}
|
|
if (negative != null && !negative.isEmpty()) {
|
|
result += "--ktest_negative_gradle_filter=${asListOfPatterns(negative)}"
|
|
}
|
|
return result
|
|
}
|
|
|
|
static private String asListOfPatterns(List<String> input) {
|
|
return input.collect { "kotlin.test.tests.$it" }.join(",")
|
|
}
|
|
}
|
|
|
|
standaloneTest("testing_filters") {
|
|
source = "testing/filters.kt"
|
|
flags = ['-tr', '-ea']
|
|
def filters = [
|
|
new Filter(["A.foo1", "B", "FiltersKt.foo1"], [], ["A.foo1", "B.foo1", "B.foo2", "B.bar", "FiltersKt.foo1"]),
|
|
new Filter([], ["A.foo1", "B", "FiltersKt.foo1"], ["A.foo2", "A.bar", "FiltersKt.foo2", "FiltersKt.bar"]),
|
|
new Filter(["A", "FiltersKt"], ["A.foo1", "FiltersKt.foo1"], ["A.foo2", "A.bar", "FiltersKt.foo2", "FiltersKt.bar"]),
|
|
new Filter(["A.foo*", "B.*"], [], ["A.foo1", "A.foo2", "B.foo1", "B.foo2", "B.bar"]),
|
|
new Filter([], ["A.foo*", "B.*"], ["A.bar", "FiltersKt.foo1", "FiltersKt.foo2", "FiltersKt.bar"]),
|
|
new Filter(["*.foo*"], ["B"], ["A.foo1", "A.foo2", "FiltersKt.foo1", "FiltersKt.foo2"]),
|
|
new Filter(["A"], ["*.foo*"], ["A.bar"])
|
|
]
|
|
multiRuns = true
|
|
multiArguments = filters.collect { it.args() + '--ktest_logger=SIMPLE' }
|
|
outputChecker = { String output ->
|
|
// The first chunk is empty - drop it.
|
|
def outputs = output.split("Starting testing\n").drop(1)
|
|
if (outputs.size() != filters.size()) {
|
|
println("Incorrect number of test runs. Expected: ${filters.size()}, actual: ${outputs.size()}")
|
|
return false
|
|
}
|
|
|
|
// Check the correct set of tests was executed in each run.
|
|
for (int i = 0; i < outputs.size(); i++) {
|
|
def actualMessages = outputs[i].split('\n').findAll { it.startsWith("Passed: ") }
|
|
def expectedMessages = filters[i].expectedTests.collect { String test ->
|
|
def method = test.substring(test.lastIndexOf('.') + 1)
|
|
def suite = test.substring(0, test.lastIndexOf('.'))
|
|
"Passed: $method (kotlin.test.tests.$suite)".toString()
|
|
}
|
|
|
|
if (actualMessages.size() != expectedMessages.size()) {
|
|
println("Incorrect number of tests executed for filters[$i]. Expected: ${expectedMessages.size()}. Actual: ${actualMessages.size()}")
|
|
return false
|
|
}
|
|
|
|
for (message in expectedMessages) {
|
|
if (!actualMessages.contains(message)) {
|
|
println("Test run output for filters[$i] doesn't contain the expected message '$message'")
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
}
|
|
|
|
standaloneTest("testing_filtered_suites") {
|
|
source = "testing/filtered_suites.kt"
|
|
flags = ["-tr", "-ea"]
|
|
|
|
def filters = [
|
|
["Filtered_suitesKt.*"], // filter out a class.
|
|
["A.*"], // filter out a top-level suite.
|
|
["*.common"], // run a test from all suites -> all hooks executed.
|
|
["Ignored.*"], // an ignored suite -> no hooks executed.
|
|
["A.ignored"] // a suite with only ignored tests -> no hooks executed.
|
|
]
|
|
def expectedHooks = [
|
|
["Filtered_suitesKt.before", "Filtered_suitesKt.after"],
|
|
["A.before", "A.after"],
|
|
["A.before", "A.after", "Filtered_suitesKt.before", "Filtered_suitesKt.after"],
|
|
[],
|
|
[]
|
|
]
|
|
|
|
multiRuns = true
|
|
multiArguments = filters.collect {
|
|
def filter = it.collect { "kotlin.test.tests.$it" }.join(",")
|
|
["--ktest_gradle_filter=$filter", "--ktest_logger=SIMPLE"]
|
|
}
|
|
outputChecker = { String output ->
|
|
// The first chunk is empty - drop it.
|
|
def outputs = output.split("Starting testing\n").drop(1)
|
|
if (outputs.size() != expectedHooks.size()) {
|
|
println("Incorrect number of test runs. Expected: ${expectedHooks.size()}, actual: ${outputs.size()}")
|
|
return false
|
|
}
|
|
|
|
// Check the correct set of hooks was executed on each run.
|
|
for (int i = 0; i < outputs.size(); i++) {
|
|
def actual = outputs[i].split('\n')
|
|
.findAll { it.startsWith("Hook:") }
|
|
.collect { it.replace("Hook: ", "") }
|
|
def expected = expectedHooks[i]
|
|
|
|
if (actual.size() != expected.size()) {
|
|
println("Incorrect number of executed hooks for run #$i. Expected: ${expected.size()}. Actual: ${actual.size()}")
|
|
println("Expected hooks: $expected")
|
|
println("Actual hooks: $actual")
|
|
return false
|
|
}
|
|
|
|
for (expectedHook in expected) {
|
|
if (!actual.contains(expectedHook)) {
|
|
println("Expected hook wasn't executed for run #$i: $expectedHook")
|
|
println("Expected hooks: $expected")
|
|
println("Actual hooks: $actual")
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
}
|
|
|
|
// Check that stacktraces and ignored suite are correctly reported in the TC logger.
|
|
standaloneTest("testing_stacktrace") {
|
|
source = "testing/stacktrace.kt"
|
|
flags = ['-tr', '-ea']
|
|
arguments = ["--ktest_logger=TEAMCITY", "--ktest_no_exit_code"]
|
|
expectedFail = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
// This test prints TeamCity service messages about failed test causing false negative failure at CI.
|
|
// So we need to suppress printing these messages to stdout.
|
|
// printOutput = false
|
|
outputChecker = { String output ->
|
|
def ignoredOutput = """\
|
|
|##teamcity[testSuiteStarted name='kotlin.test.tests.Ignored' locationHint='ktest:suite://kotlin.test.tests.Ignored']
|
|
|##teamcity[testIgnored name='foo']
|
|
|##teamcity[testSuiteFinished name='kotlin.test.tests.Ignored']""".stripMargin()
|
|
def failedOutput = """\
|
|
|##teamcity[testSuiteStarted name='kotlin.test.tests.Failed' locationHint='ktest:suite://kotlin.test.tests.Failed']
|
|
|##teamcity[testStarted name='bar' locationHint='ktest:test://kotlin.test.tests.Failed.bar']
|
|
|##teamcity[testFailed name='bar' message='Bar' details='kotlin.Exception: Bar|n""".stripMargin()
|
|
|
|
def shownInnerException = output.readLines()
|
|
.find { it.startsWith("##teamcity[testFailed name='bar'") }
|
|
?.contains("Caused by: kotlin.Exception: Baz") ?: false
|
|
|
|
return output.contains(ignoredOutput) && output.contains(failedOutput) && shownInnerException
|
|
}
|
|
}
|
|
|
|
// Just check that the driver is able to produce runnable binaries.
|
|
tasks.register("driver0", KonanDriverTest) {
|
|
useGoldenData = true
|
|
source = "runtime/basic/driver0.kt"
|
|
}
|
|
|
|
tasks.register("driver_opt", KonanDriverTest) {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
source = "runtime/basic/driver_opt.kt"
|
|
flags = ["-opt"]
|
|
}
|
|
|
|
// Enable when deserialization for default arguments is fixed.
|
|
linkTest("inline_defaultArgs_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/inline/defaultArgs_linkTest_main.kt"
|
|
lib = "codegen/inline/defaultArgs_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("inline_sharedVar_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/inline/sharedVar_linkTest_main.kt"
|
|
lib = "codegen/inline/sharedVar_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("inline_lateinitProperty_linkTest") {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
useGoldenData = true
|
|
source = "codegen/inline/lateinitProperty_linkTest_main.kt"
|
|
lib = "codegen/inline/lateinitProperty_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("inline_inlineCtor_linkTest") {
|
|
source = "codegen/inline/inlineCtor_linkTest_main.kt"
|
|
lib = "codegen/inline/inlineCtor_linkTest_lib.kt"
|
|
}
|
|
|
|
linkTest("inline_innerInlineFunCapturesOuter_linkTest") {
|
|
useGoldenData = true
|
|
source = "codegen/inline/innerInlineFunCapturesOuter_linkTest_main.kt"
|
|
lib = "codegen/inline/innerInlineFunCapturesOuter_linkTest_lib.kt"
|
|
}
|
|
|
|
def generateWithSpaceDefFile() {
|
|
def mapOption = "--Map \"${buildDir}/cutom map.map\""
|
|
if (isAppleTarget(project)) {
|
|
mapOption = "-map \"${buildDir}/cutom map.map\""
|
|
} else if (isWindowsTarget(project)) {
|
|
mapOption = "\"-Wl,--Map,${buildDir}/cutom map.map\""
|
|
}
|
|
|
|
def file = new File("${buildDir}/withSpaces.def")
|
|
file.write """
|
|
headers = stdio.h "${projectDir}/interop/basics/custom headers/custom.h"
|
|
linkerOpts = $mapOption
|
|
---
|
|
|
|
int customCompare(const char* str1, const char* str2) {
|
|
return custom_strcmp(str1, str2);
|
|
}
|
|
"""
|
|
return file.absolutePath
|
|
}
|
|
|
|
// A helper method to create interop artifacts
|
|
void createInterop(String name, Closure conf) {
|
|
konanArtifacts {
|
|
interop(name, targets: [target.name]) {
|
|
conf(it)
|
|
noDefaultLibs(true)
|
|
noEndorsedLibs(true)
|
|
baseDir "$testOutputLocal/$name"
|
|
}
|
|
}
|
|
}
|
|
|
|
createInterop("sysstat") {
|
|
// FIXME: creates empty file to workaround konan gradle plugin issue (should be able to have no def file)
|
|
def f = File.createTempFile("sysstat.empty", ".def")
|
|
it.packageName 'sysstat'
|
|
// FIXME: this option doesn't work due to an issue in plugin: it tries to resolve header in project dir.
|
|
//it.headers 'sys/stat.h'
|
|
f.write("headers = sys/stat.h")
|
|
it.defFile f
|
|
}
|
|
|
|
createInterop("cstdlib") {
|
|
def f = File.createTempFile("cstdlib.empty", ".def")
|
|
it.packageName 'cstdlib'
|
|
// it.headers 'stdlib.h'
|
|
f.write("headers = stdlib.h")
|
|
it.defFile f
|
|
}
|
|
|
|
createInterop("cstdio") {
|
|
it.defFile 'interop/basics/cstdio.def'
|
|
}
|
|
|
|
createInterop("sockets") {
|
|
it.defFile 'interop/basics/sockets.def'
|
|
}
|
|
|
|
createInterop("bitfields") {
|
|
it.defFile 'interop/basics/bitfields.def'
|
|
}
|
|
|
|
createInterop("cglobals") {
|
|
it.defFile 'interop/basics/cglobals.def'
|
|
}
|
|
|
|
createInterop("cfunptr") {
|
|
it.defFile 'interop/basics/cfunptr.def'
|
|
}
|
|
|
|
createInterop("cmacros") {
|
|
it.defFile 'interop/basics/cmacros.def'
|
|
}
|
|
|
|
createInterop("cunsupported") {
|
|
it.defFile 'interop/basics/cunsupported.def'
|
|
}
|
|
|
|
createInterop("ctoKString") {
|
|
it.defFile 'interop/basics/ctoKString.def'
|
|
}
|
|
|
|
createInterop("ctypes") {
|
|
it.defFile 'interop/basics/ctypes.def'
|
|
}
|
|
|
|
createInterop("structAnonym") {
|
|
it.defFile 'interop/basics/structAnonym.def'
|
|
}
|
|
|
|
createInterop("cvalues") {
|
|
it.defFile 'interop/basics/cvalues.def'
|
|
}
|
|
|
|
createInterop("cvectors") {
|
|
it.defFile 'interop/basics/cvectors.def'
|
|
}
|
|
|
|
createInterop("cstructs") {
|
|
it.defFile 'interop/basics/cstructs.def'
|
|
}
|
|
|
|
createInterop("ccallbacksAndVarargs") {
|
|
it.defFile 'interop/basics/ccallbacksAndVarargs.def'
|
|
}
|
|
|
|
createInterop("cmangling") {
|
|
it.defFile 'interop/basics/mangling.def'
|
|
}
|
|
|
|
createInterop("cmangling2") {
|
|
it.defFile 'interop/basics/mangling2.def'
|
|
}
|
|
|
|
createInterop("cmangling_keywords") {
|
|
it.defFile 'interop/basics/mangling_keywords.def'
|
|
}
|
|
|
|
createInterop("cmangling_keywords2") {
|
|
it.defFile 'interop/basics/mangling_keywords2.def'
|
|
}
|
|
|
|
createInterop("cunion") {
|
|
it.defFile 'interop/basics/cunion.def'
|
|
}
|
|
|
|
createInterop("cenums") {
|
|
it.defFile 'interop/basics/cenums.def'
|
|
}
|
|
|
|
createInterop("carrayPointers") {
|
|
it.defFile 'interop/basics/carrayPointers.def'
|
|
}
|
|
|
|
createInterop("auxiliaryCppSources") {
|
|
// We need to provide empty def file to create correct `KonanInteropTask`.
|
|
it.defFile 'interop/auxiliary_sources/auxiliaryCppSources.def'
|
|
it.headers "$projectDir/interop/auxiliary_sources/name.h"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/auxiliary_sources/name.cpp"
|
|
it.extraOpts "-Xsource-compiler-option", "-std=c++17"
|
|
}
|
|
|
|
createInterop("concurrentTerminate") {
|
|
it.defFile 'interop/concurrentTerminate/concurrentTerminate.def'
|
|
it.headers "$projectDir/interop/concurrentTerminate/async.h"
|
|
// TODO: Using `-Xcompile-source` does not imply dependency on that source, so the task will no re-run when the source is updated.
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/concurrentTerminate/async.cpp"
|
|
it.extraOpts "-Xsource-compiler-option", "-std=c++17"
|
|
}
|
|
|
|
createInterop("incomplete_types") {
|
|
it.defFile 'interop/incomplete_types/library.def'
|
|
it.headers "$projectDir/interop/incomplete_types/library.h"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/incomplete_types/library.cpp"
|
|
}
|
|
|
|
createInterop("embedStaticLibraries") {
|
|
it.defFile 'interop/embedStaticLibraries/embedStaticLibraries.def'
|
|
it.headers "$projectDir/interop/embedStaticLibraries/embedStaticLibraries.h"
|
|
|
|
// Note: also hardcoded in def file.
|
|
final String libDir = "$buildDir/embedStaticLibraries/"
|
|
|
|
it.getByTarget(target.name).configure {
|
|
doFirst {
|
|
1.upto(4) {
|
|
UtilsKt.buildStaticLibrary(
|
|
project,
|
|
[file("$projectDir/interop/embedStaticLibraries/${it}.c")],
|
|
file("$libDir/${it}.a"),
|
|
file("$libDir/${it}.objs"),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
it.extraOpts '-staticLibrary', "1.a"
|
|
it.extraOpts '-staticLibrary', "2.a"
|
|
}
|
|
|
|
createInterop("kt43265") {
|
|
it.defFile 'interop/kt43265/kt43265.def'
|
|
}
|
|
|
|
createInterop("kt44283") {
|
|
it.defFile 'interop/kt44283/kt44283.def'
|
|
}
|
|
|
|
createInterop("kt43502") {
|
|
it.defFile 'interop/kt43502/kt43502.def'
|
|
it.headers "$projectDir/interop/kt43502/kt43502.h"
|
|
// Note: also hardcoded in def file.
|
|
final String libDir = "$buildDir/kt43502/"
|
|
// Construct library that contains actual symbol definition.
|
|
it.getByTarget(target.name).configure {
|
|
doFirst {
|
|
UtilsKt.buildStaticLibrary(
|
|
project,
|
|
[file("$projectDir/interop/kt43502/kt43502.c")],
|
|
file("$libDir/kt43502.a"),
|
|
file("$libDir/kt43502.objs"),
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
createInterop("leakMemoryWithRunningThread") {
|
|
it.defFile 'interop/leakMemoryWithRunningThread/leakMemory.def'
|
|
it.headers "$projectDir/interop/leakMemoryWithRunningThread/leakMemory.h"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/leakMemoryWithRunningThread/leakMemory.cpp"
|
|
}
|
|
|
|
createInterop("cppClass") {
|
|
it.defFile 'interop/cpp/cppClass.def'
|
|
}
|
|
|
|
createInterop("cppTypes") {
|
|
it.defFile 'interop/cpp/types.def'
|
|
}
|
|
|
|
createInterop("cppSkia") {
|
|
it.defFile 'interop/cpp/skia.def'
|
|
}
|
|
|
|
createInterop("cppSkiaSignature") {
|
|
it.defFile 'interop/cpp/skiaSignature.def'
|
|
}
|
|
|
|
createInterop("threadStates") {
|
|
it.defFile "interop/threadStates/threadStates.def"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/threadStates/threadStates.cpp"
|
|
}
|
|
|
|
if (PlatformInfo.isAppleTarget(project)) {
|
|
createInterop("objcSmoke") {
|
|
it.defFile 'interop/objc/objcSmoke.def'
|
|
it.headers "$projectDir/interop/objc/smoke.h"
|
|
}
|
|
|
|
createInterop("objcTests") {
|
|
it.defFile 'interop/objc/objcTests.def'
|
|
it.headers fileTree("$projectDir/interop/objc/tests") { include '**/*.h' }
|
|
}
|
|
|
|
createInterop("objcMisc") {
|
|
it.defFile 'interop/objc_with_initializer/objc_misc.def'
|
|
it.headers "$projectDir/interop/objc_with_initializer/objc_misc.h"
|
|
}
|
|
|
|
createInterop("objcMessaging") {
|
|
it.defFile 'interop/objc/msg_send/messaging.def'
|
|
it.headers "$projectDir/interop/objc/msg_send/messaging.h"
|
|
}
|
|
|
|
createInterop("foreignException") {
|
|
it.defFile 'interop/objc/foreignException/objc_wrap.def'
|
|
it.headers "$projectDir/interop/objc/foreignException/objc_wrap.h"
|
|
}
|
|
|
|
createInterop("foreignExceptionMode_default") {
|
|
it.defFile 'interop/objc/foreignException/objcExceptionMode.def'
|
|
it.headers "$projectDir/interop/objc/foreignException/objc_wrap.h"
|
|
}
|
|
|
|
createInterop("foreignExceptionMode_wrap") {
|
|
it.defFile 'interop/objc/foreignException/objcExceptionMode.def'
|
|
it.headers "$projectDir/interop/objc/foreignException/objc_wrap.h"
|
|
it.extraOpts '-Xforeign-exception-mode', "objc-wrap"
|
|
}
|
|
|
|
createInterop("objcKt34467") {
|
|
it.defFile 'interop/objc/kt34467/module_library.def'
|
|
def moduleMap = file("interop/objc/kt34467/module_library.modulemap").absolutePath
|
|
def includePath = file("interop/objc/kt34467").absolutePath
|
|
it.compilerOpts "-fmodule-map-file=$moduleMap", "-I$includePath"
|
|
}
|
|
createInterop("objcGh3343") {
|
|
it.defFile 'framework/gh3343/objclib.def'
|
|
it.headers "$projectDir/framework/gh3343/objclib.h"
|
|
it.linkerOpts "-lobjcgh3343"
|
|
}
|
|
createInterop("objc_illegal_sharing_with_weak") {
|
|
it.defFile 'interop/objc/illegal_sharing_with_weak/objclib.def'
|
|
it.headers "$projectDir/interop/objc/illegal_sharing_with_weak/objclib.h"
|
|
}
|
|
createInterop("objcKt43517") {
|
|
it.defFile 'framework/kt43517/kt43517.def'
|
|
}
|
|
createInterop("objc_kt42172") {
|
|
it.defFile 'interop/objc/kt42172/objclib.def'
|
|
it.headers "$projectDir/interop/objc/kt42172/objclib.h"
|
|
}
|
|
createInterop("objc_kt48816") {
|
|
it.defFile 'interop/objc/kt48816/objclib.def'
|
|
it.headers "$projectDir/interop/objc/kt48816/objclib.h"
|
|
}
|
|
}
|
|
|
|
createInterop("withSpaces") {
|
|
it.defFile generateWithSpaceDefFile()
|
|
}
|
|
|
|
createInterop("exceptions_throwThroughBridge") {
|
|
it.defFile "interop/exceptions/throwThroughBridge.def"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/exceptions/throwThroughBridgeInterop.cpp"
|
|
}
|
|
|
|
createInterop("exceptions_cCallback") {
|
|
it.defFile "interop/exceptions/cCallback.def"
|
|
it.extraOpts "-Xcompile-source", "$projectDir/interop/exceptions/cCallback.cpp"
|
|
}
|
|
|
|
/**
|
|
* Creates a task for the interop test. Configures runner and adds library and test build tasks.
|
|
*/
|
|
Task interopTestBase(String name, boolean multiFile, Closure<KonanInteropTest> configureClosure) {
|
|
return KotlinNativeTestKt.createTest(project, name, KonanInteropTest) { task ->
|
|
task.configure(configureClosure)
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
def lib = task.interop
|
|
UtilsKt.dependsOnKonanBuildingTask(task, lib, target)
|
|
|
|
program(name, targets: [target.name]) {
|
|
libraries {
|
|
artifact lib
|
|
}
|
|
srcFiles multiFile ? fileTree(task.source) { include '**/*.kt' } : task.getSources()
|
|
baseDir "$testOutputLocal/$name"
|
|
linkerOpts "-L$buildDir"
|
|
extraOpts task.flags
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Task interopTest(String name, Closure<KonanInteropTest> configureClosure) {
|
|
return interopTestBase(name, false, configureClosure)
|
|
}
|
|
|
|
Task interopTestMultifile(String name, Closure<KonanInteropTest> configureClosure) {
|
|
return interopTestBase(name, true, configureClosure)
|
|
}
|
|
|
|
standaloneTest("interop_objc_allocException") {
|
|
disabled = !isAppleTarget(project)
|
|
expectedExitStatus = 0
|
|
source = "interop/objc/allocException.kt"
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
interopTest("interop0") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
(project.testTarget == 'linux_mips32') || // st_uid of '/' is not equal to 0 when using qemu
|
|
(project.testTarget == 'linux_mipsel32') ||
|
|
(project.testTarget == 'linux_arm32_hfp') ||
|
|
(project.testTarget == 'linux_arm64')
|
|
useGoldenData = true
|
|
source = "interop/basics/0.kt"
|
|
interop = 'sysstat'
|
|
}
|
|
|
|
interopTest("interop1") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/1.kt"
|
|
interop = 'cstdlib'
|
|
}
|
|
|
|
interopTest("interop2") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/2.kt"
|
|
interop = 'cstdio'
|
|
}
|
|
|
|
interopTest("interop3") {
|
|
// We disable this test on Raspberry Pi because
|
|
// qsort accepts size_t args. So the .kt file
|
|
// should be different depending on the bitness of the target.
|
|
// There are plans to provide a solution and turn this
|
|
// test back on.
|
|
disabled = (project.testTarget == 'raspberrypi') ||
|
|
(project.testTarget == 'linux_mips32') ||
|
|
(project.testTarget == 'linux_mipsel32') ||
|
|
(project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/3.kt"
|
|
interop = 'cstdlib'
|
|
}
|
|
|
|
interopTest("interop4") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/4.kt"
|
|
interop = 'cstdio'
|
|
}
|
|
|
|
standaloneTest("interop5") {
|
|
enabled = (project.testTarget != 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/5.kt"
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
interopTest("interop_bitfields") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
expectedFail = (project.testTarget == 'linux_mips32') // fails because of big-endiannes
|
|
source = "interop/basics/bf.kt"
|
|
interop = 'bitfields'
|
|
}
|
|
|
|
interopTest("interop_funptr") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
useGoldenData = true
|
|
source = "interop/basics/funptr.kt"
|
|
interop = 'cfunptr'
|
|
}
|
|
|
|
interopTest("interop_globals") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/globals.kt"
|
|
interop = 'cglobals'
|
|
}
|
|
|
|
interopTest("interop_macros") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/macros.kt"
|
|
interop = 'cmacros'
|
|
}
|
|
|
|
interopTest("interop_unsupported") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/unsupported.kt"
|
|
interop = 'cunsupported'
|
|
}
|
|
|
|
interopTest("interop_toKString") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/toKString.kt"
|
|
interop = 'ctoKString'
|
|
}
|
|
|
|
interopTest("interop_types") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/types.kt"
|
|
interop = 'ctypes'
|
|
}
|
|
|
|
interopTest("interop_structAnonym") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
(project.testTarget == 'mingw_x86')
|
|
source = "interop/basics/structAnonym.kt"
|
|
interop = 'structAnonym'
|
|
}
|
|
|
|
interopTest("interop_vectors") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/vectors.kt"
|
|
interop = 'cvectors'
|
|
}
|
|
|
|
interopTest("interop_vectors_mimalloc") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/vectors.kt"
|
|
interop = 'cvectors'
|
|
flags = [ "-Xallocator=mimalloc" ]
|
|
arguments = [ "mimalloc" ]
|
|
}
|
|
|
|
interopTest("interop_mangling") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/mangling.kt"
|
|
interop = 'cmangling'
|
|
}
|
|
|
|
interopTest("interop_mangling2") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/mangling2.kt"
|
|
interop = 'cmangling2'
|
|
}
|
|
|
|
interopTest("interop_mangling_keywords") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/mangling_keywords.kt"
|
|
interop = 'cmangling_keywords'
|
|
}
|
|
|
|
interopTest("interop_mangling_keywords2") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/mangling_keywords2.kt"
|
|
interop = 'cmangling_keywords2'
|
|
}
|
|
|
|
interopTest("interop_auxiliarySources") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/auxiliary_sources/main.kt"
|
|
interop = 'auxiliaryCppSources'
|
|
}
|
|
|
|
interopTest("interop_concurrentTerminate") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/concurrentTerminate/main.kt"
|
|
interop = 'concurrentTerminate'
|
|
outputChecker = { str -> str.endsWith("Reporting error!\n") }
|
|
expectedExitStatus = 99
|
|
}
|
|
|
|
interopTest("interop_incompleteTypes") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/incomplete_types/main.kt"
|
|
interop = 'incomplete_types'
|
|
}
|
|
|
|
interopTest("interop_embedStaticLibraries") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/embedStaticLibraries/main.kt"
|
|
interop = 'embedStaticLibraries'
|
|
}
|
|
|
|
interopTest("interop_values") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/values.kt"
|
|
interop = 'cvalues'
|
|
}
|
|
|
|
interopTest("interop_structs") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/structs.kt"
|
|
interop = 'cstructs'
|
|
}
|
|
|
|
interopTest("interop_callbacksAndVarargs") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/basics/callbacksAndVarargs.kt"
|
|
interop = 'ccallbacksAndVarargs'
|
|
}
|
|
|
|
interopTest("interop_threadStates") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
|
source = "interop/threadStates/threadStates.kt"
|
|
interop = "threadStates"
|
|
}
|
|
|
|
interopTest("interop_threadStates_callbacksWithExceptions") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
|
source = "interop/threadStates/callbacksWithExceptions.kt"
|
|
interop = "threadStates"
|
|
}
|
|
|
|
interopTest("interop_threadStates_unhandledException") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
|
source = "interop/threadStates/unhandledException.kt"
|
|
interop = "threadStates"
|
|
outputChecker = { it.contains("Error. Runnable state: true") }
|
|
expectedExitStatusChecker = { it != 0 }
|
|
}
|
|
|
|
interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
!isExperimentalMM // No thread state switching in the legacy MM.
|
|
source = "interop/threadStates/unhandledExceptionInForeignThread.kt"
|
|
interop = "threadStates"
|
|
outputChecker = { it.contains("Error. Runnable state: true") }
|
|
expectedExitStatusChecker = { it != 0 }
|
|
}
|
|
|
|
interopTest("interop_withSpaces") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop ='withSpaces'
|
|
source = "interop/basics/withSpaces.kt"
|
|
|
|
doLast {
|
|
assert file("${buildDir}/cutom map.map").exists()
|
|
}
|
|
}
|
|
|
|
interopTest("interop_union") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'cunion'
|
|
source = "interop/basics/union.kt"
|
|
}
|
|
|
|
interopTest("interop_enums") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'cenums'
|
|
source = "interop/basics/enums.kt"
|
|
}
|
|
|
|
interopTest("interop_array_pointers") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'carrayPointers'
|
|
source = "interop/basics/arrayPointers.kt"
|
|
}
|
|
|
|
interopTest("interop_kt43265") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'kt43265'
|
|
source = "interop/kt43265/usage.kt"
|
|
}
|
|
|
|
interopTest("interop_kt44283") {
|
|
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
|
|
project.globalTestArgs.contains('-opt') // Incompatible with -g.
|
|
flags = ['-g']
|
|
interop = 'kt44283'
|
|
source = "interop/kt44283/main.kt"
|
|
}
|
|
|
|
dynamicTest("interop_kt43502") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
interop = "kt43502"
|
|
source = "interop/kt43502/main.kt"
|
|
cSource = "$projectDir/interop/kt43502/main.c"
|
|
useGoldenData = true
|
|
}
|
|
|
|
interopTest("interop_leakMemoryWithRunningThreadUnchecked") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'leakMemoryWithRunningThread'
|
|
source = "interop/leakMemoryWithRunningThread/unchecked.kt"
|
|
}
|
|
|
|
interopTest("interop_leakMemoryWithRunningThreadChecked") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
interop = 'leakMemoryWithRunningThread'
|
|
source = "interop/leakMemoryWithRunningThread/checked.kt"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Cannot run checkers when there are 1 alive runtimes at the shutdown") }
|
|
}
|
|
|
|
standaloneTest("interop_pinning") {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions.
|
|
source = "interop/basics/pinning.kt"
|
|
flags = [ "-tr" ]
|
|
}
|
|
|
|
task interop_convert(type: KonanLocalTest) {
|
|
source = "codegen/intrinsics/interop_convert.kt"
|
|
}
|
|
|
|
task interop_sourceCodeStruct(type: KonanLocalTest) {
|
|
source = "codegen/intrinsics/interop_sourceCodeStruct.kt"
|
|
}
|
|
|
|
standaloneTest("isExperimentalMM") {
|
|
source = "codegen/intrinsics/isExperimentalMM.kt"
|
|
flags = [ "-tr" ]
|
|
}
|
|
|
|
interopTest("interop_cppClass") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/cpp/cppClass.kt"
|
|
interop = 'cppClass'
|
|
}
|
|
|
|
interopTest("interop_cppTypes") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/cpp/types.kt"
|
|
interop = 'cppTypes'
|
|
}
|
|
|
|
interopTest("interop_cppSkia") {
|
|
disabled = (project.testTarget == 'wasm32' || // No interop for wasm yet.
|
|
isExperimentalMM)
|
|
source = "interop/cpp/skia.kt"
|
|
interop = 'cppSkia'
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
interopTest("interop_cppSkiaSignature") {
|
|
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
|
source = "interop/cpp/skiaSignature.kt"
|
|
interop = "cppSkiaSignature"
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
/*
|
|
TODO: This test isn't run automatically
|
|
task interop_echo_server(type: RunInteropKonanTest) {
|
|
disabled = isWasmTarget(project) || isWindowsTarget(project)
|
|
run = false
|
|
source = "interop/basics/echo_server.kt"
|
|
interop = 'sockets'
|
|
}
|
|
*/
|
|
|
|
/*
|
|
TODO: This test isn't run automatically
|
|
standaloneTest("interop_opengl_teapot") {
|
|
enabled = isAppleTarget(project) && project.testTarget != 'ios_x64' // No GLUT in iOS
|
|
dependsOnPlatformLibs(it as Task)
|
|
run = false
|
|
source = "interop/basics/opengl_teapot.kt"
|
|
}
|
|
*/
|
|
|
|
if (PlatformInfo.isAppleTarget(project)) {
|
|
interopTest("interop_objc_smoke") {
|
|
enabled = !isNoopGC
|
|
source = "interop/objc/smoke.kt"
|
|
interop = 'objcSmoke'
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/smoke.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcsmoke.dylib"
|
|
// Enable ARC optimizations to prevent some objects from leaking in Obj-C code due to exceptions:
|
|
args '-O2'
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcsmoke.dylib")
|
|
}
|
|
|
|
copy {
|
|
from("interop/objc/Localizable.stringsdict")
|
|
into("$testOutputLocal/$name/$target/en.lproj/")
|
|
}
|
|
}
|
|
useGoldenData = true
|
|
}
|
|
|
|
interopTest("interop_objc_smoke_noopgc") {
|
|
enabled = isNoopGC
|
|
source = "interop/objc/smoke_noopgc.kt"
|
|
interop = 'objcSmoke'
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/smoke.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcsmoke.dylib"
|
|
// Enable ARC optimizations to prevent some objects from leaking in Obj-C code due to exceptions:
|
|
args '-O2'
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcsmoke.dylib")
|
|
}
|
|
|
|
copy {
|
|
from("interop/objc/Localizable.stringsdict")
|
|
into("$testOutputLocal/$name/$target/en.lproj/")
|
|
}
|
|
}
|
|
// No deallocations for the no-op GC.
|
|
useGoldenData = true
|
|
}
|
|
|
|
interopTestMultifile("interop_objc_tests") {
|
|
source = "interop/objc/tests/"
|
|
interop = 'objcTests'
|
|
flags = ['-tr', '-e', 'main']
|
|
|
|
if (isNoopGC) {
|
|
def exclude = [
|
|
"Kt41811Kt.*",
|
|
"CustomStringKt.testCustomString",
|
|
"Kt42482Kt.testKT42482",
|
|
"ObjcWeakRefsKt.testObjCWeakRef",
|
|
"WeakRefsKt.testWeakRefs"
|
|
]
|
|
arguments += ["--ktest_filter=*-${exclude.join(":")}"]
|
|
}
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args fileTree("$projectDir/interop/objc/tests/") { include '**/*.m' }
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjctests.dylib"
|
|
// Enable ARC optimizations to prevent some objects from leaking in Obj-C code due to exceptions:
|
|
args '-O2'
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjctests.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_global_initializer") {
|
|
useGoldenData = true
|
|
source = "interop/objc_with_initializer/objc_test.kt"
|
|
interop = 'objcMisc'
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc_with_initializer/objc_misc.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcmisc.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcmisc.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_msg_send") {
|
|
source = "interop/objc/msg_send/main.kt"
|
|
interop = 'objcMessaging'
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/msg_send/messaging.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcmessaging.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcmessaging.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_foreignException") {
|
|
source = "interop/objc/foreignException/objc_wrap.kt"
|
|
interop = 'foreignException'
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/foreignException/objc_wrap.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcexception.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcexception.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_foreignExceptionMode_wrap") {
|
|
source = "interop/objc/foreignException/objcExceptionMode_wrap.kt"
|
|
interop = 'foreignExceptionMode_wrap'
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/foreignException/objc_wrap.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcexception.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcexception.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_foreignExceptionMode_default") {
|
|
source = "interop/objc/foreignException/objcExceptionMode_default.kt"
|
|
interop = 'foreignExceptionMode_default'
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/foreignException/objc_wrap.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjcexception.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjcexception.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_kt34467") {
|
|
source = "interop/objc/kt34467/foo.kt"
|
|
interop = 'objcKt34467'
|
|
useGoldenData = true
|
|
}
|
|
|
|
interopTest("interop_objc_illegal_sharing_with_weak") {
|
|
source = "interop/objc/illegal_sharing_with_weak/main.kt"
|
|
interop = 'objc_illegal_sharing_with_weak'
|
|
|
|
if (isExperimentalMM) {
|
|
// Experimental MM supports arbitrary object sharing.
|
|
outputChecker = { it == "Before\nAfter true\n" }
|
|
} else {
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = {
|
|
it.startsWith("Before") && // Should crash after "Before"
|
|
!it.contains("After") && // But before "After"
|
|
it.contains("isObjectAliveShouldCrash") // And should contain stack trace.
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_kt42172") {
|
|
enabled = !isNoopGC
|
|
source = "interop/objc/kt42172/main.kt"
|
|
interop = "objc_kt42172"
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
useGoldenData = true
|
|
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
project.extensions.execClang.execClangForCompilerTests(project.target) {
|
|
args "$projectDir/interop/objc/kt42172/objclib.m"
|
|
args "-lobjc", '-fobjc-arc'
|
|
args '-fPIC', '-shared', '-o', "$buildDir/libobjc_kt42172.dylib"
|
|
}
|
|
if (UtilsKt.isSimulatorTarget(project, project.target)) {
|
|
UtilsKt.codesign(project, "$buildDir/libobjc_kt42172.dylib")
|
|
}
|
|
}
|
|
}
|
|
|
|
interopTest("interop_objc_kt48816_without_lazy_ir_for_caches") {
|
|
// Without a fix, fails in two-stage mode.
|
|
source = "interop/objc/kt48816/main.kt"
|
|
interop = "objc_kt48816"
|
|
// The bug was accidentally fixed with lazy IR for caches, so testing it with this feature disabled:
|
|
flags = ["-Xlazy-ir-for-caches=disable"]
|
|
}
|
|
|
|
interopTest("interop_objc_kt48816_with_lazy_ir_for_caches") {
|
|
source = "interop/objc/kt48816/main.kt"
|
|
interop = "objc_kt48816"
|
|
flags = ["-Xlazy-ir-for-caches=enable"]
|
|
}
|
|
|
|
standaloneTest("objc_arc_contract") {
|
|
doBeforeBuild {
|
|
mkdir(buildDir)
|
|
ExecLlvmKt.execLlvmUtility(project, "llvm-as") {
|
|
args "$projectDir/interop/objc_arc_contract/main.ll"
|
|
args "-o", "$buildDir/objc_arc_contract.bc"
|
|
}
|
|
}
|
|
source = "interop/objc_arc_contract/main.kt"
|
|
useGoldenData = true
|
|
flags = ["-native-library", "$buildDir/objc_arc_contract.bc"]
|
|
}
|
|
}
|
|
|
|
standaloneTest("jsinterop_math") {
|
|
doBeforeBuild {
|
|
def jsinteropScript = isWindows() ? "jsinterop.bat" : "jsinterop"
|
|
def jsinterop = "$kotlinNativeDist/bin/$jsinteropScript"
|
|
// TODO: We probably need a NativeInteropPlugin for jsinterop?
|
|
exec {
|
|
commandLine jsinterop, "-pkg", "kotlinx.interop.wasm.math", "-o", "$buildDir/jsmath", "-target", "wasm32"
|
|
}
|
|
|
|
}
|
|
dependsOn ':kotlin-native:wasm32PlatformLibs'
|
|
enabled = (project.testTarget == 'wasm32')
|
|
useGoldenData = true
|
|
source = "jsinterop/math.kt"
|
|
flags = ["-r", "$buildDir", "-l", "jsmath"]
|
|
}
|
|
|
|
standaloneTest("interop_libiconv") {
|
|
enabled = (project.testTarget == null)
|
|
source = "interop/libiconv.kt"
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
standaloneTest("interop_zlib") {
|
|
enabled = (project.testTarget == null)
|
|
source = "interop/platform_zlib.kt"
|
|
useGoldenData = true
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
}
|
|
|
|
standaloneTest("interop_objc_illegal_sharing") {
|
|
disabled = !isAppleTarget(project)
|
|
source = "interop/objc/illegal_sharing.kt"
|
|
UtilsKt.dependsOnPlatformLibs(it)
|
|
if (isExperimentalMM) {
|
|
outputChecker = {
|
|
it.startsWith("Before") && it.contains("After")
|
|
}
|
|
} else {
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = {
|
|
it.startsWith("Before") && !it.contains("After")
|
|
}
|
|
}
|
|
}
|
|
|
|
dynamicTest("produce_dynamic") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "produce_dynamic/simple/hello.kt"
|
|
cSource = "$projectDir/produce_dynamic/simple/main.c"
|
|
useGoldenData = true
|
|
}
|
|
|
|
dynamicTest("kt36639") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "produce_dynamic/kt-36639/main.kt"
|
|
cSource = "$projectDir/produce_dynamic/kt-36639/main.c"
|
|
useGoldenData = true
|
|
}
|
|
|
|
for (i in 0..2) {
|
|
dynamicTest("kt42796_$i") {
|
|
clangTool = "clang++"
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "produce_dynamic/kt-42796/main-${i}.kt"
|
|
cSource = "$projectDir/produce_dynamic/kt-42796/main.cpp"
|
|
useGoldenData = true
|
|
clangFlags = ["-DTEST=$i", "-Werror"]
|
|
}
|
|
}
|
|
|
|
dynamicTest("produce_dynamic_unhandledException") {
|
|
disabled = (project.testTarget == 'wasm32') || // Uses exceptions + dynamic is unsupported for wasm.
|
|
(cacheTesting != null) // Disabled due to KT-47828.
|
|
source = "produce_dynamic/unhandledException/unhandled.kt"
|
|
cSource = "$projectDir/produce_dynamic/unhandledException/main.cpp"
|
|
clangTool = "clang++"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { str -> str.startsWith("Kotlin hook: Exception. Runnable state: true") }
|
|
}
|
|
|
|
dynamicTest("interop_concurrentRuntime") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
disabled = true // KT-43180
|
|
source = "interop/concurrentTerminate/reverseInterop.kt"
|
|
cSource = "$projectDir/interop/concurrentTerminate/main.cpp"
|
|
clangTool = "clang++"
|
|
outputChecker = { str -> str.startsWith("Uncaught Kotlin exception: kotlin.RuntimeException: Example") }
|
|
expectedExitStatus = 99
|
|
}
|
|
|
|
dynamicTest("interop_kt42397") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "interop/kt42397/knlibrary.kt"
|
|
cSource = "$projectDir/interop/kt42397/test.cpp"
|
|
clangTool = "clang++"
|
|
}
|
|
|
|
dynamicTest("interop_cleaners_main_thread") {
|
|
disabled = (project.testTarget == 'wasm32') || isNoopGC // wasm doesn't support -produce dynamic
|
|
source = "interop/cleaners/cleaners.kt"
|
|
cSource = "$projectDir/interop/cleaners/main_thread.cpp"
|
|
clangTool = "clang++"
|
|
useGoldenData = true
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
dynamicTest("interop_cleaners_second_thread") {
|
|
disabled = (project.testTarget == 'wasm32') || isNoopGC // wasm doesn't support -produce dynamic
|
|
source = "interop/cleaners/cleaners.kt"
|
|
cSource = "$projectDir/interop/cleaners/second_thread.cpp"
|
|
clangTool = "clang++"
|
|
useGoldenData = true
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
dynamicTest("interop_cleaners_leak") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "interop/cleaners/cleaners.kt"
|
|
cSource = "$projectDir/interop/cleaners/leak.cpp"
|
|
clangTool = "clang++"
|
|
useGoldenData = true
|
|
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
|
|
}
|
|
|
|
dynamicTest("interop_migrating_main_thread_legacy") {
|
|
disabled = (project.testTarget == 'wasm32') || // wasm doesn't support -produce dynamic
|
|
isExperimentalMM // Experimental MM will not support legacy destroy runtime mode.
|
|
source = "interop/migrating_main_thread/lib.kt"
|
|
flags = ['-Xdestroy-runtime-mode=legacy']
|
|
clangFlags = ['-DIS_LEGACY']
|
|
cSource = "$projectDir/interop/migrating_main_thread/main.cpp"
|
|
clangTool = "clang++"
|
|
}
|
|
|
|
dynamicTest("interop_migrating_main_thread") {
|
|
disabled = (project.testTarget == 'wasm32') // wasm doesn't support -produce dynamic
|
|
source = "interop/migrating_main_thread/lib.kt"
|
|
flags = ['-Xdestroy-runtime-mode=on-shutdown']
|
|
if (isExperimentalMM) {
|
|
clangFlags = ['-DEXPERIMENTAL_MM']
|
|
}
|
|
cSource = "$projectDir/interop/migrating_main_thread/main.cpp"
|
|
clangTool = "clang++"
|
|
}
|
|
|
|
dynamicTest("interop_memory_leaks") {
|
|
disabled = (project.testTarget == 'wasm32') || // wasm doesn't support -produce dynamic
|
|
isExperimentalMM // Experimental MM will not support legacy destroy runtime mode.
|
|
source = "interop/memory_leaks/lib.kt"
|
|
cSource = "$projectDir/interop/memory_leaks/main.cpp"
|
|
clangTool = "clang++"
|
|
flags = ['-Xdestroy-runtime-mode=legacy'] // Runtime cannot be destroyed with interop with on-shutdown.
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("Memory leaks detected, 1 objects leaked!") }
|
|
}
|
|
|
|
dynamicTest("interop_exceptions_throwThroughBridge") {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions + dynamic is unsupported for wasm.
|
|
source = "interop/exceptions/throwThroughBridge.kt"
|
|
cSource = "$projectDir/interop/exceptions/throwThroughBridge.cpp"
|
|
clangTool = "clang++"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> !s.contains("Should not happen") }
|
|
interop = "exceptions_throwThroughBridge"
|
|
}
|
|
|
|
dynamicTest("interop_kotlin_exception_hook") {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions + dynamic is unsupported for wasm.
|
|
source = "interop/exceptions/exceptionHook.kt"
|
|
cSource = "$projectDir/interop/exceptions/exceptionHook.cpp"
|
|
clangTool = "clang++"
|
|
expectedExitStatusChecker = { it != 0 }
|
|
outputChecker = { s -> s.contains("OK. Kotlin unhandled exception hook") }
|
|
}
|
|
|
|
interopTest("interop_exceptions_cCallback") {
|
|
disabled = (project.testTarget == 'wasm32') // Uses exceptions
|
|
source = "interop/exceptions/cCallback.kt"
|
|
outputChecker = { s -> s.contains("CATCH IN C++") }
|
|
interop = "exceptions_cCallback"
|
|
}
|
|
|
|
tasks.register("library_ir_provider_mismatch", KonanDriverTest) {
|
|
def dir = buildDir.absolutePath
|
|
def lib = "$projectDir/link/ir_providers/library/empty.kt"
|
|
def invalidManifest = "$projectDir/link/ir_providers/library/manifest.properties"
|
|
|
|
def currentTarget = project.target.name
|
|
|
|
doBeforeBuild {
|
|
konanc("$lib -p library -o $dir/supported_ir_provider/empty -target $currentTarget")
|
|
konanc("$lib -p library -o $dir/unsupported_ir_provider/empty -manifest $invalidManifest -target $currentTarget")
|
|
|
|
}
|
|
source = "link/ir_providers/hello.kt"
|
|
flags = ['-target', currentTarget, '-l', 'empty', '-r', "$dir/unsupported_ir_provider", '-r', "$dir/supported_ir_provider"]
|
|
compilerMessages = true
|
|
def messages = "warning: skipping $dir/unsupported_ir_provider/empty.klib. The library requires unknown IR provider UNSUPPORTED.\nhello\n"
|
|
messages = PlatformInfo.isWindows() ? messages.replaceAll('\\/', '\\\\') : messages
|
|
outputChecker = { out ->
|
|
messages.split("\n")
|
|
.collect { line -> out.contains(line) }
|
|
.every { it == true }
|
|
}
|
|
}
|
|
|
|
standaloneTest("fake_override_0") {
|
|
def sources = "$projectDir/link/fake_overrides"
|
|
def dir = buildDir.absolutePath
|
|
doBeforeBuild {
|
|
konanc("$sources/base.kt -p library -target ${target.name} -o $dir/base")
|
|
konanc("$sources/move.kt -p library -target ${target.name} -o $dir/move -r $dir -l base")
|
|
konanc("$sources/use.kt -p library -target ${target.name} -o $dir/use -r $dir -l move")
|
|
konanc("$sources/move2.kt -p library -target ${target.name} -o $dir/move -r $dir -l base")
|
|
}
|
|
source = "$sources/main.kt"
|
|
flags = ["-l", "use", "-r", "$dir"]
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("private_fake_overrides_0") {
|
|
source = "link/private_fake_overrides/inherit_main.kt"
|
|
lib = "link/private_fake_overrides/inherit_lib.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("private_fake_overrides_1") {
|
|
source = "link/private_fake_overrides/override_main.kt"
|
|
lib = "link/private_fake_overrides/override_lib.kt"
|
|
useGoldenData = true
|
|
}
|
|
|
|
linkTest("remap_expect_property_refs") {
|
|
source = "codegen/mpp/remap_expect_property_ref_main.kt"
|
|
lib = "codegen/mpp/remap_expect_property_ref_lib.kt"
|
|
flags = ["-Xmulti-platform"]
|
|
useGoldenData = true
|
|
}
|
|
|
|
Task frameworkTest(String name, Closure<FrameworkTest> configurator) {
|
|
return KotlinNativeTestKt.createTest(project, name, FrameworkTest) { task ->
|
|
configurator.delegate = task
|
|
UtilsKt.dependsOnDist(task)
|
|
configurator()
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
task.frameworks.forEach { fr ->
|
|
framework(fr.name, targets: [target.name]) {
|
|
fr.sources.forEach { src ->
|
|
srcFiles src
|
|
}
|
|
baseDir "$testOutputFramework/${task.name}"
|
|
|
|
if (fr.library != null) {
|
|
dependsOn konanArtifacts[fr.library].getByTarget(target.name)
|
|
libraries {
|
|
file konanArtifacts[fr.library].getArtifactByTarget(target.name)
|
|
}
|
|
linkerOpts "-L$buildDir"
|
|
UtilsKt.dependsOnKonanBuildingTask(task, fr.library, target)
|
|
}
|
|
|
|
extraOpts fr.bitcode ? "-Xembed-bitcode" : "-Xembed-bitcode-marker"
|
|
if (fr.isStatic) extraOpts "-Xstatic-framework"
|
|
extraOpts fr.opts
|
|
extraOpts project.globalTestArgs
|
|
|
|
artifactName fr.artifact
|
|
}
|
|
UtilsKt.dependsOnDist(project.tasks.findByName("compileKonan${fr.name.capitalize()}${UtilsKt.getTestTargetSuffix(project)}"))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isAppleTarget(project)) {
|
|
frameworkTest('testObjCExport') {
|
|
final String frameworkName = 'Kt'
|
|
final String dir = "$testOutputFramework/testObjCExport"
|
|
final File lazyHeader = file("$dir/$target-lazy.h")
|
|
|
|
doLast {
|
|
// Check lazy header.
|
|
final String expectedLazyHeaderName = "expectedLazy.h"
|
|
final String expectedLazyHeaderDir = file("objcexport/")
|
|
final File expectedLazyHeader = new File(expectedLazyHeaderDir, expectedLazyHeaderName)
|
|
|
|
if (expectedLazyHeader.readLines() != lazyHeader.readLines()) {
|
|
exec {
|
|
commandLine 'diff', '-u', expectedLazyHeader, lazyHeader
|
|
ignoreExitValue = true
|
|
}
|
|
|
|
copy {
|
|
from(lazyHeader)
|
|
into(expectedLazyHeaderDir)
|
|
rename { expectedLazyHeaderName }
|
|
}
|
|
|
|
throw new Error("$expectedLazyHeader file patched;\nre-run the test and don't forget to commit the patch")
|
|
}
|
|
|
|
// Check bundle ID.
|
|
final String frameworkPath = "$dir/$target/${frameworkName}.framework"
|
|
final Pattern pattern = ~"<key>CFBundleIdentifier</key>\n\\s*<string>foo.bar</string>"
|
|
final String plistPath = (target.family == Family.OSX) ?
|
|
"$frameworkPath/Resources/Info.plist" :
|
|
"$frameworkPath/Info.plist"
|
|
final String plistContent = file(plistPath).text
|
|
if (!pattern.matcher(plistContent).find()) {
|
|
throw new Error("Unexpected Info.plist content:\n$plistContent")
|
|
}
|
|
}
|
|
|
|
def libraryName = frameworkName + "Library"
|
|
konanArtifacts {
|
|
library(libraryName, targets: [target.name]) {
|
|
srcDir "objcexport/library"
|
|
artifactName "test-library"
|
|
delegate.getByTarget(target.name).configure{
|
|
UtilsKt.dependsOnDist(it)
|
|
}
|
|
|
|
extraOpts "-Xshort-module-name=MyLibrary"
|
|
extraOpts "-module-name", "org.jetbrains.kotlin.native.test-library"
|
|
}
|
|
}
|
|
framework(frameworkName) {
|
|
sources = ['objcexport']
|
|
library = libraryName
|
|
opts = ["-Xemit-lazy-objc-header=$lazyHeader", "-Xexport-kdoc", "-Xbundle-id=foo.bar", "-Xbinary=unitSuspendFunctionObjCExport=proper"]
|
|
}
|
|
swiftSources = ['objcexport']
|
|
if (isNoopGC) {
|
|
swiftExtraOpts += ["-D", "NOOP_GC"]
|
|
}
|
|
}
|
|
|
|
frameworkTest('testObjCExportNoGenerics') {
|
|
final String frameworkName = 'KtNoGenerics'
|
|
final String frameworkArtifactName = 'Kt'
|
|
final String dir = "$testOutputFramework/testObjCExportNoGenerics"
|
|
final File lazyHeader = file("$dir/$target-lazy.h")
|
|
|
|
doLast {
|
|
final String expectedLazyHeaderName = "expectedLazyNoGenerics.h"
|
|
final String expectedLazyHeaderDir = file("objcexport/")
|
|
final File expectedLazyHeader = new File(expectedLazyHeaderDir, expectedLazyHeaderName)
|
|
|
|
if (expectedLazyHeader.readLines() != lazyHeader.readLines()) {
|
|
exec {
|
|
commandLine 'diff', '-u', expectedLazyHeader, lazyHeader
|
|
ignoreExitValue = true
|
|
}
|
|
|
|
copy {
|
|
from(lazyHeader)
|
|
into(expectedLazyHeaderDir)
|
|
rename { expectedLazyHeaderName }
|
|
}
|
|
|
|
throw new Error("$expectedLazyHeader file patched;\nre-run the test and don't forget to commit the patch")
|
|
}
|
|
|
|
}
|
|
|
|
def libraryName = frameworkName + "Library"
|
|
konanArtifacts {
|
|
library(libraryName, targets: [target.name]) {
|
|
srcDir "objcexport/library"
|
|
artifactName "test-library"
|
|
|
|
if (!useCustomDist) {
|
|
dependsOn ":${target.name}CrossDistRuntime", ':distCompiler'
|
|
}
|
|
|
|
extraOpts "-Xshort-module-name=MyLibrary"
|
|
extraOpts "-module-name", "org.jetbrains.kotlin.native.test-library"
|
|
}
|
|
}
|
|
framework(frameworkName) {
|
|
sources = ['objcexport']
|
|
artifact = frameworkArtifactName
|
|
library = libraryName
|
|
opts = ["-Xemit-lazy-objc-header=$lazyHeader", "-Xno-objc-generics", "-Xbinary=unitSuspendFunctionObjCExport=proper"]
|
|
}
|
|
swiftSources = ['objcexport']
|
|
swiftExtraOpts = [ '-D', 'NO_GENERICS' ]
|
|
if (isNoopGC) {
|
|
swiftExtraOpts += ["-D", "NOOP_GC"]
|
|
}
|
|
}
|
|
|
|
frameworkTest('testObjCExportLegacySuspendUnit') {
|
|
final String frameworkName = 'KtLegacySuspendUnit'
|
|
final String frameworkArtifactName = 'Kt'
|
|
final String dir = "$testOutputFramework/testObjCExportLegacySuspendUnit"
|
|
final File lazyHeader = file("$dir/$target-lazy.h")
|
|
|
|
doLast {
|
|
final String expectedLazyHeaderName = "expectedLazyLegacySuspendUnit.h"
|
|
final String expectedLazyHeaderDir = file("objcexport/")
|
|
final File expectedLazyHeader = new File(expectedLazyHeaderDir, expectedLazyHeaderName)
|
|
|
|
if (expectedLazyHeader.readLines() != lazyHeader.readLines()) {
|
|
exec {
|
|
commandLine 'diff', '-u', expectedLazyHeader, lazyHeader
|
|
ignoreExitValue = true
|
|
}
|
|
|
|
copy {
|
|
from(lazyHeader)
|
|
into(expectedLazyHeaderDir)
|
|
rename { expectedLazyHeaderName }
|
|
}
|
|
|
|
throw new Error("$expectedLazyHeader file patched;\nre-run the test and don't forget to commit the patch")
|
|
}
|
|
|
|
}
|
|
|
|
def libraryName = frameworkName + "Library"
|
|
konanArtifacts {
|
|
library(libraryName, targets: [target.name]) {
|
|
srcDir "objcexport/library"
|
|
artifactName "test-library"
|
|
|
|
if (!useCustomDist) {
|
|
dependsOn ":${target.name}CrossDistRuntime", ':distCompiler'
|
|
}
|
|
|
|
extraOpts "-Xshort-module-name=MyLibrary"
|
|
extraOpts "-module-name", "org.jetbrains.kotlin.native.test-library"
|
|
}
|
|
}
|
|
framework(frameworkName) {
|
|
sources = ['objcexport']
|
|
artifact = frameworkArtifactName
|
|
library = libraryName
|
|
opts = ["-Xemit-lazy-objc-header=$lazyHeader"]
|
|
}
|
|
swiftSources = ['objcexport']
|
|
swiftExtraOpts = [ '-D', 'LEGACY_SUSPEND_UNIT_FUNCTION_EXPORT' ]
|
|
if (isNoopGC) {
|
|
swiftExtraOpts += ["-D", "NOOP_GC"]
|
|
}
|
|
}
|
|
|
|
frameworkTest('testObjCExportStatic') {
|
|
final String frameworkName = 'KtStatic'
|
|
final String frameworkArtifactName = 'Kt'
|
|
final String libraryName = frameworkName + "Library"
|
|
|
|
konanArtifacts {
|
|
library(libraryName, targets: [target.name]) {
|
|
srcDir "objcexport/library"
|
|
artifactName "test-library"
|
|
|
|
delegate.getByTarget(target.name).configure{
|
|
UtilsKt.dependsOnDist(it)
|
|
}
|
|
|
|
extraOpts "-Xshort-module-name=MyLibrary"
|
|
extraOpts "-module-name", "org.jetbrains.kotlin.native.test-library"
|
|
}
|
|
}
|
|
|
|
codesign = false
|
|
framework(frameworkName) {
|
|
sources = ['objcexport']
|
|
bitcode = false
|
|
artifact = frameworkArtifactName
|
|
library = libraryName
|
|
isStatic = true
|
|
opts = ["-Xbinary=unitSuspendFunctionObjCExport=proper"]
|
|
}
|
|
swiftSources = ['objcexport']
|
|
if (isNoopGC) {
|
|
swiftExtraOpts += ["-D", "NOOP_GC"]
|
|
}
|
|
}
|
|
|
|
frameworkTest('testValuesGenericsFramework') {
|
|
framework('ValuesGenerics') {
|
|
sources = ['objcexport/values.kt', 'framework/values_generics']
|
|
}
|
|
swiftSources = ['framework/values_generics/']
|
|
}
|
|
|
|
frameworkTest("testStdlibFramework") {
|
|
framework('Stdlib') {
|
|
sources = ['framework/stdlib']
|
|
bitcode = true
|
|
}
|
|
if (cacheTesting == null) fullBitcode = true
|
|
swiftSources = ['framework/stdlib/']
|
|
}
|
|
|
|
if (cacheTesting != null && cacheTesting.isDynamic) {
|
|
// testMultipleFrameworks disabled until https://youtrack.jetbrains.com/issue/KT-34262 is fixed.
|
|
} else frameworkTest("testMultipleFrameworks") {
|
|
framework('First') {
|
|
sources = ['framework/multiple/framework1', 'framework/multiple/shared']
|
|
bitcode = true
|
|
}
|
|
framework('Second') {
|
|
sources = ['framework/multiple/framework2', 'framework/multiple/shared']
|
|
bitcode = true
|
|
}
|
|
swiftSources = ['framework/multiple']
|
|
}
|
|
|
|
frameworkTest("testMultipleFrameworksStatic") {
|
|
if (cacheTesting != null) {
|
|
// See https://youtrack.jetbrains.com/issue/KT-34261.
|
|
expectedExitStatus = 134
|
|
}
|
|
|
|
framework('FirstStatic') {
|
|
artifact = 'First'
|
|
sources = ['framework/multiple/framework1', 'framework/multiple/shared']
|
|
bitcode = true
|
|
isStatic = true
|
|
opts = ['-Xstatic-framework', "-Xpre-link-caches=enable"]
|
|
}
|
|
framework('SecondStatic') {
|
|
artifact = 'Second'
|
|
sources = ['framework/multiple/framework2', 'framework/multiple/shared']
|
|
bitcode = true
|
|
isStatic = true
|
|
opts = ['-Xstatic-framework', "-Xpre-link-caches=enable"]
|
|
}
|
|
codesign = false
|
|
swiftSources = ['framework/multiple']
|
|
}
|
|
|
|
frameworkTest("testGh3343Framework") {
|
|
framework('Gh3343') {
|
|
sources = ['framework/gh3343']
|
|
library = 'objcGh3343'
|
|
}
|
|
swiftSources = ['framework/gh3343/']
|
|
}
|
|
|
|
frameworkTest("testKt42397Framework") {
|
|
enabled = !project.globalTestArgs.contains('-opt')
|
|
framework("Kt42397") {
|
|
sources = ['framework/kt42397']
|
|
}
|
|
swiftSources = ['framework/kt42397']
|
|
}
|
|
|
|
frameworkTest("testKt43517Framework") {
|
|
framework('Kt43517') {
|
|
sources = ['framework/kt43517']
|
|
library = 'objcKt43517'
|
|
}
|
|
swiftSources = ['framework/kt43517/']
|
|
}
|
|
|
|
frameworkTest("testStackTraceFramework") {
|
|
enabled = !project.globalTestArgs.contains('-opt')
|
|
framework('Stacktrace') {
|
|
sources = ['framework/stacktrace']
|
|
opts = ['-g']
|
|
}
|
|
swiftSources = ['framework/stacktrace/']
|
|
}
|
|
|
|
frameworkTest("testStackTraceByLibbacktraceFramework") {
|
|
enabled = !project.globalTestArgs.contains('-opt')
|
|
framework('StacktraceByLibbacktrace') {
|
|
sources = ['framework/stacktraceByLibbacktrace']
|
|
opts = ['-g', '-Xbinary=sourceInfoType=libbacktrace']
|
|
}
|
|
swiftSources = ['framework/stacktraceByLibbacktrace/']
|
|
}
|
|
|
|
frameworkTest("testAbstractInstantiationFramework") {
|
|
framework('AbstractInstantiation') {
|
|
sources = ['framework/abstractInstantiation']
|
|
}
|
|
swiftSources = ['framework/abstractInstantiation/']
|
|
expectedExitStatus = 134
|
|
}
|
|
|
|
frameworkTest("testFrameworkBundleId") {
|
|
def currentTarget = project.target.name
|
|
enabled = currentTarget.startsWith("mac")
|
|
|
|
framework("Foo") {
|
|
sources = ["framework/bundle_id/main.kt", "framework/bundle_id/lib.kt"]
|
|
}
|
|
swiftSources = []
|
|
|
|
doLast {
|
|
def frameworkPath = "$testOutputFramework/testFrameworkBundleId/$target/Foo.framework"
|
|
def pattern = ~"<key>CFBundleIdentifier</key>\n\\s*<string>Foo</string>"
|
|
def plistContent = file("$frameworkPath/Resources/Info.plist").text
|
|
if (!pattern.matcher(plistContent).find()) {
|
|
throw new Error("Unexpected Info.plist content:\n$plistContent")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates tasks to build and execute Harmony regex tests with GTEST logger.
|
|
*/
|
|
KotlinNativeTestKt.createTest(project, 'harmonyRegexTest', KonanGTest) { task ->
|
|
task.enabled = (project.testTarget != 'wasm32') // Uses exceptions.
|
|
task.useFilter = false
|
|
task.testLogger = KonanTest.Logger.GTEST
|
|
|
|
def sources = UtilsKt.getFilesToCompile(project, ["../../../libraries/stdlib/native-wasm/test/harmony_regex"], [])
|
|
|
|
konanArtifacts {
|
|
program('harmonyRegexTest', targets: [target.name]) {
|
|
srcFiles sources
|
|
baseDir "$testOutputStdlib/harmonyRegexTest"
|
|
extraOpts '-tr'
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
|
|
task.finalizedBy("resultsTask")
|
|
}
|
|
|
|
if (UtilsKt.getTestTargetSupportsCodeCoverage(project)) {
|
|
task coverage_basic_program(type: CoverageTest) {
|
|
|
|
binaryName = "CoverageBasic"
|
|
numberOfCoveredFunctions = 1
|
|
numberOfCoveredLines = 3
|
|
|
|
konanArtifacts {
|
|
program(binaryName, targets: [ target ]) {
|
|
srcDir 'coverage/basic/program'
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.program.main"
|
|
extraOpts "-Xcoverage", "-Xcoverage-file=$profrawFile"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
|
|
task coverage_basic_library(type: CoverageTest) {
|
|
|
|
binaryName = "CoverageBasicLibrary"
|
|
numberOfCoveredFunctions = 1
|
|
numberOfCoveredLines = 1
|
|
|
|
konanArtifacts {
|
|
library("lib_to_cover", targets: [target.name]) {
|
|
srcFiles 'coverage/basic/library/library.kt'
|
|
}
|
|
program(binaryName, targets: [ target ]) {
|
|
srcFiles 'coverage/basic/library/main.kt'
|
|
libraries {
|
|
artifact konanArtifacts.lib_to_cover
|
|
}
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.library.main"
|
|
extraOpts "-Xcoverage-file=$profrawFile", "-Xlibrary-to-cover=${konanArtifacts.lib_to_cover.getArtifactByTarget(target.name)}"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
|
|
task coverage_controlflow(type: CoverageTest) {
|
|
binaryName = "CoverageControlFlow"
|
|
numberOfCoveredFunctions = 1
|
|
numberOfCoveredLines = 102
|
|
|
|
konanArtifacts {
|
|
program(binaryName, targets: [ target ]) {
|
|
srcDir 'coverage/basic/controlflow'
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.controlflow.main"
|
|
extraOpts "-Xcoverage", "-Xcoverage-file=$profrawFile"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
|
|
task coverage_jumps(type: CoverageTest) {
|
|
binaryName = "CoverageJumps"
|
|
numberOfCoveredFunctions = 8
|
|
numberOfCoveredLines = 74
|
|
|
|
konanArtifacts {
|
|
program(binaryName, targets: [ target ]) {
|
|
srcDir 'coverage/basic/jumps'
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.jumps.main"
|
|
extraOpts "-Xcoverage", "-Xcoverage-file=$profrawFile"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
|
|
task coverage_smoke0(type: CoverageTest) {
|
|
binaryName = "CoverageSmoke0"
|
|
numberOfCoveredFunctions = 2
|
|
numberOfCoveredLines = 5
|
|
|
|
konanArtifacts {
|
|
program(binaryName, targets: [ target ]) {
|
|
srcDir 'coverage/basic/smoke0'
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.smoke0.main"
|
|
extraOpts "-Xcoverage", "-Xcoverage-file=$profrawFile"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
|
|
task coverage_smoke1(type: CoverageTest) {
|
|
binaryName = "CoverageSmoke1"
|
|
numberOfCoveredFunctions = 9
|
|
numberOfCoveredLines = 33
|
|
|
|
konanArtifacts {
|
|
program(binaryName, targets: [ target ]) {
|
|
srcDir 'coverage/basic/smoke1'
|
|
baseDir "$testOutputCoverage/$binaryName"
|
|
entryPoint "coverage.basic.smoke1.main"
|
|
extraOpts "-Xcoverage", "-Xcoverage-file=$profrawFile"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register("metadata_compare_typedefs", MetadataComparisonTest) {
|
|
UtilsKt.dependsOnDist(it)
|
|
enabled = (project.testTarget != 'wasm32')
|
|
defFile = "interop/basics/typedefs.def"
|
|
}
|
|
|
|
tasks.register("metadata_compare_unable_to_import", MetadataComparisonTest) {
|
|
UtilsKt.dependsOnDist(it)
|
|
enabled = (project.testTarget != 'wasm32')
|
|
defFile = "interop/basics/unable_to_import.def"
|
|
}
|
|
|
|
standaloneTest("local_ea_arraysfieldwrite") {
|
|
disabled = (cacheTesting != null) // Cache is not compatible with -opt.
|
|
useGoldenData = true
|
|
flags = ["-opt"]
|
|
source = "codegen/localEscapeAnalysis/arraysFieldWrite.kt"
|
|
}
|
|
|
|
tasks.register("override_konan_properties0", KonanDriverTest) {
|
|
def overrides = PlatformInfo.isWindows()
|
|
? '-Xoverride-konan-properties="llvmInlineThreshold=76"'
|
|
: '-Xoverride-konan-properties=llvmInlineThreshold=76'
|
|
flags = [
|
|
"-opt",
|
|
"-Xverbose-phases=BitcodeOptimization",
|
|
overrides
|
|
]
|
|
compilerMessages = true
|
|
source = "link/ir_providers/hello.kt"
|
|
def messages = "inline_threshold: 76\nhello\n"
|
|
outputChecker = { out ->
|
|
messages.split("\n")
|
|
.collect { line -> out.contains(line) }
|
|
.every { it == true }
|
|
}
|
|
}
|
|
|
|
tasks.register("llvm_variant_dev", KonanDriverTest) {
|
|
// We use clang from Xcode on macOS for apple targets,
|
|
// so it is hard to reliably detect LLVM variant for these targets.
|
|
disabled = isAppleTarget(project)
|
|
flags = [
|
|
"-Xllvm-variant=dev",
|
|
"-Xverbose-phases=ObjectFiles"
|
|
]
|
|
compilerMessages = true
|
|
source = "link/ir_providers/hello.kt"
|
|
// User LLVM variant has "essentials" suffix.
|
|
def message = "-essentials"
|
|
outputChecker = { out -> !out.contains(message) }
|
|
}
|
|
|
|
createStdlibTest('stdlibTest', /* inWorker = */ false)
|
|
createStdlibTest('stdlibTestInWorker', /*inWorker = */ true)
|
|
|
|
/**
|
|
* Creates tasks to build and execute stdlib tests.
|
|
*/
|
|
private void createStdlibTest(String name, boolean inWorker) {
|
|
KotlinNativeTestKt.createTest(project, name, KonanGTest) { task ->
|
|
configureStdlibTest(task, inWorker)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Configures tasks to build and execute stdlib tests.
|
|
*/
|
|
private void configureStdlibTest(KonanGTest task, boolean inWorker) {
|
|
def sources = UtilsKt.getFilesToCompile(project,
|
|
[ '../../../libraries/stdlib/common/test',
|
|
'../../../libraries/stdlib/test',
|
|
'../../../libraries/kotlin.test/common/src/test/kotlin',
|
|
'stdlib_external/utils.kt',
|
|
'stdlib_external/jsCollectionFactoriesActuals.kt',
|
|
'stdlib_external/text'],
|
|
[ /*'build/stdlib_external/stdlib/test/internalAnnotations.kt'*/ ])
|
|
|
|
konanArtifacts {
|
|
program(task.name, targets: [target.name]) {
|
|
srcFiles sources
|
|
baseDir "$testOutputStdlib/$task.name"
|
|
enableMultiplatform true
|
|
extraOpts inWorker ? '-trw' : '-tr',
|
|
'-Xverify-ir',
|
|
'-opt-in=kotlin.RequiresOptIn,kotlin.ExperimentalStdlibApi',
|
|
"-friend-modules", project.rootProject.file("${UtilsKt.getKotlinNativeDist(project)}/klib/common/stdlib").absolutePath
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
// Exclude test providing args to the test executable
|
|
task.arguments = [ "--ktest_negative_regex_filter=test.collections.CollectionTest.abstractCollectionToArray" ]
|
|
task.useFilter = false
|
|
task.testLogger = KonanTest.Logger.GTEST
|
|
task.finalizedBy("resultsTask")
|
|
task.enabled = (project.testTarget != 'wasm32') // Uses exceptions
|
|
}
|
|
|
|
/**
|
|
* Builds tests into a single binary with TestRunner
|
|
*/
|
|
task buildKonanTests { t ->
|
|
def compileList = [ "codegen", "datagen", "lower", "runtime", "serialization", "sanity" ]
|
|
|
|
// These tests should not be built into the TestRunner's test executable
|
|
def excludeList = [ "codegen/inline/returnLocalClassFromBlock.kt" ]
|
|
project.tasks
|
|
.withType(KonanStandaloneTest.class)
|
|
.each {
|
|
// add library and source files
|
|
if (it instanceof KonanLinkTest) {
|
|
excludeList += it.lib
|
|
}
|
|
if (it.source != null) {
|
|
excludeList += it.source
|
|
}
|
|
}
|
|
def sources = UtilsKt.getFilesToCompile(project, compileList, excludeList)
|
|
|
|
konanArtifacts {
|
|
program('localTest', targets: [target.name]) {
|
|
srcFiles sources
|
|
baseDir testOutputLocal
|
|
extraOpts '-ea' // Without this option assertions would remain inactive.
|
|
extraOpts '-tr'
|
|
extraOpts '-Xverify-ir'
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
|
|
// Set build dependencies.
|
|
dependsOn compileKonanLocalTest
|
|
def buildTask = UtilsKt.findKonanBuildTask(project, "localTest", target)
|
|
UtilsKt.dependsOnDist(buildTask)
|
|
|
|
// Local tests build into a single binary should depend on this task
|
|
project.tasks
|
|
.withType(KonanLocalTest.class)
|
|
.matching { !(it instanceof KonanStandaloneTest) }
|
|
.configureEach { it.dependsOn(t) }
|
|
}
|
|
|
|
|
|
sourceSets {
|
|
nopPlugin {
|
|
kotlin {
|
|
srcDir 'extensions/nop/src/main/kotlin'
|
|
}
|
|
}
|
|
test {
|
|
kotlin {
|
|
srcDir 'debugger/src/test/kotlin'
|
|
}
|
|
}
|
|
update_stdlib_tests{
|
|
kotlin {
|
|
srcDir '../../../libraries/stdlib/common/test'
|
|
srcDir '../../../libraries/stdlib/test'
|
|
srcDir '../../../libraries/kotlin.test/common/src/test/kotlin'
|
|
}
|
|
}
|
|
}
|
|
|
|
compileNopPluginKotlin {
|
|
kotlinOptions.freeCompilerArgs += ['-Xskip-prerelease-check']
|
|
}
|
|
|
|
Task pluginTest(String name, String pluginName, Closure configureClosure) {
|
|
def jarTask = project.tasks.register("jar-$pluginName", Jar) {
|
|
it.dependsOn("compile${pluginName.capitalize()}Kotlin")
|
|
from {
|
|
sourceSets[pluginName].output
|
|
}
|
|
baseName = pluginName
|
|
destinationDirectory = buildDir
|
|
}
|
|
def taskName = "$name-with-$pluginName"
|
|
return KotlinNativeTestKt.createTest(project, taskName, KonanStandaloneTest) { task ->
|
|
task.configure(configureClosure)
|
|
task.dependsOn(jarTask)
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
program(taskName, targets: [target.name]) {
|
|
baseDir "$testOutputLocal/$taskName"
|
|
srcFiles task.getSources()
|
|
extraOpts task.flags + "-Xplugin=$buildDir/nop-plugin.jar"
|
|
extraOpts project.globalTestArgs
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
pluginTest("runtime_basic_init", "nopPlugin") {
|
|
disabled = (project.testTarget == 'wasm32')
|
|
source = "runtime/basic/runtime_basic_init.kt"
|
|
flags = ["-tr"]
|
|
}
|
|
|
|
|
|
Task fileCheckTest(String name, Closure<FileCheckTest> configureClosure) {
|
|
return project.tasks.create(name, FileCheckTest) { task ->
|
|
task.configure(configureClosure)
|
|
task.llvmIr = project.file("$testOutputFileCheck/$name/$target/out.ll")
|
|
if (task.enabled) {
|
|
konanArtifacts {
|
|
def lib = task.interop
|
|
if (lib != null) {
|
|
UtilsKt.dependsOnKonanBuildingTask(task, lib, target)
|
|
}
|
|
if (!task.generateFramework) {
|
|
// We could use `bitcode` here to make things faster. But:
|
|
// 1. `bitcode` has no other usages.
|
|
// 2. Unification should help porting to the new test infra.
|
|
// 3. Compiler might behave differently when outputting bitcode instead of object files.
|
|
program(name, targets: [target]) {
|
|
srcFiles task.annotatedSource
|
|
baseDir "$testOutputFileCheck/$name"
|
|
extraOpts project.globalTestArgs
|
|
extraOpts "-Xtemporary-files-dir=$testOutputFileCheck/$name/$target", "-Xsave-llvm-ir"
|
|
if (lib != null) {
|
|
libraries {
|
|
artifact lib
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
// Framework support is much weakier than `frameworkTest`, but we don't need much.
|
|
framework(name, targets: [target]) {
|
|
srcFiles task.annotatedSource
|
|
baseDir "$testOutputFileCheck/$name"
|
|
extraOpts project.globalTestArgs
|
|
extraOpts "-Xtemporary-files-dir=$testOutputFileCheck/$name/$target", "-Xsave-llvm-ir", "-Xmeaningful-bridge-names"
|
|
if (lib != null) {
|
|
libraries {
|
|
artifact lib
|
|
}
|
|
}
|
|
}
|
|
}
|
|
UtilsKt.dependsOnKonanBuildingTask(task, name, target)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fileCheckTest("filecheck_smoke0") {
|
|
annotatedSource = project.file('filecheck/smoke0.kt')
|
|
}
|
|
|
|
fileCheckTest("filecheck_replace_invoke_with_call") {
|
|
annotatedSource = project.file('filecheck/replace_invoke_with_call.kt')
|
|
}
|
|
|
|
fileCheckTest("filecheck_intrinsics") {
|
|
annotatedSource = project.file('filecheck/intrinsics.kt')
|
|
}
|
|
|
|
fileCheckTest("filecheck_escape_analysis_enabled") {
|
|
annotatedSource = project.file('filecheck/escape_analysis.kt')
|
|
enabled = project.globalTestArgs.contains('-opt')
|
|
checkPrefix = "CHECK-OPT"
|
|
}
|
|
|
|
fileCheckTest("filecheck_escape_analysis_disabled") {
|
|
annotatedSource = project.file('filecheck/escape_analysis.kt')
|
|
enabled = project.globalTestArgs.contains('-g')
|
|
checkPrefix = "CHECK-DEBUG"
|
|
}
|
|
|
|
fileCheckTest("filecheck_suspend_returnNothing") {
|
|
annotatedSource = project.file('filecheck/suspend_returnNothing.kt')
|
|
}
|
|
|
|
fileCheckTest("filecheck_bce") {
|
|
annotatedSource = project.file('filecheck/bce.kt')
|
|
}
|
|
|
|
fileCheckTest("filecheck_signext_zeroext0") {
|
|
annotatedSource = project.file('filecheck/signext_zeroext0.kt')
|
|
if (project.testTarget == 'mingw_x64') {
|
|
checkPrefix = "CHECK-WINDOWSX64"
|
|
} else if (!target.family.appleFamily && target.architecture == Architecture.ARM64) {
|
|
checkPrefix = "CHECK-AAPCS"
|
|
}
|
|
}
|
|
|
|
createInterop("filecheck_signext_zeroext_interop_input") {
|
|
it.defFile 'filecheck/signext_zeroext_interop_input.def'
|
|
}
|
|
|
|
fileCheckTest("filecheck_signext_zeroext_interop") {
|
|
annotatedSource = project.file('filecheck/signext_zeroext_interop.kt')
|
|
interop = "filecheck_signext_zeroext_interop_input"
|
|
if (project.testTarget == 'mingw_x64') {
|
|
checkPrefix = "CHECK-WINDOWSX64"
|
|
} else if (!target.family.appleFamily && target.architecture == Architecture.ARM64) {
|
|
checkPrefix = "CHECK-AAPCS"
|
|
}
|
|
}
|
|
|
|
fileCheckTest("filecheck_signext_zeroext_objc_export") {
|
|
annotatedSource = project.file('filecheck/signext_zeroext_objc_export.kt')
|
|
generateFramework = true
|
|
enabled = target.family.appleFamily
|
|
}
|
|
|
|
fileCheckTest("filecheck_function_attributes_at_callsite") {
|
|
enabled = (project.testTarget != 'wasm32') // KT-49739
|
|
annotatedSource = project.file('filecheck/function_attributes_at_callsite.kt')
|
|
}
|
|
|
|
|
|
dependencies {
|
|
nopPluginApi project(kotlinCompilerModule)
|
|
nopPluginApi project(":native:kotlin-native-utils")
|
|
nopPluginApi project(":core:descriptors")
|
|
nopPluginApi project(":compiler:ir.tree")
|
|
nopPluginApi project(":compiler:ir.tree.impl")
|
|
nopPluginApi project(":compiler:ir.backend.common")
|
|
nopPluginApi project(":compiler:util")
|
|
nopPluginApi project(":native:frontend.native")
|
|
nopPluginApi project(":compiler:cli-common")
|
|
nopPluginApi project(":compiler:cli")
|
|
nopPluginApi project(":kotlin-util-klib")
|
|
nopPluginApi project(":kotlin-util-klib-metadata")
|
|
nopPluginApi project(":compiler:ir.serialization.common")
|
|
|
|
api project(kotlinCompilerModule)
|
|
api project(path: ':kotlin-native:backend.native', configuration: 'cli_bcApiElements')
|
|
api DependenciesKt.commonDependency(project, "junit")
|
|
}
|
|
|
|
project.tasks.named("test").configure {
|
|
// Don't run this task as it will try to execute debugger tests too
|
|
// that is not desired as they are platform-specific.
|
|
enabled = false
|
|
}
|
|
|
|
project.tasks.register("debugger_test", Test.class) {
|
|
enabled = (target.family.appleFamily) // KT-30366
|
|
testLogging { exceptionFormat = 'full' }
|
|
UtilsKt.dependsOnDist(it)
|
|
systemProperties = ['kotlin.native.home': kotlinNativeDist,
|
|
'kotlin.native.host': HostManager.@Companion.getHost(),
|
|
'kotlin.native.test.target': target,
|
|
'kotlin.native.test.debugger.simulator.enabled': findProperty("kotlin.native.test.debugger.simulator.enabled"),
|
|
'kotlin.native.test.debugger.simulator.delay': findProperty("kotlin.native.test.debugger.simulator.delay")]
|
|
outputs.upToDateWhen { false }
|
|
}
|
|
|
|
// Configure build for iOS device targets.
|
|
if (UtilsKt.supportsRunningTestsOnDevice(target)) {
|
|
project.tasks
|
|
.withType(KonanTestExecutable.class)
|
|
.configureEach {
|
|
ExecutorServiceKt.configureXcodeBuild((KonanTestExecutable) it)
|
|
}
|
|
// Exclude tasks that cannot be run on device
|
|
project.tasks
|
|
.withType(KonanTest.class)
|
|
.matching { (it instanceof KonanLocalTest && ((KonanLocalTest) it).useTestData) ||
|
|
// Filter out tests that depend on libs. TODO: copy them too
|
|
it instanceof KonanInteropTest ||
|
|
it instanceof KonanDynamicTest ||
|
|
it instanceof KonanLinkTest
|
|
}
|
|
.configureEach { it.enabled = false }
|
|
}
|
|
|
|
project.afterEvaluate {
|
|
// Don't treat any task as up-to-date, no matter what.
|
|
// Note: this project should contain only test tasks, including ones that build binaries,
|
|
// and ones that run binaries.
|
|
// So the configuration below mostly means "tests aren't up-to-date".
|
|
tasks.configureEach {
|
|
outputs.upToDateWhen { false }
|
|
}
|
|
}
|
|
|
|
|