[Wasm] PL tests implementation for Wasm target
Fixed #KT-58088
This commit is contained in:
committed by
Space Team
parent
6b66195afc
commit
7c16528560
@@ -6,13 +6,6 @@ external class ExternalClassInheritedFromAbstractExternalClass : AbstractExterna
|
||||
|
||||
fun ExternalClassInheritedFromAbstractExternalClass.callRemovedFunction() = removedFunction()
|
||||
|
||||
class RegularClassInheritedFromAbstractExternalClass : AbstractExternalClass() {
|
||||
override fun abstractFunction() = "RegularClassInheritedFromAbstractExternalClass.abstractFunction"
|
||||
override fun removedAbstractFunction() = "RegularClassInheritedFromAbstractExternalClass.removedAbstractFunction"
|
||||
}
|
||||
|
||||
fun RegularClassInheritedFromAbstractExternalClass.callRemovedFunction() = removedFunction()
|
||||
|
||||
open external class OpenExternalClass {
|
||||
fun function(): String
|
||||
}
|
||||
@@ -24,15 +17,4 @@ external interface ExternalInterfaceInheritedFromOpenExternalClass : OpenExterna
|
||||
|
||||
external class ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass : ExternalInterfaceInheritedFromOpenExternalClass {
|
||||
override fun abstractFunction(): String
|
||||
}
|
||||
|
||||
class RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass :
|
||||
ExternalInterfaceInheritedFromOpenExternalClass,
|
||||
/* Note: Have to explicitly inherit from 'OpenExternalClass' becase otherwise JS codegen sees that
|
||||
* class 'RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass' is inherited only from
|
||||
* interface 'ExternalInterfaceInheritedFromOpenExternalClass' and does not figure out that a bridge has to be
|
||||
* generated for function 'function' inherited from 'OpenExternalClass'.
|
||||
*/
|
||||
OpenExternalClass() {
|
||||
override fun abstractFunction(): String = "RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.abstractFunction"
|
||||
}
|
||||
}
|
||||
@@ -3,28 +3,23 @@ import abitestutils.TestBuilder
|
||||
|
||||
fun box() = abiTest {
|
||||
val ecifaec = ExternalClassInheritedFromAbstractExternalClass()
|
||||
val rcifaec = RegularClassInheritedFromAbstractExternalClass()
|
||||
val ecifeiifoec = ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass()
|
||||
val rcifeiifoec = RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass()
|
||||
|
||||
expectSuccess("ExternalClassInheritedFromAbstractExternalClass.abstractFunction") { ecifaec.abstractFunction() }
|
||||
expectSuccess("ExternalClassInheritedFromAbstractExternalClass.removedAbstractFunction") { ecifaec.removedAbstractFunction() }
|
||||
expectRuntimeFailure("Calling abstract function AbstractExternalClass.addedAbstractFunction") { ecifaec.addedAbstractFunction() }
|
||||
|
||||
val expectedExceptionMessage = when (testMode.isWasm) {
|
||||
true -> "Exception was thrown while running JavaScript code"
|
||||
else -> "Calling abstract function AbstractExternalClass.addedAbstractFunction"
|
||||
}
|
||||
expectRuntimeFailure(expectedExceptionMessage) { ecifaec.addedAbstractFunction() }
|
||||
|
||||
expectSuccess("AbstractExternalClass.function") { ecifaec.function() }
|
||||
expectFailure(linkage("Function 'removedFunction' can not be called: No function found for symbol '/ExternalClassInheritedFromAbstractExternalClass.removedFunction'")) { ecifaec.callRemovedFunction() }
|
||||
expectSuccess("AbstractExternalClass.addedFunction") { ecifaec.addedFunction() }
|
||||
|
||||
expectSuccess("RegularClassInheritedFromAbstractExternalClass.abstractFunction") { rcifaec.abstractFunction() }
|
||||
expectSuccess("RegularClassInheritedFromAbstractExternalClass.removedAbstractFunction") { rcifaec.removedAbstractFunction() }
|
||||
expectFailure(nonImplementedCallable("function 'addedAbstractFunction'", "class 'RegularClassInheritedFromAbstractExternalClass'")) { rcifaec.addedAbstractFunction() }
|
||||
expectSuccess("AbstractExternalClass.function") { rcifaec.function() }
|
||||
expectFailure(linkage("Function 'removedFunction' can not be called: No function found for symbol '/RegularClassInheritedFromAbstractExternalClass.removedFunction'")) { rcifaec.callRemovedFunction() }
|
||||
expectSuccess("AbstractExternalClass.addedFunction") { rcifaec.addedFunction() }
|
||||
|
||||
expectSuccess("OpenExternalClass.function") { ecifeiifoec.function() }
|
||||
expectSuccess("ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.abstractFunction") { ecifeiifoec.abstractFunction() }
|
||||
expectSuccess("OpenExternalClass.function") { rcifeiifoec.function() }
|
||||
expectSuccess("RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.abstractFunction") { rcifeiifoec.abstractFunction() }
|
||||
}
|
||||
|
||||
private fun TestBuilder.expectRuntimeFailure(errorMessage: String, block: () -> Any) =
|
||||
|
||||
Reference in New Issue
Block a user