[K/N][Tests] Migrate test signext_zeroext_objc_export.kt
^KT-61259
This commit is contained in:
committed by
Space Team
parent
f3d3ae8416
commit
7cb372e66f
@@ -2016,12 +2016,6 @@ Task fileCheckTest(String name, Closure<FileCheckTest> configureClosure) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fileCheckTest("filecheck_signext_zeroext_objc_export") {
|
|
||||||
annotatedSource = project.file('filecheck/signext_zeroext_objc_export.kt')
|
|
||||||
generateFramework = true
|
|
||||||
enabled = target.family.appleFamily
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
nopPluginApi kotlinCompilerModule
|
nopPluginApi kotlinCompilerModule
|
||||||
nopPluginApi project(":native:kotlin-native-utils")
|
nopPluginApi project(":native:kotlin-native-utils")
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.group.FirPipeline
|
|||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestExecutable
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestExecutable
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.doFileCheck
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.*
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.*
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.createTestProvider
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.createTestProvider
|
||||||
import org.jetbrains.kotlin.native.executors.runProcess
|
import org.jetbrains.kotlin.native.executors.runProcess
|
||||||
@@ -39,6 +40,47 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() {
|
|||||||
private val extras = TestCase.NoTestRunnerExtras("There's no entrypoint in Swift program")
|
private val extras = TestCase.NoTestRunnerExtras("There's no entrypoint in Swift program")
|
||||||
private val testCompilationFactory = TestCompilationFactory()
|
private val testCompilationFactory = TestCompilationFactory()
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSignextZeroext() {
|
||||||
|
Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily)
|
||||||
|
val fileCheckStage = "CStubs"
|
||||||
|
val testDataFile = testSuiteDir.resolve("signext_zeroext_objc_export.kt")
|
||||||
|
val testCase = generateObjCFrameworkTestCase(
|
||||||
|
TestKind.STANDALONE_NO_TR,
|
||||||
|
extras,
|
||||||
|
"SignextZeroext",
|
||||||
|
listOf(testDataFile),
|
||||||
|
TestCompilerArgs(
|
||||||
|
listOf(
|
||||||
|
"-Xbinary=bundleId=signextZeroext",
|
||||||
|
"-Xsave-llvm-ir-after=$fileCheckStage",
|
||||||
|
"-Xsave-llvm-ir-directory=${buildDir.absolutePath}",
|
||||||
|
)
|
||||||
|
),
|
||||||
|
givenDependencies = emptySet(),
|
||||||
|
checks = TestRunChecks.Default(Duration.ZERO)
|
||||||
|
.copy(fileCheckMatcher = TestRunCheck.FileCheckMatcher(testRunSettings, testDataFile))
|
||||||
|
)
|
||||||
|
val objCFrameworkCompilation = testCompilationFactory.testCaseToObjCFrameworkCompilation(testCase, testRunSettings)
|
||||||
|
objCFrameworkCompilation.result.assertSuccess()
|
||||||
|
|
||||||
|
val (result, outText, errText) = doFileCheck(
|
||||||
|
testCase.checks.fileCheckMatcher!!,
|
||||||
|
buildDir.resolve("out.$fileCheckStage.ll").also { assert(it.exists()) }
|
||||||
|
)
|
||||||
|
if (!(result == 0 && errText.isEmpty() && outText.isEmpty())) {
|
||||||
|
val shortOutText = outText.lines().take(100)
|
||||||
|
val shortErrText = errText.lines().take(100)
|
||||||
|
assert(false) {
|
||||||
|
"FileCheck matching of ${buildDir.resolve("out.$fileCheckStage.ll").also { assert(it.exists()) }.absolutePath}\n" +
|
||||||
|
"with '--check-prefixes ${testCase.checks.fileCheckMatcher.prefixes}'\n" +
|
||||||
|
"failed with result=$result:\n" +
|
||||||
|
shortOutText.joinToString("\n") + "\n" +
|
||||||
|
shortErrText.joinToString("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testValuesGenerics() {
|
fun testValuesGenerics() {
|
||||||
Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily)
|
Assumptions.assumeTrue(targets.testTarget.family.isAppleFamily)
|
||||||
|
|||||||
+31
-60
@@ -7,19 +7,12 @@ package org.jetbrains.kotlin.konan.test.blackbox.support.runner
|
|||||||
|
|
||||||
import com.intellij.openapi.util.SystemInfo
|
import com.intellij.openapi.util.SystemInfo
|
||||||
import com.intellij.openapi.util.text.StringUtilRt.convertLineSeparators
|
import com.intellij.openapi.util.text.StringUtilRt.convertLineSeparators
|
||||||
import org.jetbrains.kotlin.konan.target.Architecture
|
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
|
||||||
import org.jetbrains.kotlin.konan.target.needSmallBinary
|
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.LoggedData
|
import org.jetbrains.kotlin.konan.test.blackbox.support.LoggedData
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.TestName
|
import org.jetbrains.kotlin.konan.test.blackbox.support.TestName
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.ExecutionTimeout
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.ExecutionTimeout
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.ExitCode
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.ExitCode
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.CacheMode
|
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeTargets
|
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.OptimizationMode
|
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.util.TestReport
|
import org.jetbrains.kotlin.konan.test.blackbox.support.util.TestReport
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
|
|
||||||
import org.junit.jupiter.api.Assumptions
|
import org.junit.jupiter.api.Assumptions
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -85,57 +78,16 @@ internal class ResultHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is TestRunCheck.FileCheckMatcher -> {
|
is TestRunCheck.FileCheckMatcher -> {
|
||||||
val fileCheckExecutable = check.settings.configurables.absoluteLlvmHome + File.separator + "bin" + File.separator +
|
|
||||||
if (SystemInfo.isWindows) "FileCheck.exe" else "FileCheck"
|
|
||||||
require(File(fileCheckExecutable).exists()) {
|
|
||||||
"$fileCheckExecutable does not exist. Make sure Distribution for `settings.configurables` " +
|
|
||||||
"was created using `propertyOverrides` to specify development variant of LLVM instead of user variant."
|
|
||||||
}
|
|
||||||
val fileCheckDump = runResult.testExecutable.executable.fileCheckDump!!
|
val fileCheckDump = runResult.testExecutable.executable.fileCheckDump!!
|
||||||
val fileCheckOut = File(fileCheckDump.absolutePath + ".out")
|
val (result, outText, errText) = doFileCheck(check, fileCheckDump)
|
||||||
val fileCheckErr = File(fileCheckDump.absolutePath + ".err")
|
if (!(result == 0 && errText.isEmpty() && outText.isEmpty())) {
|
||||||
|
|
||||||
val testTarget = check.settings.get<KotlinNativeTargets>().testTarget
|
|
||||||
val checkPrefixes = buildList {
|
|
||||||
add("CHECK")
|
|
||||||
add("CHECK-${testTarget.abiInfoString}")
|
|
||||||
add("CHECK-${testTarget.name.toUpperCaseAsciiOnly()}")
|
|
||||||
if (testTarget.family.isAppleFamily) {
|
|
||||||
add("CHECK-APPLE")
|
|
||||||
}
|
|
||||||
if (testTarget.needSmallBinary()) {
|
|
||||||
add("CHECK-SMALLBINARY")
|
|
||||||
} else {
|
|
||||||
add("CHECK-BIGBINARY")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val optimizationMode = check.settings.get<OptimizationMode>().name
|
|
||||||
val checkPrefixesWithOptMode = checkPrefixes.map { "$it-$optimizationMode" }
|
|
||||||
val cacheMode = check.settings.get<CacheMode>().alias
|
|
||||||
val checkPrefixesWithCacheMode = checkPrefixes.map { "$it-CACHE_$cacheMode" }
|
|
||||||
val commaSeparatedCheckPrefixes = (checkPrefixes + checkPrefixesWithOptMode + checkPrefixesWithCacheMode).joinToString(",")
|
|
||||||
|
|
||||||
val result = ProcessBuilder(
|
|
||||||
fileCheckExecutable,
|
|
||||||
check.testDataFile.absolutePath,
|
|
||||||
"--input-file",
|
|
||||||
fileCheckDump.absolutePath,
|
|
||||||
"--check-prefixes", commaSeparatedCheckPrefixes,
|
|
||||||
"--allow-deprecated-dag-overlap" // TODO specify it via new test directive for `function_attributes_at_callsite.kt`
|
|
||||||
).redirectOutput(fileCheckOut)
|
|
||||||
.redirectError(fileCheckErr)
|
|
||||||
.start()
|
|
||||||
.waitFor()
|
|
||||||
val errText = fileCheckErr.readText()
|
|
||||||
val outText = fileCheckOut.readText()
|
|
||||||
if(!(result == 0 && errText.isEmpty() && outText.isEmpty())) {
|
|
||||||
val shortOutText = outText.lines().take(100)
|
val shortOutText = outText.lines().take(100)
|
||||||
val shortErrText = errText.lines().take(100)
|
val shortErrText = errText.lines().take(100)
|
||||||
add("FileCheck matching of ${fileCheckDump.absolutePath}\n" +
|
add("FileCheck matching of ${fileCheckDump.absolutePath}\n" +
|
||||||
"with '--check-prefixes $commaSeparatedCheckPrefixes'\n" +
|
"with '--check-prefixes ${check.prefixes}'\n" +
|
||||||
"failed with result=$result:\n" +
|
"failed with result=$result:\n" +
|
||||||
shortOutText.joinToString("\n") + "\n" +
|
shortOutText.joinToString("\n") + "\n" +
|
||||||
shortErrText.joinToString("\n")
|
shortErrText.joinToString("\n")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,10 +147,29 @@ internal class ResultHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shameless borrowing `val KonanTarget.abiInfo` from module `:kotlin-native:backend.native`, which cannot be imported here for now.
|
internal fun doFileCheck(check: TestRunCheck.FileCheckMatcher, fileCheckDump: File): Triple<Int, String, String> {
|
||||||
private val KonanTarget.abiInfoString: String
|
val fileCheckExecutable = check.settings.configurables.absoluteLlvmHome + File.separator + "bin" + File.separator +
|
||||||
get() = when {
|
if (SystemInfo.isWindows) "FileCheck.exe" else "FileCheck"
|
||||||
this == KonanTarget.MINGW_X64 -> "WINDOWSX64"
|
require(File(fileCheckExecutable).exists()) {
|
||||||
!family.isAppleFamily && architecture == Architecture.ARM64 -> "AAPCS"
|
"$fileCheckExecutable does not exist. Make sure Distribution for `settings.configurables` " +
|
||||||
else -> "DEFAULTABI"
|
"was created using `propertyOverrides` to specify development variant of LLVM instead of user variant."
|
||||||
}
|
}
|
||||||
|
val fileCheckOut = File(fileCheckDump.absolutePath + ".out")
|
||||||
|
val fileCheckErr = File(fileCheckDump.absolutePath + ".err")
|
||||||
|
|
||||||
|
val result = ProcessBuilder(
|
||||||
|
fileCheckExecutable,
|
||||||
|
check.testDataFile.absolutePath,
|
||||||
|
"--input-file",
|
||||||
|
fileCheckDump.absolutePath,
|
||||||
|
"--check-prefixes", check.prefixes,
|
||||||
|
"--allow-deprecated-dag-overlap" // TODO specify it via new test directive for `function_attributes_at_callsite.kt`
|
||||||
|
).redirectOutput(fileCheckOut)
|
||||||
|
.redirectError(fileCheckErr)
|
||||||
|
.start()
|
||||||
|
.waitFor()
|
||||||
|
val outText = fileCheckOut.readText()
|
||||||
|
val errText = fileCheckErr.readText()
|
||||||
|
|
||||||
|
return Triple(result, outText, errText)
|
||||||
|
}
|
||||||
|
|||||||
+39
-1
@@ -5,8 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.konan.test.blackbox.support.runner
|
package org.jetbrains.kotlin.konan.test.blackbox.support.runner
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.konan.target.Architecture
|
||||||
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
import org.jetbrains.kotlin.konan.target.needSmallBinary
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.*
|
import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck.*
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.CacheMode
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.KotlinNativeTargets
|
||||||
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.OptimizationMode
|
||||||
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Settings
|
import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Settings
|
||||||
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
|
||||||
import org.jetbrains.kotlin.utils.yieldIfNotNull
|
import org.jetbrains.kotlin.utils.yieldIfNotNull
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
@@ -36,7 +43,30 @@ internal sealed interface TestRunCheck {
|
|||||||
|
|
||||||
class OutputMatcher(val output: Output = Output.ALL, val match: (String) -> Boolean): TestRunCheck
|
class OutputMatcher(val output: Output = Output.ALL, val match: (String) -> Boolean): TestRunCheck
|
||||||
|
|
||||||
class FileCheckMatcher(val settings: Settings, val testDataFile: File): TestRunCheck
|
class FileCheckMatcher(val settings: Settings, val testDataFile: File) : TestRunCheck {
|
||||||
|
val prefixes: String
|
||||||
|
get() {
|
||||||
|
val testTarget = settings.get<KotlinNativeTargets>().testTarget
|
||||||
|
val checkPrefixes = buildList {
|
||||||
|
add("CHECK")
|
||||||
|
add("CHECK-${testTarget.abiInfoString}")
|
||||||
|
add("CHECK-${testTarget.name.toUpperCaseAsciiOnly()}")
|
||||||
|
if (testTarget.family.isAppleFamily) {
|
||||||
|
add("CHECK-APPLE")
|
||||||
|
}
|
||||||
|
if (testTarget.needSmallBinary()) {
|
||||||
|
add("CHECK-SMALLBINARY")
|
||||||
|
} else {
|
||||||
|
add("CHECK-BIGBINARY")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val optimizationMode = settings.get<OptimizationMode>().name
|
||||||
|
val checkPrefixesWithOptMode = checkPrefixes.map { "$it-$optimizationMode" }
|
||||||
|
val cacheMode = settings.get<CacheMode>().alias
|
||||||
|
val checkPrefixesWithCacheMode = checkPrefixes.map { "$it-CACHE_$cacheMode" }
|
||||||
|
return (checkPrefixes + checkPrefixesWithOptMode + checkPrefixesWithCacheMode).joinToString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal data class TestRunChecks(
|
internal data class TestRunChecks(
|
||||||
@@ -67,3 +97,11 @@ internal data class TestRunChecks(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shameless borrowing `val KonanTarget.abiInfo` from module `:kotlin-native:backend.native`, which cannot be imported here for now.
|
||||||
|
private val KonanTarget.abiInfoString: String
|
||||||
|
get() = when {
|
||||||
|
this == KonanTarget.MINGW_X64 -> "WINDOWSX64"
|
||||||
|
!family.isAppleFamily && architecture == Architecture.ARM64 -> "AAPCS"
|
||||||
|
else -> "DEFAULTABI"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user