From 6d4aa5c496e53daac16c837aff2648905b6823ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Sun, 3 Sep 2023 16:03:29 +0200 Subject: [PATCH] Fix qualities with rating import --- .../importer/parsers/trappings/Utils.kt | 8 ++++---- .../importer/parsers/trappings/UtilsTest.kt | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 common/src/commonTest/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/UtilsTest.kt diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/Utils.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/Utils.kt index 6a67f3220..11899ae50 100644 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/Utils.kt +++ b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/Utils.kt @@ -35,7 +35,7 @@ inline fun > matchEnumSetOrNull(value: String, separator: St return enums.toSet() } -val FEATURE_REGEX = Regex("([a-zA-Z- ])+ ?\\(?\\+?([0-9])?A?\\)?") +val FEATURE_REGEX = Regex("([a-zA-Z- ]+) ?\\(?\\+?([0-9])?A?\\)?") private val NAME_WITH_COUNT_PATTERN = Regex("(.*) \\((\\d+|dozen)\\)") inline fun > parseFeatures(value: String): Map { @@ -47,11 +47,11 @@ inline fun > parseFeatures(value: String): Map { .splitToSequence(",") .map { it.trim() } .mapNotNull { - val (name, rating) = FEATURE_REGEX.matchEntire(it)?.groupValues + val (_, name, rating) = FEATURE_REGEX.matchEntire(it)?.groupValues ?: error("Invalid feature $it") - val feature = matchEnumOrNull(name) ?: return@mapNotNull null + val feature = matchEnumOrNull(name.trim()) ?: return@mapNotNull null - feature to (rating.toIntOrNull() ?: 0) + feature to (rating.toIntOrNull() ?: 1) }.toMap() } diff --git a/common/src/commonTest/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/UtilsTest.kt b/common/src/commonTest/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/UtilsTest.kt new file mode 100644 index 000000000..2956f1b7e --- /dev/null +++ b/common/src/commonTest/kotlin/cz/frantisekmasa/wfrp_master/common/compendium/domain/importer/parsers/trappings/UtilsTest.kt @@ -0,0 +1,20 @@ +package cz.frantisekmasa.wfrp_master.common.compendium.domain.importer.parsers.trappings + +import cz.frantisekmasa.wfrp_master.common.core.domain.trappings.WeaponQuality +import kotlin.test.Test +import kotlin.test.assertEquals + +class UtilsTest { + + @Test + fun `matchEnum() parses all feature types`() { + assertEquals( + mapOf( + WeaponQuality.SLASH to 3, + WeaponQuality.DAMAGING to 1, + WeaponQuality.SHIELD to 2, + ), + parseFeatures("Slash (3A), Damaging*, Shield 2, Unknown") + ) + } +} \ No newline at end of file