private static MementoNode NodeFromElement(GameMemento previous, XElement element) { var type = element.Attribute("type").Value; IUpdateAction action; switch (type) { case MoveBallToken: { var(src, dst) = MoveActionParamsFromElement(element.Element(MoveParamsElement)); action = MoveBallAction.New(src, dst); break; } case MovePieceToken: { var(src, dst) = MoveActionParamsFromElement(element.Element(MoveParamsElement)); action = MovePieceAction.New(src, dst); break; } case PassToken: action = new PassAction(); break; default: throw new ArgumentOutOfRangeException(); } return(previous.Update(action)); }
private static void AssertMovePieceSucceeded(GameState before, GameState after, MovePieceAction action) { CollectionAssert.DoesNotContain(after.PositionsForPlayer(before.CurrentPlayer), action.Src); CollectionAssert.Contains(after.PositionsForPlayer(before.CurrentPlayer), action.Dst); AssertWhetherPlayerHasChanged(before, after); }