package com.projectsacrifice.game; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotSame; import java.util.Arrays; import org.junit.Test; public final class AccessibilityStateCacheTest { @Test public void unchangedFramesReuseOneStatusAndOneDeduplicatedSignalSet() { AccessibilityStateCache cache = new AccessibilityStateCache(); cache.configureSignals(Arrays.asList("lift", "lift", "door")); assertEquals(Arrays.asList("lift", "door"), cache.signalIds()); assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 0, 1, true)); String first = cache.statusText(); for (int frame = 0; frame < 600; frame++) { assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 0, 1, true)); assertSame(first, cache.statusText()); } } @Test public void criticalStateAndLanguageChangesInvalidateExactlyOnce() { AccessibilityStateCache cache = new AccessibilityStateCache(); cache.configureSignals(Arrays.asList("plate")); cache.update(GameStrings.forLanguage(GameLanguage.EN), 0, 0, 1, true); String initial = cache.statusText(); assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 1, 1, false)); String changed = cache.statusText(); assertNotSame(initial, changed); assertTrue(changed.contains("Signals 1/1")); assertTrue(changed.contains("Volunteer respawning")); assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 1, 1, false)); assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.RU), 1, 1, 1, false)); assertTrue(cache.statusText().contains("Сигналы 1/1")); assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.RU), 1, 1, 1, false)); } }