added unit tests for equality and hashCode
parent
687889abce
commit
dcc78bba30
|
@ -18,6 +18,7 @@ package dorkbox.storage
|
||||||
import com.esotericsoftware.kryo.Kryo
|
import com.esotericsoftware.kryo.Kryo
|
||||||
import com.esotericsoftware.kryo.io.Input
|
import com.esotericsoftware.kryo.io.Input
|
||||||
import com.esotericsoftware.kryo.io.Output
|
import com.esotericsoftware.kryo.io.Output
|
||||||
|
import dorkbox.storage.serializer.SerializerBytes
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
import org.junit.FixMethodOrder
|
import org.junit.FixMethodOrder
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
|
@ -67,19 +68,49 @@ class StorageTest {
|
||||||
Assert.assertTrue(tes == tester)
|
Assert.assertTrue(tes == tester)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun memoryEqualityAndHash() {
|
||||||
|
val tester = Tester("key1", "value1")
|
||||||
|
|
||||||
|
val s1 = Storage.Memory()
|
||||||
|
val s2 = Storage.Memory()
|
||||||
|
|
||||||
|
Assert.assertTrue(s1 == s2)
|
||||||
|
Assert.assertTrue(s1.hashCode() == s2.hashCode())
|
||||||
|
|
||||||
|
val s1Build = s1.build()
|
||||||
|
val s2Build = s2.build()
|
||||||
|
|
||||||
|
Assert.assertTrue(s1Build == s2Build)
|
||||||
|
Assert.assertTrue(s1Build.hashCode() == s2Build.hashCode())
|
||||||
|
|
||||||
|
// note: we want to auto-close the storage after we write/read it
|
||||||
|
s1Build.use {
|
||||||
|
it["key1"] = tester
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertFalse(s1Build == s2Build)
|
||||||
|
Assert.assertFalse(s1Build.hashCode() == s2Build.hashCode())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun property() {
|
fun property() {
|
||||||
val tmp = tmp().newFile()
|
val tmp = tmp().newFile()
|
||||||
|
|
||||||
val tester = Tester("key1", "value1")
|
val tester = Tester("key1", "value1")
|
||||||
|
|
||||||
|
// lambda's do NOT evaluate equality. Only reference equality.
|
||||||
|
val serializer = SerializerBytes {
|
||||||
|
register(Tester::class.java, TesterSerializer())
|
||||||
|
}
|
||||||
|
|
||||||
// note: we want to auto-close the storage after we write/read it
|
// note: we want to auto-close the storage after we write/read it
|
||||||
val storage = Storage.Property().file(tmp).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
|
val storage = Storage.Property().file(tmp).serializer(serializer).build()
|
||||||
storage.use {
|
storage.use {
|
||||||
it["key1"] = tester
|
it["key1"] = tester
|
||||||
}
|
}
|
||||||
|
|
||||||
val storage2 = Storage.Property().file(tmp).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
|
val storage2 = Storage.Property().file(tmp).serializer(serializer).build()
|
||||||
|
|
||||||
val tes: Tester? = storage2.use {
|
val tes: Tester? = storage2.use {
|
||||||
it["key1"]
|
it["key1"]
|
||||||
|
@ -95,13 +126,18 @@ class StorageTest {
|
||||||
|
|
||||||
val tester = Tester("key1", "value1")
|
val tester = Tester("key1", "value1")
|
||||||
|
|
||||||
|
// lambda's do NOT evaluate equality. Only reference equality.
|
||||||
|
val serializer = SerializerBytes {
|
||||||
|
register(Tester::class.java, TesterSerializer())
|
||||||
|
}
|
||||||
|
|
||||||
// note: we want to auto-close the storage after we write/read it
|
// note: we want to auto-close the storage after we write/read it
|
||||||
val storage1 = Storage.Property().file(tmp1).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
|
val storage1 = Storage.Property().file(tmp1).serializer(serializer).build()
|
||||||
storage1.use {
|
storage1.use {
|
||||||
it["key1"] = tester
|
it["key1"] = tester
|
||||||
}
|
}
|
||||||
|
|
||||||
val storage2 = Storage.Property().file(tmp2).onNewSerializer { register(Tester::class.java, TesterSerializer()) }.build()
|
val storage2 = Storage.Property().file(tmp2).serializer(serializer).build()
|
||||||
storage2.use {
|
storage2.use {
|
||||||
it["key1"] = tester
|
it["key1"] = tester
|
||||||
}
|
}
|
||||||
|
@ -111,7 +147,7 @@ class StorageTest {
|
||||||
val lines1 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
|
val lines1 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
|
||||||
val lines2 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
|
val lines2 = tmp1.readLines().filter { !it.startsWith("#") || it.startsWith("#Storage") }
|
||||||
|
|
||||||
Assert.assertTrue( lines1 == lines2)
|
Assert.assertTrue(lines1 == lines2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -140,6 +176,55 @@ class StorageTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun propertyEqualityAndHash() {
|
||||||
|
val tmp1 = tmp().newFile()
|
||||||
|
val tmp2 = tmp().newFile()
|
||||||
|
|
||||||
|
val tester = Tester("key1", "value1")
|
||||||
|
|
||||||
|
// lambda's do NOT evaluate equality. Only reference equality.
|
||||||
|
val serializer = SerializerBytes {
|
||||||
|
register(Tester::class.java, TesterSerializer())
|
||||||
|
}
|
||||||
|
|
||||||
|
val s1 = Storage.Property().file(tmp1).serializer(serializer)
|
||||||
|
val s2 = Storage.Property().file(tmp1).serializer(serializer)
|
||||||
|
val s3 = Storage.Property().file(tmp2).serializer(serializer)
|
||||||
|
val s4 = Storage.Property().file(tmp2).serializer(SerializerBytes {
|
||||||
|
register(Tester::class.java, TesterSerializer())
|
||||||
|
})
|
||||||
|
|
||||||
|
Assert.assertTrue(s1 == s2)
|
||||||
|
Assert.assertFalse(s1 == s3)
|
||||||
|
Assert.assertFalse(s3 == s4)
|
||||||
|
|
||||||
|
Assert.assertTrue(s1.hashCode() == s2.hashCode())
|
||||||
|
Assert.assertFalse(s1.hashCode() == s3.hashCode())
|
||||||
|
Assert.assertFalse(s3.hashCode() == s4.hashCode())
|
||||||
|
|
||||||
|
val s1Build = s1.build()
|
||||||
|
val s2Build = s2.build()
|
||||||
|
val s3Build = s3.build()
|
||||||
|
val s4Build = s4.build()
|
||||||
|
|
||||||
|
Assert.assertTrue(s1Build == s2Build)
|
||||||
|
Assert.assertFalse(s1Build == s3Build)
|
||||||
|
Assert.assertFalse(s3Build == s4Build)
|
||||||
|
|
||||||
|
Assert.assertTrue(s1Build.hashCode() == s2Build.hashCode())
|
||||||
|
Assert.assertFalse(s1Build.hashCode() == s3Build.hashCode())
|
||||||
|
Assert.assertFalse(s3Build.hashCode() == s4Build.hashCode())
|
||||||
|
|
||||||
|
// note: we want to auto-close the storage after we write/read it
|
||||||
|
s1Build.use {
|
||||||
|
it["key1"] = tester
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertFalse(s1Build == s2Build)
|
||||||
|
Assert.assertFalse(s1Build.hashCode() == s2Build.hashCode())
|
||||||
|
}
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// fun json() {
|
// fun json() {
|
||||||
// val tmp = tmp().newFile()
|
// val tmp = tmp().newFile()
|
||||||
|
|
Loading…
Reference in New Issue