Fix incorrect work of MetaWithDefault::getValue
This commit is contained in:
parent
c6a3a1af3f
commit
a438666d32
CHANGELOG.mdbuild.gradle.kts
dataforge-meta/src
commonMain/kotlin/space/kscience/dataforge/meta
commonTest/kotlin/space/kscience/dataforge/meta
@ -11,6 +11,7 @@
|
||||
### Removed
|
||||
|
||||
### Fixed
|
||||
- Incorrect work of `MetaWithDefault::getValue`
|
||||
|
||||
### Security
|
||||
|
||||
|
@ -9,7 +9,7 @@ plugins {
|
||||
|
||||
allprojects {
|
||||
group = "space.kscience"
|
||||
version = "0.10.0"
|
||||
version = "0.10.1-dev"
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
@ -438,7 +438,7 @@ public inline fun Meta.copy(modification: MutableMeta.() -> Unit = {}): Meta = M
|
||||
|
||||
private class MutableMetaWithDefault(
|
||||
val source: MutableMeta, val default: MetaProvider, val rootName: Name,
|
||||
) : MutableMeta by source {
|
||||
) : MutableMeta {
|
||||
override val items: Map<NameToken, MutableMeta>
|
||||
get() {
|
||||
val sourceKeys: Collection<NameToken> = source[rootName]?.items?.keys ?: emptyList()
|
||||
@ -457,6 +457,17 @@ private class MutableMetaWithDefault(
|
||||
|
||||
override fun get(name: Name): MutableMeta = MutableMetaWithDefault(source, default, rootName + name)
|
||||
|
||||
override fun set(name: Name, node: Meta?) {
|
||||
source[name] = node
|
||||
}
|
||||
|
||||
override fun setValue(name: Name, value: Value?) {
|
||||
source.setValue(name, value)
|
||||
}
|
||||
|
||||
override fun getOrCreate(name: Name): MutableMeta =
|
||||
MutableMetaWithDefault(source, default, rootName + name)
|
||||
|
||||
override fun toString(): String = Meta.toString(this)
|
||||
override fun equals(other: Any?): Boolean = Meta.equals(this, other as? Meta)
|
||||
override fun hashCode(): Int = Meta.hashCode(this)
|
||||
|
@ -3,9 +3,9 @@ package space.kscience.dataforge.meta
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class MutableMetaTest{
|
||||
class MutableMetaTest {
|
||||
@Test
|
||||
fun remove(){
|
||||
fun remove() {
|
||||
val meta = MutableMeta {
|
||||
"aNode" put {
|
||||
"innerNode" put {
|
||||
@ -19,4 +19,26 @@ class MutableMetaTest{
|
||||
meta.remove("aNode.c")
|
||||
assertEquals(meta["aNode.c"], null)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun withDefault() {
|
||||
val metaWithDefault = MutableMeta().withDefault(
|
||||
Meta {
|
||||
"a" put {
|
||||
value = 22.asValue()
|
||||
"b" put true
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
assertEquals(22, metaWithDefault["a"].int)
|
||||
assertEquals(true, metaWithDefault.getValue("a.b")?.boolean)
|
||||
|
||||
metaWithDefault["a.b"] = "false"
|
||||
|
||||
assertEquals(false, metaWithDefault["a.b"]?.boolean)
|
||||
assertEquals(false, metaWithDefault.getValue("a.b")?.boolean)
|
||||
assertEquals(22, metaWithDefault.getValue("a")?.int)
|
||||
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user