module TK.SpaceTac.UI.Specs { testing("TurnPlanDisplay", test => { let testgame = setupEmptyView(test); function compareDisplay(check: TestContext, plan: TurnPlan, display: TurnPlanDisplay): void { const container = display.container; const children = cfilter(container.list, UIContainer); check.equals(children.length, plan.fleets.length, "fleet containers count"); zip(plan.fleets, children).forEach(([plan, container], idx) => { check.in(`fleet ${idx}`, check => { const children = cfilter(container.list, UIContainer); check.equals(children.length, plan.ships.length, "ship containers count"); zip(plan.ships, children).forEach(([plan, container], idx) => { }); }); }); } test.case("updates from a turn plan", check => { let battle = new Battle(); battle.fleets[0].addShip(); battle.fleets[1].addShip(); battle.fleets[1].addShip(); const display = new TurnPlanDisplay(testgame.view.getLayer("test").getBuilder()); check.in("initial state", check => { compareDisplay(check, { fleets: [] }, display); }); let planning = new TurnPlanning(battle); display.update(planning.getTurnPlan()); check.in("initial update", check => { compareDisplay(check, planning.getTurnPlan(), display); }); display.update(planning.getTurnPlan()); check.in("no change", check => { // TODO Check that no object was added/removed compareDisplay(check, planning.getTurnPlan(), display); }); battle = new Battle(); battle.fleets[0].addShip(); battle.fleets[1].addShip(); battle.fleets[1].addShip(); display.update(planning.getTurnPlan()); check.in("update whole", check => { compareDisplay(check, planning.getTurnPlan(), display); }); }); }); }