Fix incorrect work of MetaWithDefault::getValue

This commit is contained in:
Alexander Nozik 2025-01-28 11:50:21 +03:00
parent c6a3a1af3f
commit a438666d32
4 changed files with 38 additions and 4 deletions
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)
}
}