diff --git a/src/test/kotlin/AdvancedTest.kt b/src/test/kotlin/AdvancedTest.kt index 423b7e7..cb77b58 100644 --- a/src/test/kotlin/AdvancedTest.kt +++ b/src/test/kotlin/AdvancedTest.kt @@ -5,6 +5,7 @@ import com.yhs0602.vm.RegisterValue import com.yhs0602.vm.executeMethod import java.io.File import java.io.PrintStream +import java.io.Serializable import java.nio.file.Paths import kotlin.jvm.internal.Intrinsics import kotlin.test.BeforeTest @@ -87,6 +88,26 @@ class AdvancedTest { ) } + @Test + fun TestHardInstanceOf() { + testInterpreter( + "src/test/resources/advanced/", + "com.example.sample", + "InstanceOfTestKt", + "advancedInstanceOfTest", + listOf( + GeneralMockedClass(StringBuilder::class.java), + GeneralMockedClass(System::class.java), + GeneralMockedClass(Intrinsics::class.java), + GeneralMockedClass(Object::class.java), + GeneralMockedClass(PrintStream::class.java), + GeneralMockedClass(File::class.java), + GeneralMockedClass(Serializable::class.java), + GeneralMockedClass(Comparable::class.java), + ) + ) + } + @Test fun TestStatic() { testInterpreter( diff --git a/src/test/resources/advanced/classes4.dex b/src/test/resources/advanced/classes4.dex index f74682e..d25f1ed 100644 Binary files a/src/test/resources/advanced/classes4.dex and b/src/test/resources/advanced/classes4.dex differ diff --git a/src/test/resources/advanced/instanceoftest.kt b/src/test/resources/advanced/instanceoftest.kt index c86bc48..f12a26a 100644 --- a/src/test/resources/advanced/instanceoftest.kt +++ b/src/test/resources/advanced/instanceoftest.kt @@ -1,5 +1,8 @@ package com.example.sample +import java.io.File +import java.io.Serializable + open class B open class C: B() @@ -78,5 +81,48 @@ fun testInstanceOf() { assert((f5 as Any) !is I1) assert(f6 is I1) + println("All tests passed!") +} + +open class HardA: File("") + +open class HardB: Serializable + +open class HardC: Comparable { + override fun compareTo(other: HardC): Int { + return 0 + } +} + +class HardD: HardA() + +class HardE: HardB() + +class HardF: HardC(), Serializable + +fun advancedInstanceOfTest() { + val a = HardA() + val b = HardB() + val c = HardC() + val d = HardD() + val e = HardE() + val f = HardF() + + assert(a is File) + assert(b is Serializable) + assert(c is Comparable) + + assert(d is HardA) + assert(d is File) + assert(d is Serializable) + assert(d is Comparable<*>) + + assert(e is Serializable) + assert(e is HardB) + + assert(f is Serializable) + assert(f is Comparable) + assert(f is HardC) + println("All tests passed!") } \ No newline at end of file