[KT-4124] Refactor super calls and fix calls to Any::equals
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@ package kotlin
|
||||
// This file should be excluded from tests using StdLib, as these methods conflict with corresponding methods from kotlin.test
|
||||
// see StdLibTestBase.removeAdHocAssertions
|
||||
|
||||
fun fail(message: String? = null): Nothing = throw Exception(message)
|
||||
fun fail(message: String? = null): Nothing = js("throw new Error(message)")
|
||||
|
||||
fun <T> assertEquals(expected: T, actual: T, message: String? = null) {
|
||||
if (expected != actual) {
|
||||
|
||||
+4
-3
@@ -1,10 +1,11 @@
|
||||
package foo
|
||||
|
||||
object f {
|
||||
var equalsCalled = false
|
||||
var equalsCalled = 0
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
equalsCalled = true
|
||||
equalsCalled++
|
||||
if (equalsCalled > 1) return false
|
||||
return super.equals(other)
|
||||
}
|
||||
}
|
||||
@@ -40,7 +41,7 @@ fun box(): String {
|
||||
|
||||
val ff: dynamic = f
|
||||
testFalse { ff.equals(v) }
|
||||
assertTrue(f.equalsCalled, "f.equalsCalled")
|
||||
assertEquals(1, f.equalsCalled)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package foo
|
||||
|
||||
open class A {
|
||||
var log = ""
|
||||
|
||||
var called = false
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (called) fail("recursion detected")
|
||||
|
||||
log += "A.equals;"
|
||||
|
||||
called = true
|
||||
val result = super.equals(other)
|
||||
called = false
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
log += "B.equals;"
|
||||
if (other == null) return false
|
||||
return super.equals(other)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
val a = A()
|
||||
testFalse { a == A() }
|
||||
assertEquals("A.equals;", a.log)
|
||||
|
||||
val b1 = B()
|
||||
testTrue { b1 == b1 }
|
||||
assertEquals("B.equals;A.equals;", b1.log)
|
||||
|
||||
val b2 = B()
|
||||
testFalse { b2 == B() }
|
||||
assertEquals("B.equals;A.equals;", b2.log)
|
||||
|
||||
val b3 = B()
|
||||
testFalse { b3 == null }
|
||||
assertEquals("", b3.log)
|
||||
|
||||
val b4 = B()
|
||||
testFalse { b4.equals(null) }
|
||||
assertEquals("B.equals;", b4.log)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user