package com.projectsacrifice.game; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.junit.Test; import java.util.HashSet; import java.util.List; import java.util.Set; public final class FoundationsAdvancedContentTest { @Test public void secondFoundationsWaveMatchesMatrixAndPreservesRecoveryContracts() { List levels = LevelCatalog.all(); assertEquals(26, levels.size()); LevelDefinition remote = levels.get(22); assertIdentity(remote, 23, "foundations.remote-volunteer", "Remote Volunteer", 1, 50); assertTrue(remote.containsMechanic(LevelDefinition.HazardType.SAW)); assertTrue(remote.containsMechanic(LevelDefinition.SwitchType.PRESSURE)); assertFalse(remote.doors.isEmpty()); LevelDefinition frozen = levels.get(23); assertIdentity(frozen, 24, "foundations.frozen-step", "Frozen Step", 1, 48); assertTrue(frozen.containsMechanic(LevelDefinition.HazardType.FREEZER)); assertTrue(frozen.goal.y < 700f); LevelDefinition live = levels.get(24); assertIdentity(live, 25, "foundations.living-wire", "Living Wire", 1, 52); assertTrue(live.containsMechanic(LevelDefinition.HazardType.ELECTRIC)); assertFalse(live.doors.isEmpty()); LevelDefinition timed = levels.get(25); assertIdentity(timed, 26, "foundations.borrowed-time", "Second Hand", 0, 55); assertTrue(timed.containsMechanic(LevelDefinition.SwitchType.TIMED)); assertTrue(timed.containsMechanic(LevelDefinition.HazardType.PIT)); assertTrue(timed.hasMovingPlatform()); assertFalse(timed.doors.isEmpty()); assertEquals(2, timed.switches.size()); Set signals = new HashSet<>(); for (LevelDefinition.Switch item : timed.switches) signals.add(item.signalId); assertEquals(Set.of(timed.platforms.get(3).controlId), signals); } private static void assertIdentity(LevelDefinition level, int number, String id, String title, int targetDeaths, int targetSeconds) { assertEquals(number, level.number); assertEquals(id, level.levelId); assertEquals("foundations", level.worldId); assertEquals(title, level.title); assertEquals(targetDeaths, level.targetDeaths); assertEquals(targetSeconds, level.targetSeconds); assertNotNull(level.collectible); } }