Add test for overriding methods of Any from Swift

This commit is contained in:
Svyatoslav Scherbina
2021-01-27 12:55:55 +03:00
committed by Vasily Levchenko
parent 9fb2d4b956
commit 0a2a8a58c1
3 changed files with 71 additions and 0 deletions
@@ -663,6 +663,16 @@ __attribute__((swift_name("ArraysInitBlock")))
- (NSString *)log __attribute__((swift_name("log()")));
@end;
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("OverrideMethodsOfAnyKt")))
@interface KtOverrideMethodsOfAnyKt : KtBase
/**
@note This method converts all Kotlin exceptions to errors.
*/
+ (BOOL)testObj:(id)obj other:(id)other swift:(BOOL)swift error:(NSError * _Nullable * _Nullable)error __attribute__((swift_name("test(obj:other:swift:)")));
@end;
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("ThrowsEmptyKt")))
@interface KtThrowsEmptyKt : KtBase
@@ -0,0 +1,18 @@
package overrideMethodsOfAny
import kotlin.test.*
@Throws(Throwable::class)
fun test(obj: Any, other: Any, swift: Boolean) {
if (!swift) {
// Doesn't work for Swift, see https://youtrack.jetbrains.com/issue/KT-44613.
assertEquals(42, obj.hashCode())
assertTrue(obj.equals(other))
}
assertTrue(obj.equals(obj))
assertFalse(obj.equals(null))
assertFalse(obj.equals(Any()))
assertEquals("toString", obj.toString())
}
@@ -0,0 +1,43 @@
/*
* Copyright 2010-2021 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 Kt
private class SwiftOverridingMethodsOfAny : Hashable, Equatable, CustomStringConvertible {
var hashValue: Int { return 42 }
static func == (lhs: SwiftOverridingMethodsOfAny, rhs: SwiftOverridingMethodsOfAny) -> Bool {
return true
}
var description: String { return "toString" }
}
private func testSwift() throws {
try OverrideMethodsOfAnyKt.test(obj: SwiftOverridingMethodsOfAny(), other: SwiftOverridingMethodsOfAny(), swift: true)
}
private class ObjCOverridingMethodsOfAny : NSObject {
override var hash: Int { return 42 }
override func isEqual(_ other: Any?) -> Bool {
return other is ObjCOverridingMethodsOfAny
}
override var description: String { return "toString" }
}
private func testObjC() throws {
try OverrideMethodsOfAnyKt.test(obj: ObjCOverridingMethodsOfAny(), other: ObjCOverridingMethodsOfAny(), swift: false)
}
class OverrideMethodsOfAnyTests : SimpleTestProvider {
override init() {
super.init()
test("TestSwift", testSwift)
test("TestObjC", testObjC)
}
}