public void MultipleRemoveToken()
        {
            //place the grove
            var grove = new Grove();
            _control.PlaceTile(grove, _control.GetPlacableSpaces(grove).First());

            //place a target tile to remove tokens from
            Tile tile = new MockTile();

            _control.PlaceTile(tile, _control.GetPlacableSpaces(tile).First());

            //start grove
            grove.Transition(null);
            try
            {
                grove.Transition(tile);
                grove.Transition(tile);
                Assert.Fail("Expected an Exception");
            }
            catch (ArgumentException) {}
        }
        public void CanOnlyRemoveYourTokens()
        {
            //place the grove
            var grove = new Grove();
            _control.PlaceTile(grove, _control.GetPlacableSpaces(grove).First());

            //place a target tile to remove tokens from
            Tile tile = new MockTile();

            _control.PlaceTile(tile, _control.GetPlacableSpaces(tile).First());

            //start grove
            Selection actual = grove.Transition(null);
            Assert.AreEqual(Selection.TileFromBoard, actual);

            _control.ActivePlayer = _control.Players.Where(player => player != _control.ActivePlayer).First();
            try
            {
                grove.Transition(tile);
                Assert.Fail("Expected an Exception");
            }
            catch (ArgumentException) {}
        }
        public void TileMustHaveToken()
        {
            //place the grove
            var grove = new Grove();
            _control.PlaceTile(grove, _control.GetPlacableSpaces(grove).First());

            //start grove
            Selection actual = grove.Transition(null);
            Assert.AreEqual(Selection.TileFromBoard, actual);

            _control.ActivePlayer = _control.Players.Where(player => player != _control.ActivePlayer).First();
            try
            {
                grove.Transition(_control.Board.Tiles.First());
                Assert.Fail("Expected an Exception");
            }
            catch (ArgumentException) {}
        }
        public void TransitionTest()
        {
            //place the grove
            var grove = new Grove();
            _control.PlaceTile(grove, _control.GetPlacableSpaces(grove).First());

            //place a target tile to remove tokens from
            Tile[] tiles = {new MockTile(), new MockTile(), new MockTile()};

            foreach (Tile tile in tiles)
                _control.PlaceTile(tile, _control.GetPlacableSpaces(tile).First());

            Selection actual = grove.Transition(null);
            foreach (Tile tile in tiles)
            {
                Assert.AreEqual(Selection.TileFromBoard, actual);
                actual = grove.Transition(tile);
            }
            Assert.AreEqual(Selection.None, actual);
        }