Skip to content

Commit 70c8767

Browse files
committed
experiment
1 parent 62bf595 commit 70c8767

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

core-kotlin-modules/core-kotlin-10/src/test/kotlin/com/baeldung/cloningobject/CloningObjectUnitTest.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ data class Person(var name: String, var address: Address) : Cloneable {
1717
constructor(person: Person) : this(person.name, person.address.copy())
1818
}
1919

20+
data class Company(var name: String, var industry: String, val ceo: Person, val employees: List<Person>) : Cloneable {
21+
public override fun clone(): Company {
22+
return Company(name, industry, ceo.clone(), employees.map { it.clone() })
23+
}
24+
}
25+
26+
data class Organization(var name: String, val headquarters: Address, val companies: List<Company>) : Cloneable {
27+
public override fun clone(): Organization {
28+
return Organization(name, headquarters.clone(), companies.map { it.clone() })
29+
}
30+
}
31+
2032
class CloningObjectUnitTest {
2133

2234
private val address = Address("Jln. Kemasan", "Yogyakarta")
@@ -93,4 +105,56 @@ class CloningObjectUnitTest {
93105
assertThat(clonedPerson.address.street)
94106
.isNotEqualTo("Jln. Siliwangi")
95107
}
108+
109+
@Test
110+
fun `deep copy with copy`(){
111+
val address = Address("Jln. Kemasan No 53", "Yogyakarta")
112+
val person = Person("Hangga Aji Sayekti", address)
113+
val company = Company("Basen Software", "Tech", person, listOf(person))
114+
val organization = Organization("Bekraf", address, listOf(company))
115+
116+
val copiedOrganization = organization.copy(
117+
headquarters = organization.headquarters.copy(),
118+
companies = organization.companies.map { company ->
119+
company.copy(
120+
ceo = company.ceo.copy(),
121+
employees = company.employees.map { it.copy() }
122+
)
123+
}
124+
)
125+
126+
val clonedOrganization = organization.clone()
127+
128+
// Modify the copied organization to verify deep copy
129+
organization.name = "New Org Name"
130+
organization.headquarters.city = "New City"
131+
organization.companies.first().name = "New Company Name"
132+
organization.companies.first().ceo.name = "New CEO Name"
133+
organization.companies.first().employees.first().name = "New Employee Name"
134+
135+
assertThat(copiedOrganization.headquarters.city)
136+
.isNotEqualTo("New City")
137+
138+
assertThat(copiedOrganization.companies.first().name)
139+
.isNotEqualTo("New Company Name")
140+
141+
assertThat(copiedOrganization.companies.first().ceo.name)
142+
.isNotEqualTo("New CEO Name")
143+
144+
assertThat(copiedOrganization.companies.first().employees.first().name)
145+
.isNotEqualTo("New Employee Name")
146+
147+
148+
assertThat(clonedOrganization.headquarters.city)
149+
.isNotEqualTo("New City")
150+
151+
assertThat(clonedOrganization.companies.first().name)
152+
.isNotEqualTo("New Company Name")
153+
154+
assertThat(clonedOrganization.companies.first().ceo.name)
155+
.isNotEqualTo("New CEO Name")
156+
157+
assertThat(clonedOrganization.companies.first().employees.first().name)
158+
.isNotEqualTo("New Employee Name")
159+
}
96160
}

0 commit comments

Comments
 (0)