Skip to content

Commit 17375c1

Browse files
authored
KTLN-479 (#862)
* KTLN-479 compare classes of objects * KTLN-479 changed test class names * Changed test function names
1 parent 09959bd commit 17375c1

File tree

5 files changed

+127
-0
lines changed

5 files changed

+127
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.baeldung.compare.kclass
2+
3+
open class Weapon
4+
5+
open class Sword : Weapon()
6+
7+
open class Bow : Weapon()
8+
9+
class Claymore : Sword()
10+
11+
class LongBow : Bow()
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.baeldung.compare.kclass.inheritance
2+
3+
import com.baeldung.compare.kclass.*
4+
import org.assertj.core.api.Assertions.assertThat
5+
import org.junit.jupiter.api.Assertions.assertEquals
6+
import org.junit.jupiter.api.Assertions.assertNotEquals
7+
import org.junit.jupiter.api.Test
8+
import kotlin.reflect.full.allSuperclasses
9+
import kotlin.reflect.full.isSubclassOf
10+
import kotlin.reflect.full.isSuperclassOf
11+
import kotlin.reflect.full.superclasses
12+
13+
class InheritanceUnitTest {
14+
@Test
15+
fun `Different weapons indirectly inherit from Weapon class`() {
16+
val weapons = listOf(Sword(), Claymore(), Bow(), LongBow())
17+
18+
assertThat(weapons).allMatch { it::class.allSuperclasses.contains(Weapon::class) }
19+
assertThat(weapons).allMatch { it::class.isSubclassOf(Weapon::class) }
20+
21+
assertEquals(weapons, weapons.filter { it::class.allSuperclasses.contains(Weapon::class) })
22+
}
23+
24+
@Test
25+
fun `Different weapons directly inherit from Weapon class`() {
26+
val weapons = listOf(Sword(), Claymore(), Bow(), LongBow())
27+
28+
assertThat(weapons).anyMatch { it::class.superclasses.contains(Weapon::class) }
29+
30+
assertNotEquals(weapons, weapons.filter { it::class.superclasses.contains(Weapon::class) })
31+
}
32+
33+
@Test
34+
fun `Weapon class is a superclass of different weapons`() {
35+
val weapons = listOf(Sword(), Claymore(), Bow(), LongBow())
36+
37+
assertThat(weapons).allMatch { Weapon::class.isSuperclassOf(it::class) }
38+
}
39+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.compare.kclass.isoperator
2+
3+
import com.baeldung.compare.kclass.Claymore
4+
import com.baeldung.compare.kclass.Sword
5+
import com.baeldung.compare.kclass.Weapon
6+
import org.assertj.core.api.Assertions.assertThat
7+
import org.junit.jupiter.api.Test
8+
9+
class IsOperatorUnitTest {
10+
@Test
11+
fun `Different swords are Weapons`() {
12+
val weapon = Weapon()
13+
val sword = Sword()
14+
val claymore = Claymore()
15+
16+
assertThat(weapon is Weapon).isTrue()
17+
assertThat(sword is Weapon).isTrue()
18+
assertThat(claymore is Weapon).isTrue()
19+
}
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.compare.kclass.literal
2+
3+
import com.baeldung.compare.kclass.Weapon
4+
import org.assertj.core.api.Assertions.assertThat
5+
import org.junit.jupiter.api.Assertions.assertEquals
6+
import org.junit.jupiter.api.Assertions.assertInstanceOf
7+
import org.junit.jupiter.api.Test
8+
9+
class LiteralUnitTest {
10+
@Test
11+
fun `A sword and a bow are Weapons`() {
12+
val sword = Weapon()
13+
val bow = Weapon()
14+
15+
assertEquals(sword::class, bow::class)
16+
assertThat(sword::class).isEqualTo(bow::class)
17+
18+
assertThat(sword).isInstanceOf(Weapon::class.java)
19+
assertInstanceOf(Weapon::class.java, sword)
20+
}
21+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.baeldung.compare.kclass.properties
2+
3+
import com.baeldung.compare.kclass.Weapon
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Assertions.assertNotEquals
6+
import org.junit.jupiter.api.Test
7+
8+
class PropertiesUnitTest {
9+
@Test
10+
fun `A Kotlin Weapon class is not a Java Weapon class`() {
11+
assertEquals("class com.baeldung.compare.kclass.Weapon", Weapon::class.toString())
12+
assertEquals("class com.baeldung.compare.kclass.Weapon", Weapon::class.java.toString())
13+
14+
assertNotEquals(Weapon::class, Weapon::class.java)
15+
}
16+
17+
@Test
18+
fun `Using javaClass and kotlin properties for equality comparison`() {
19+
val sword = Weapon()
20+
val bow = Weapon()
21+
22+
assertEquals("class com.baeldung.compare.kclass.Weapon", sword.javaClass.toString())
23+
assertEquals("class com.baeldung.compare.kclass.Weapon", bow.javaClass.kotlin.toString())
24+
25+
assertEquals(sword.javaClass, bow.javaClass)
26+
assertEquals(sword.javaClass.kotlin, bow.javaClass.kotlin)
27+
}
28+
29+
@Test
30+
fun `Comparing javaClass and kotlin properties for Weapon class`(){
31+
val sword = Weapon()
32+
val bow = Weapon()
33+
34+
assertNotEquals(sword.javaClass, bow.javaClass.kotlin)
35+
}
36+
}

0 commit comments

Comments
 (0)