/// module TK.SpaceTac.UI.Specs { testing("PlanDisplay", test => { let testgame = setupEmptyView(test); function compareDisplay(check: TestContext, plan: BattlePlan, display: PlanDisplay): 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 battle plan", check => { let battle = new Battle(); battle.fleets[0].addShip(); battle.fleets[1].addShip(); battle.fleets[1].addShip(); const display = new PlanDisplay(testgame.view.getLayer("test").getBuilder()); check.in("initial state", check => { compareDisplay(check, { fleets: [] }, display); }); let planning = new BattlePlanning(battle); display.update(planning.getBattlePlan()); check.in("initial update", check => { compareDisplay(check, planning.getBattlePlan(), display); }); display.update(planning.getBattlePlan()); check.in("no change", check => { // TODO Check that no object was added/removed compareDisplay(check, planning.getBattlePlan(), display); }); battle = new Battle(); battle.fleets[0].addShip(); battle.fleets[1].addShip(); battle.fleets[1].addShip(); display.update(planning.getBattlePlan()); check.in("update whole", check => { compareDisplay(check, planning.getBattlePlan(), display); }); }); }); }