1
+ import org.junit.jupiter.api.Test
2
+ import java.util.*
3
+ import kotlin.test.assertEquals
4
+
5
+ class ExtensionFieldsAlternativesUnitTest {
6
+
7
+ fun String.toTitleCase (): String = this .split(" " ).joinToString(" " ) { it.capitalize() }
8
+
9
+ private val String .firstChar: Char
10
+ get() = this .first()
11
+
12
+ @Test
13
+ fun `test using extension functions` () {
14
+ val word = " baeldung kotlin"
15
+ assertEquals(" Baeldung Kotlin" , word.toTitleCase())
16
+ assertEquals(' b' , word.firstChar)
17
+ }
18
+
19
+ class Car {
20
+ var model: String = " Toyota Supra"
21
+ }
22
+
23
+ open class Person (var name : String , var age : Int )
24
+
25
+ val Person .isAdult: Boolean
26
+ get() = this .age >= 18
27
+
28
+ val Person .details: String
29
+ get() = " Name: ${this .name} , Age: ${this .age} , isAdult: ${this .isAdult} "
30
+
31
+ var Person .ageInDecades: Int
32
+ get() = this .age / 10
33
+ set(value) {
34
+ this .age = value * 10
35
+ }
36
+
37
+ val externalMap = mutableMapOf<Person , String >()
38
+
39
+ var Person .address: String
40
+ get() = externalMap[this ] ? : " "
41
+ set(value) {
42
+ externalMap[this ] = value
43
+ }
44
+
45
+ @Test
46
+ fun `test using external Map` () {
47
+ val person = Person (" Hangga Aji Sayekti" , 35 )
48
+ person.address = " Jln. Kemasan Kotagede"
49
+ assertEquals(" Jln. Kemasan Kotagede" , person.address)
50
+
51
+ person.address = " Jln. Kalasan Sleman"
52
+ assertEquals(" Jln. Kalasan Sleman" , person.address)
53
+ }
54
+
55
+ @Test
56
+ fun `test using properties` () {
57
+ val car = Car ()
58
+ assertEquals(" Toyota Supra" , car.model)
59
+
60
+ val person = Person (" Hangga Aji Sayekti" , 35 )
61
+ assertEquals(" Name: Hangga Aji Sayekti, Age: 35, isAdult: true" , person.details)
62
+
63
+ person.ageInDecades = 1
64
+ assertEquals(" Name: Hangga Aji Sayekti, Age: 10, isAdult: false" , person.details)
65
+ }
66
+
67
+ interface PersonDecorator {
68
+ var address: String
69
+ var person: Person
70
+ fun getDetails (): String
71
+ }
72
+
73
+ class PersonWithAddress (override var person : Person ) : PersonDecorator {
74
+ private var _address : String = " "
75
+
76
+ override var address: String
77
+ get() = _address
78
+ set(value) {
79
+ _address = value
80
+ }
81
+
82
+ override fun getDetails (): String {
83
+ return " Name: ${person.name} , Age: ${person.age} , Address: $address "
84
+ }
85
+ }
86
+
87
+ @Test
88
+ fun `test using decorator` () {
89
+ val person = Person (" Hangga Aji Sayekti" , 35 )
90
+
91
+ val personWithAddress = PersonWithAddress (person)
92
+ personWithAddress.address = " Jln. Kemasan Kotagede"
93
+ assertEquals(" Name: Hangga Aji Sayekti, Age: 35, Address: Jln. Kemasan Kotagede" , personWithAddress.getDetails())
94
+
95
+ personWithAddress.address = " Jln. Kalasan Sleman"
96
+ assertEquals(" Name: Hangga Aji Sayekti, Age: 35, Address: Jln. Kalasan Sleman" , personWithAddress.getDetails())
97
+ }
98
+
99
+ class PersonExtended (name : String , age : Int ) : Person(name, age) {
100
+ var jobtitle: String = " "
101
+ }
102
+
103
+ @Test
104
+ fun `test using inheritance` () {
105
+ val personExtended = PersonExtended (" Hangga Aji Sayekti" , 35 )
106
+ personExtended.jobtitle = " Software Engineer"
107
+ assertEquals(" Software Engineer" , personExtended.jobtitle)
108
+
109
+ personExtended.jobtitle = " Data Scientist"
110
+ assertEquals(" Data Scientist" , personExtended.jobtitle)
111
+
112
+ personExtended.jobtitle = " Mathematicians"
113
+ assertEquals(" Mathematicians" , personExtended.jobtitle)
114
+ }
115
+ }
0 commit comments