package link.roadio.riff.config import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Assert.assertSame import org.junit.Test class ExternalConfigurationMergeTest { @Test fun allDisjointOverlaysParticipateInEitherOrder() { val a = """{"player":{"rewindPreviousThresholdSeconds":{"music":7}}}""" val b = """{"player":{"rewindPreviousThresholdSeconds":{"audiobook":21}}, "skins":{"default":{"behavior":{"enableStatusLines":false}}}}""" for (inputs in listOf(listOf(a, b), listOf(b, a))) { val value = ProjectConfiguration.parseAll(inputs) assertEquals(7.0, value.number("player.rewindPreviousThresholdSeconds.music"), 0.0) assertEquals(21.0, value.number("player.rewindPreviousThresholdSeconds.audiobook"), 0.0) assertEquals(false, value.value("behavior.enableStatusLines")) } } @Test fun conflictsFollowEncounterOrderWithoutChoosingAFilePriority() { val a = """{"player":{"rewindPreviousThresholdSeconds":{"music":4}}}""" val b = """{"player":{"rewindPreviousThresholdSeconds":{"music":8}}}""" assertEquals(8.0, ProjectConfiguration.parseAll(listOf(a, b)).number("player.rewindPreviousThresholdSeconds.music"), 0.0) assertEquals(4.0, ProjectConfiguration.parseAll(listOf(b, a)).number("player.rewindPreviousThresholdSeconds.music"), 0.0) } @Test fun invalidDiscoveredInputRejectsTheCompleteSetAndReadsOnlyOnce() { var reads = 0 val startup = StartupConfiguration() val value = startup.loadAll { reads++ listOf("""{"player":{"rewindPreviousThresholdSeconds":{"music":8}}}""", "{bad}") } assertEquals(ConfigurationProblem.INVALID, value.problem) assertEquals(3.0, value.snapshot.number("player.rewindPreviousThresholdSeconds.music"), 0.0) assertSame(value, startup.loadAll { error("Reloaded") }) assertEquals(1, reads) } @Test fun arraysReplaceAndTransportReparsesTheSameAggregate() { val a = """{"player":{"excludedGenreIds":["-100000"]}}""" val b = """{"player":{"excludedGenreIds":["-100001","-100002"]}}""" val merged = checkNotNull(ProjectConfiguration.mergeUserTexts(listOf(a, b))) assertEquals(listOf("-100001", "-100002"), ProjectConfiguration.parse(merged).value("player.excludedGenreIds")) assertNull(ProjectConfiguration.mergeUserTexts(emptyList())) } }