[KT-4124] Refactor super calls and fix calls to Any::equals

This commit is contained in:
Alexey Andreev
2016-02-18 19:49:30 +03:00
parent 6adcafafbb
commit d83f926658
12 changed files with 149 additions and 118 deletions
+1 -1
View File
@@ -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
View File
@@ -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"
}