public void PlacesPlayerCorrectlyToLeftOfOther(PlacedPlayer playerToBeToLeftOf, PlacedPlayer playerToPlace,
                                                               int distanceToLeft, Location expectedLocation)
                {
                    IPlacementRule placementRule = new RelativeToPlayerHorizontally(playerToBeToLeftOf, distanceToLeft, RelativeType.Left);

                    playerToPlace = placementRule.Place(playerToPlace);

                    Assert.Equal <Location>(expectedLocation, playerToPlace.location);
                }
                public void PlacesPlayerCorrectlyOutsideOther(PlacedPlayer playerToBeOutside, PlacedPlayer playerToPlace,
                                                              int distanceOutside, Location expectedLocation)
                {
                    IPlacementRule placementRule = new RelativeToPlayerHorizontally(playerToBeOutside, distanceOutside, RelativeType.Outside);

                    playerToPlace = placementRule.Place(playerToPlace);

                    Assert.Equal <Location>(expectedLocation, playerToPlace.location);
                }
                public void PlacingPlayerZeroUnitsToLeftThrowsException()
                {
                    PlacedPlayer playerToBeToLeftOf = new PlacedPlayer();
                    PlacedPlayer playerToPlace      = new PlacedPlayer(3, 3);

                    IPlacementRule     placementRule = new RelativeToPlayerHorizontally(playerToBeToLeftOf, 0, RelativeType.Left);
                    PlacementException ex            = Assert.Throws <PlacementException>(() => playerToPlace = placementRule.Place(playerToPlace));

                    Assert.Equal("Can't place 0 units relative.", ex.Message);
                }
            public void PlacingPlayerNegativeUnitsToRightOfThrowsException()
            {
                PlacedPlayer playerToBeToRightOf = new PlacedPlayer();
                PlacedPlayer playerToPlace       = new PlacedPlayer();

                IPlacementRule     placementRule = new RelativeToPlayerHorizontally(playerToBeToRightOf, -7, RelativeType.Right);
                PlacementException ex            = Assert.Throws <PlacementException>(() => playerToPlace = placementRule.Place(playerToPlace));

                Assert.Equal("Can't place player negative distance relative.", ex.Message);
            }
                public void PlacingPlayerNegativeUnitsOutsideThrowsExceptionWithProperMessage()
                {
                    PlacedPlayer playerToBeOutside = new PlacedPlayer();
                    PlacedPlayer playerToPlace     = new PlacedPlayer(3, 3);

                    IPlacementRule     placementRule = new RelativeToPlayerHorizontally(playerToBeOutside, -4, RelativeType.Outside);
                    PlacementException ex            = Assert.Throws <PlacementException>(() => playerToPlace = placementRule.Place(playerToPlace));

                    Assert.Equal("Can't place player negative distance relative.", ex.Message);
                }
                public void PlacingPlayerOutsidePlayerInMiddleThrowsExceptionWithProperMessage()
                {
                    PlacedPlayer playerToBeOutside = new PlacedPlayer();
                    PlacedPlayer playerToPlace     = new PlacedPlayer(3, 3);

                    IPlacementRule     placementRule = new RelativeToPlayerHorizontally(playerToBeOutside, 1, RelativeType.Outside);
                    PlacementException ex            = Assert.Throws <PlacementException>(() => playerToPlace = placementRule.Place(playerToPlace));

                    Assert.Equal("Can't place player inside/outside another player who is in center of formation.", ex.Message);
                }
            public void PlacingPlayerZeroUnitsInsideThrowsExceptionWithProperMessage()
            {
                PlacedPlayer playerToBeInside = new PlacedPlayer();
                PlacedPlayer playerToPlace    = new PlacedPlayer(3, 3);

                IPlacementRule     placementRule = new RelativeToPlayerHorizontally(playerToBeInside, 0, RelativeType.Inside);
                PlacementException ex            = Assert.Throws <PlacementException>(() => playerToPlace = placementRule.Place(playerToPlace));

                Assert.Equal("Can't place 0 units relative.", ex.Message);
            }