Legger til en Direction enum og tester

This commit is contained in:
Kristian Knarvik 2020-02-17 21:12:04 +01:00
parent 827c8e0aed
commit b31c52edd1
2 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,47 @@
package inf112.fiasko.roborally.abstractions;
/**
* This enum represents all possible directions for an element on the board
*/
public enum Direction {
NORTH (1),
NORTH_EAST (2),
EAST (3),
SOUTH_EAST (4),
SOUTH (5),
SOUTH_WEST (6),
WEST (7),
NORTH_WEST (8);
private final int directionID;
/**
* Constructor to let a direction to be represented by a numerical identifier
* @param directionID <p>The numerical identifier assigned to the direction</p>
*/
Direction(int directionID) {
this.directionID = directionID;
}
/**
* Gets the numerical identifier used for alternate identification of a direction
* @return <p>The numerical id of the direction</p>
*/
public int getDirectionID() {
return this.directionID;
}
/**
* Gets a direction from its numerical id
* @param directionID <p>The numerical representation of a direction</p>
* @return <p>The enum value representing the direction, or null if the id is invalid</p>
*/
public static Direction getDirectionFromID(int directionID) {
for (Direction direction : Direction.values()) {
if (direction.directionID == directionID) {
return direction;
}
}
return null;
}
}

View File

@ -0,0 +1,60 @@
package inf112.fiasko.roborally;
import inf112.fiasko.roborally.abstractions.Direction;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
public class DirectionTest {
@Test
public void getDirectionIdForNorth() {
assertEquals(1, Direction.NORTH.getDirectionID());
}
@Test
public void getDirectionFromNorthID() {
assertEquals(Direction.NORTH, Direction.getDirectionFromID(1));
}
@Test
public void getDirectionIdForSouthWest() {
assertEquals(6, Direction.SOUTH_WEST.getDirectionID());
}
@Test
public void getDirectionFromSouthWestID() {
assertEquals(Direction.SOUTH_WEST, Direction.getDirectionFromID(6));
}
@Test
public void allDirectionsIDConversionToIDAndBack() {
for (Direction direction : Direction.values()) {
assertEquals(direction, Direction.getDirectionFromID(direction.getDirectionID()));
}
}
@Test
public void invalidDirectionIDReturnsNull() {
assertNull(Direction.getDirectionFromID(-1));
}
@Test
public void allDirectionsHaveUniqueId() {
/* This test is also done implicitly by the allDirectionsIDConversionToIDAndBack test, but that test may fail
even if this test passes, so this test is needed for clarity. */
Set<Integer> set = new HashSet<>();
List<Integer> list = new ArrayList<>();
for (Direction direction : Direction.values()) {
set.add(direction.getDirectionID());
list.add(direction.getDirectionID());
}
assertEquals(list.size(), set.size());
}
}