package org.mafagafogigante.dungeon.game;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class DungeonDistributorTest {
private static final Point origin = new Point(0, 0, 0);
private static final MinimumBoundingRectangle boundingRectangle = new MinimumBoundingRectangle(1, 1);
private static final List<Point> list = DungeonDistributor.makeNoEntrancesZonePointList(origin, boundingRectangle);
@Test
public void makeNoEntrancesZonePointListShouldNotIncludeTheStartingPoint() throws Exception {
List<Point> list = DungeonDistributor.makeNoEntrancesZonePointList(origin, new MinimumBoundingRectangle(1, 1));
for (Point point : list) {
Assert.assertThat(point, CoreMatchers.not(origin));
}
}
@Test
public void makeNoEntrancesZonePointListShouldIncludeBorders() throws Exception {
List<Point> expectedList = new ArrayList<>();
expectedList.add(new Point(-1, 1, 0));
expectedList.add(new Point(0, 1, 0));
expectedList.add(new Point(1, 1, 0));
expectedList.add(new Point(-1, 0, 0));
expectedList.add(new Point(1, 0, 0));
expectedList.add(new Point(-1, -1, 0));
expectedList.add(new Point(0, -1, 0));
expectedList.add(new Point(1, -1, 0));
Assert.assertTrue(expectedList.containsAll(list));
Assert.assertTrue(list.containsAll(expectedList));
}
@Test
public void makeNoEntrancesZonePointListShouldWorkWithBiggerDungeons() throws Exception {
final int width = 3;
final int height = 1;
final MinimumBoundingRectangle threeByOneBoundingRectangle = new MinimumBoundingRectangle(width, height);
List<Point> returnedList = DungeonDistributor.makeNoEntrancesZonePointList(origin, threeByOneBoundingRectangle);
List<Point> expectedList = new ArrayList<>();
for (int i = -width; i <= width; i++) {
for (int j = -height; j <= height; j++) {
if (i != origin.getX() || j != origin.getY()) {
expectedList.add(new Point(i, j, 0));
}
}
}
Assert.assertTrue(expectedList.containsAll(returnedList));
Assert.assertTrue(returnedList.containsAll(expectedList));
}
@Test
public void dungeonDistributorShouldThrowExceptionIfTheSameEntranceIsRegisteredTwice() throws Exception {
DungeonDistributor first = new DungeonDistributor();
first.registerDungeonEntrance(new Point(0, 0, 0));
try {
first.registerDungeonEntrance(new Point(0, 0, 0));
Assert.fail("Expected an IllegalStateException from the DungeonDistributor.");
} catch (IllegalStateException expected) {
// Expected.
}
}
@Test
public void dungeonDistributorsEntranceRegistriesShouldBeIndependent() throws Exception {
DungeonDistributor first = new DungeonDistributor();
first.registerDungeonEntrance(new Point(0, 0, 0));
DungeonDistributor second = new DungeonDistributor();
second.registerDungeonEntrance(new Point(0, 0, 0));
}
}