Provide the way to specify implicit default for a readonly or mutable map.

Refactor: rename default key and value providers.
This commit is contained in:
Ilya Gorbunov
2015-06-17 20:54:25 +03:00
parent d137a83471
commit 5306e88425
5 changed files with 139 additions and 42 deletions
@@ -3,6 +3,7 @@ package test.collections
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
import kotlin.test.fails
import org.junit.Test as test
class MapTest {
@@ -21,6 +22,27 @@ class MapTest {
assertEquals(null, c)
}
test fun getOrImplicitDefault() {
val data: MutableMap<String, Int> = hashMapOf("bar" to 1)
assertTrue(fails { data.getOrImplicitDefault("foo") } is KeyMissingException)
assertEquals(1, data.getOrImplicitDefault("bar"))
val mutableWithDefault = data.withDefault { 42 }
assertEquals(42, mutableWithDefault.getOrImplicitDefault("foo"))
// verify that it is wrapper
mutableWithDefault["bar"] = 2
assertEquals(2, data["bar"])
data["bar"] = 3
assertEquals(3, mutableWithDefault["bar"])
val readonlyWithDefault = (data as Map<String, Int>).withDefault { it.length() }
assertEquals(4, readonlyWithDefault.getOrImplicitDefault("loop"))
val withReplacedDefault = readonlyWithDefault.withDefault { 42 }
assertEquals(42, withReplacedDefault.getOrImplicitDefault("loop"))
}
test fun getOrPut() {
val data = hashMapOf<String, Int>()
val a = data.getOrPut("foo") { 2 }
@@ -12,7 +12,7 @@ class ValByMapExtensionsTest {
val b: String by map
val c: Any by map
val d: String? by map
val e: Any by map
val e: String? by map.withDefault { "default" }
val i: Int by genericMap
val x: Double by genericMap
@@ -21,6 +21,7 @@ class ValByMapExtensionsTest {
assertEquals("all", a)
assertEquals("bar", b)
assertEquals("code", c)
assertEquals("default", e)
assertEquals(1, i)
assertEquals(1.0, x)
fails { d }
@@ -37,7 +38,7 @@ class VarByMapExtensionsTest {
var b: Any? by map
var c: Int by map
var d: String? by map
var a2: String by map2
var a2: String by map2.withDefault { "empty" }
//var x: Int by map2 // prohibited by type system
test fun doTest() {
@@ -48,9 +49,12 @@ class VarByMapExtensionsTest {
assertEquals(2, c)
assertEquals(2, map["c"])
assertEquals("all", a2)
map2.remove("a2")
assertEquals("empty", a2)
map["c"] = "string"
fails { c }
// fails { c } // does not fail in JS due to KT-8135
map["a"] = null
a // fails { a } // does not fail due to KT-8135