Добавить доступный интерфейс этапа 3

This commit is contained in:
2026-08-18 16:29:08 +03:00
parent dcb16ef4d0
commit 21775542d5
11 changed files with 854 additions and 23 deletions
@@ -0,0 +1,35 @@
package com.projectsacrifice.game;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public final class AccessibilityScreenDescriptionTest {
@Test
public void everyPlayerFacingScreenNamesItsStateAndAvailableActions() {
String levels = AccessibilityScreenDescription.levelSelect(3, 10);
assertTrue(levels.contains("Level select"));
assertTrue(levels.contains("3 of 10 unlocked"));
assertTrue(levels.contains("Settings"));
String settings = AccessibilityScreenDescription.settings(
ControlSettings.defaults(), AccessibilitySettings.defaults());
assertTrue(settings.contains("Settings"));
assertTrue(settings.contains("Text size Standard"));
assertTrue(settings.contains("High contrast Off"));
assertTrue(settings.contains("Back"));
String playing = AccessibilityScreenDescription.playing(
LevelCatalog.get(0), 2, "01:23", "Signals 1/1", false);
assertTrue(playing.contains("Playing level 1"));
assertTrue(playing.contains("2 volunteers"));
assertTrue(playing.contains("Signals 1/1"));
assertTrue(playing.contains("Move left, move right, jump, restart, pause"));
String complete = AccessibilityScreenDescription.complete(
LevelCatalog.get(0), 2, "01:23", true);
assertTrue(complete.contains("Level complete"));
assertTrue(complete.contains("Replay"));
assertTrue(complete.contains("Next level"));
}
}
@@ -0,0 +1,53 @@
package com.projectsacrifice.game;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public final class AccessibilitySettingsTest {
@Test
public void textSizeCyclesBetweenReadablePresetsAndWraps() {
AccessibilitySettings settings = AccessibilitySettings.defaults();
assertEquals("Standard", settings.textSizeLabel());
assertEquals(1f, settings.textScale(), 0f);
settings = settings.nextTextSize();
assertEquals("Large", settings.textSizeLabel());
assertEquals(1.25f, settings.textScale(), 0f);
assertEquals("Standard", settings.nextTextSize().textSizeLabel());
}
@Test
public void highContrastIsExplicitAndReversible() {
AccessibilitySettings settings = AccessibilitySettings.defaults();
assertFalse(settings.highContrastEnabled());
assertEquals("Off", settings.highContrastLabel());
settings = settings.toggleHighContrast();
assertTrue(settings.highContrastEnabled());
assertEquals("On", settings.highContrastLabel());
assertFalse(settings.toggleHighContrast().highContrastEnabled());
}
@Test
public void invalidPersistedPresetFallsBackWithoutChangingContrastChoice() {
AccessibilitySettings settings = AccessibilitySettings.restore(99, true);
assertEquals("Standard", settings.textSizeLabel());
assertTrue(settings.highContrastEnabled());
}
@Test
public void largePresetScalesEveryCanvasTextRequestWithoutMovingLayout() {
AccessibilitySettings large = AccessibilitySettings.defaults().nextTextSize();
assertEquals(30f, large.canvasTextSize(24f), 0f);
assertEquals(80f, large.canvasTextSize(64f), 0f);
assertEquals(24f, AccessibilitySettings.defaults().canvasTextSize(24f), 0f);
}
}
@@ -0,0 +1,19 @@
package com.projectsacrifice.game;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public final class AccessibilityStatusTest {
@Test
public void criticalGameplayStateIsRepresentedByTextNotOnlyColorOrVibration() {
assertEquals(
"Signals 1/2 · Doors 0/1 · Volunteer respawning",
AccessibilityStatus.describe(1, 2, 0, 1, false)
);
assertEquals(
"Signals 0/0 · Doors 0/0 · Volunteer active",
AccessibilityStatus.describe(0, 0, 0, 0, true)
);
}
}