package net.zomis.cardshifter.ecs; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import com.cardshifter.modapi.base.ECSGame; import com.cardshifter.modapi.base.Entity; import com.cardshifter.modapi.phase.Phase; import com.cardshifter.modapi.phase.PhaseController; public class PhaseControllerTest { private ECSGame game; private PhaseController controller; private Entity owner; @Before public void before() { game = new ECSGame(); controller = new PhaseController(); owner = game.newEntity(); owner.addComponent(controller); } @Test public void insertTemporaryAfterEnd() { controller.addPhase(new Phase(owner, "a")); controller.addPhase(new Phase(owner, "b")); assertTrue(controller.insertTemporaryPhaseAfter(new Phase(owner, "c"), phase -> phase.getName().equals("b"))); assertEquals("a", controller.getCurrentPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("a", controller.nextPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("a", controller.nextPhase().getName()); } @Test public void insertTemporaryAfter() { controller.addPhase(new Phase(owner, "a")); controller.addPhase(new Phase(owner, "b")); controller.addPhase(new Phase(owner, "c")); controller.addPhase(new Phase(owner, "e")); assertTrue(controller.insertTemporaryPhaseAfter(new Phase(owner, "d"), phase -> phase.getName().equals("c"))); assertEquals("a", controller.getCurrentPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("d", controller.nextPhase().getName()); assertEquals("e", controller.nextPhase().getName()); assertEquals("a", controller.nextPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("e", controller.nextPhase().getName()); } @Test public void insertTemporaryBefore() { controller.addPhase(new Phase(owner, "a")); controller.addPhase(new Phase(owner, "b")); controller.addPhase(new Phase(owner, "c")); controller.addPhase(new Phase(owner, "e")); assertTrue(controller.insertTemporaryPhaseBefore(new Phase(owner, "d"), phase -> phase.getName().equals("e"))); assertEquals("a", controller.getCurrentPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("d", controller.nextPhase().getName()); assertEquals("e", controller.nextPhase().getName()); assertEquals("a", controller.nextPhase().getName()); assertEquals("b", controller.nextPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("e", controller.nextPhase().getName()); } @Test public void insertTemporary() { controller.addPhase(new Phase(owner, "a")); controller.addPhase(new Phase(owner, "b")); assertEquals("a", controller.getCurrentPhase().getName()); assertEquals("b", controller.nextPhase().getName()); controller.insertTemporaryPhaseNext(new Phase(owner, "c")); assertEquals("b", controller.getCurrentPhase().getName()); assertEquals("c", controller.nextPhase().getName()); assertEquals("a", controller.nextPhase().getName()); assertEquals("b", controller.nextPhase().getName()); } @Test public void addGetAdd() { controller.addPhase(new Phase(owner, "a")); assertEquals("a", controller.getCurrentPhase().getName()); controller.addPhase(new Phase(owner, "b")); assertEquals("a", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("b", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("a", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("b", controller.getCurrentPhase().getName()); } @Test public void autoAdd() { controller.addPhase(new Phase(owner, "a")); controller.addPhase(new Phase(owner, "b")); assertEquals("a", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("b", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("a", controller.getCurrentPhase().getName()); controller.nextPhase(); assertEquals("b", controller.getCurrentPhase().getName()); } }