diff --git a/mars-station/pom.xml b/mars-station/pom.xml index 21d8c06..95257ba 100644 --- a/mars-station/pom.xml +++ b/mars-station/pom.xml @@ -11,6 +11,13 @@ mars-station 2.0 + + + cat.hack3.codingtests + rover-api + 1.0 + + 17 diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java index 2f8b991..0f9e612 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java @@ -1,16 +1,17 @@ package cat.hack3.codingtests.marsrover; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; -import cat.hack3.codingtests.marsrover.cartography.MarsMap; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; -public class MarsRover implements RotableRiderRover{ +public class MarsRover implements RotableRiderRover { - private final MarsMap marsMap; + private final PlanetMap marsMap; private final RoverActionReporter roverActionReporter; private Direction currentDirection; - public MarsRover(MarsMap marsMap, Direction startingDirection) { + public MarsRover(PlanetMap marsMap, Direction startingDirection) { this.marsMap = marsMap; currentDirection = startingDirection; roverActionReporter = new RoverActionReporter(); diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java new file mode 100644 index 0000000..c342a48 --- /dev/null +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java @@ -0,0 +1,13 @@ +package cat.hack3.codingtests.marsrover; + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.RoverDeployer; +import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; + +public class MarsRoverDeployer implements RoverDeployer { + @Override + public RotableRiderRover deploy(PlanetMap map, Direction startingDirection) { + return new MarsRover(map, startingDirection); + } +} diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java index 26efc68..e1b0b68 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java @@ -1,6 +1,6 @@ package cat.hack3.codingtests.marsrover; -import cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java similarity index 96% rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java rename to mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java index 2e7557d..474055c 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.gps; import cat.hack3.codingtests.marsrover.cartography.Coordinates.Latitude; import cat.hack3.codingtests.marsrover.cartography.Coordinates.Longitude; diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java similarity index 89% rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java rename to mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java index bd3b799..beaab12 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java @@ -1,7 +1,10 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.gps; +import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Coordinates.Latitude; import cat.hack3.codingtests.marsrover.cartography.Coordinates.Longitude; +import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; import java.util.List; @@ -14,7 +17,7 @@ import java.util.List; * 2 2-1 2-2 2-3 * 3 3-1 3-2 3-3 */ -public class MarsMap { +public class MarsMap implements PlanetMap { private static final int FIRST_POSITION_IN_MAP = 1; private static final int INCREMENT_UNIT = 1; @@ -31,6 +34,7 @@ public class MarsMap { positionResolver = new MapIncrementalPositionResolver(FIRST_POSITION_IN_MAP, INCREMENT_UNIT, height, width); } + @Override public Coordinates getNextPositionTowards(Direction direction) { return switch (direction) { case NORTH -> getDecrementLatitude(); @@ -64,14 +68,17 @@ public class MarsMap { return currentPosition.withUpdated(Longitude.of(newLongitude)); } + @Override public synchronized void updateLocation(Coordinates newPosition) { currentPosition = newPosition; } + @Override public boolean willCollideWithObstacle(Coordinates newCoordinates) { return obstaclesLocalizations.contains(newCoordinates); } + @Override public Coordinates getCurrentPosition() { return currentPosition; } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java new file mode 100644 index 0000000..62ff59e --- /dev/null +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java @@ -0,0 +1,18 @@ +package cat.hack3.codingtests.marsrover.gps; + +import cat.hack3.codingtests.marsrover.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer; + +import java.util.List; + +public class MarsMapInitializer implements PlanetMapInitializer { + @Override + public PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations) { + return new MarsMap(height, width, startingCoordinates, obstaclesLocalizations); + } + @Override + public PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates) { + return new MarsMap(height, width, startingCoordinates); + } +} diff --git a/mars-station/src/main/java/module-info.java b/mars-station/src/main/java/module-info.java new file mode 100644 index 0000000..9607833 --- /dev/null +++ b/mars-station/src/main/java/module-info.java @@ -0,0 +1,10 @@ +module mars.station { + requires rover.api; + requires java.logging; + + provides cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer + with cat.hack3.codingtests.marsrover.gps.MarsMapInitializer; + + provides cat.hack3.codingtests.marsrover.api.RoverDeployer + with cat.hack3.codingtests.marsrover.MarsRoverDeployer; +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index e924a80..ef30bba 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,9 @@ mars-station user-interface-console rover-commands + rover-api + station-plugin + tests-suite diff --git a/rover-api/pom.xml b/rover-api/pom.xml new file mode 100644 index 0000000..120ff4c --- /dev/null +++ b/rover-api/pom.xml @@ -0,0 +1,20 @@ + + + + mars-rover + cat.hack3.codingtests + 10.0 + + 4.0.0 + + rover-api + 1.0 + + + 17 + 17 + + + \ No newline at end of file diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java similarity index 89% rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java index c4a899a..eaa4816 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.api; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java new file mode 100644 index 0000000..2513cc8 --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java @@ -0,0 +1,8 @@ +package cat.hack3.codingtests.marsrover.api; + +import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; + +public interface RoverDeployer { + RotableRiderRover deploy(PlanetMap map, Direction startingDirection); +} diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java similarity index 82% rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java index 3a99576..7b62e6e 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java @@ -14,8 +14,8 @@ public record Coordinates(Latitude latitude, Longitude longitude) { return Coordinates.of(latitude.pointer, newLongitude.pointer); } - record Latitude(long pointer) { - static Latitude of(long pointer) { + public record Latitude(long pointer) { + public static Latitude of(long pointer) { return new Latitude(pointer); } @Override @@ -23,8 +23,8 @@ public record Coordinates(Latitude latitude, Longitude longitude) { return String.valueOf(pointer); } } - record Longitude(long pointer) { - static Longitude of(long pointer) { + public record Longitude(long pointer) { + public static Longitude of(long pointer) { return new Longitude(pointer); } @Override diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java similarity index 100% rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java new file mode 100644 index 0000000..75a6a5b --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java @@ -0,0 +1,11 @@ +package cat.hack3.codingtests.marsrover.cartography; + +public interface PlanetMap { + Coordinates getNextPositionTowards(Direction direction); + + void updateLocation(Coordinates newPosition); + + boolean willCollideWithObstacle(Coordinates newCoordinates); + + Coordinates getCurrentPosition(); +} diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java new file mode 100644 index 0000000..3b06ab4 --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java @@ -0,0 +1,8 @@ +package cat.hack3.codingtests.marsrover.cartography; + +import java.util.List; + +public interface PlanetMapInitializer { + PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations); + PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates); +} diff --git a/rover-api/src/main/java/module-info.java b/rover-api/src/main/java/module-info.java new file mode 100644 index 0000000..1248447 --- /dev/null +++ b/rover-api/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module rover.api { + exports cat.hack3.codingtests.marsrover.api; + exports cat.hack3.codingtests.marsrover.cartography; +} \ No newline at end of file diff --git a/rover-commands/pom.xml b/rover-commands/pom.xml index 04962eb..45f943a 100644 --- a/rover-commands/pom.xml +++ b/rover-commands/pom.xml @@ -12,17 +12,17 @@ rover-commands 2.0 + + + cat.hack3.codingtests + rover-api + 1.0 + + + 17 17 - - - cat.hack3.codingtests - mars-station - 2.0 - - - \ No newline at end of file diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java deleted file mode 100644 index 2f2d11b..0000000 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package cat.hack3.codingtests.marsrover; - -class MoveForwardCommand implements RoverCommand { - private final RotableRiderRover rover; - - public MoveForwardCommand(RotableRiderRover rover) { - this.rover = rover; - } - - public void execute() { - rover.moveTowards(rover.getCurrentDirection()); - } -} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java deleted file mode 100644 index 065082d..0000000 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package cat.hack3.codingtests.marsrover; - -import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.LEFT; - -class TurnLeftCommand implements RoverCommand { - private final RotableRiderRover rover; - - public TurnLeftCommand(RotableRiderRover rover) { - this.rover = rover; - } - - @Override - public void execute() { - rover.rotateTowards(LEFT); - } -} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java deleted file mode 100644 index a4273e6..0000000 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package cat.hack3.codingtests.marsrover; - -import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.RIGHT; - -class TurnRightCommand implements RoverCommand { - private final RotableRiderRover rover; - - public TurnRightCommand(RotableRiderRover rover) { - this.rover = rover; - } - - @Override - public void execute() { - rover.rotateTowards(RIGHT); - } -} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java similarity index 51% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java index de9ac8c..9e822e5 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java @@ -1,6 +1,10 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.commands; -class MoveBackwardsCommand implements RoverCommand { + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; + +public class MoveBackwardsCommand implements RoverCommand { private final RotableRiderRover rover; public MoveBackwardsCommand(RotableRiderRover rover) { diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java new file mode 100644 index 0000000..1233488 --- /dev/null +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java @@ -0,0 +1,17 @@ +package cat.hack3.codingtests.marsrover.commands; + + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; + +public class MoveForwardCommand implements RoverCommand { + private final RotableRiderRover rover; + + public MoveForwardCommand(RotableRiderRover rover) { + this.rover = rover; + } + + public void execute() { + rover.moveTowards(rover.getCurrentDirection()); + } +} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java new file mode 100644 index 0000000..82bc0fa --- /dev/null +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java @@ -0,0 +1,20 @@ +package cat.hack3.codingtests.marsrover.commands; + + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; + +import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.LEFT; + +public class TurnLeftCommand implements RoverCommand { + private final RotableRiderRover rover; + + public TurnLeftCommand(RotableRiderRover rover) { + this.rover = rover; + } + + @Override + public void execute() { + rover.rotateTowards(LEFT); + } +} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java new file mode 100644 index 0000000..7eae632 --- /dev/null +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java @@ -0,0 +1,20 @@ +package cat.hack3.codingtests.marsrover.commands; + + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; + +import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.RIGHT; + +public class TurnRightCommand implements RoverCommand { + private final RotableRiderRover rover; + + public TurnRightCommand(RotableRiderRover rover) { + this.rover = rover; + } + + @Override + public void execute() { + rover.rotateTowards(RIGHT); + } +} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java similarity index 57% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java index 77104cb..e932991 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java @@ -1,4 +1,11 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.commands.api; + + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.commands.MoveBackwardsCommand; +import cat.hack3.codingtests.marsrover.commands.MoveForwardCommand; +import cat.hack3.codingtests.marsrover.commands.TurnLeftCommand; +import cat.hack3.codingtests.marsrover.commands.TurnRightCommand; public class CommandFactory { private final RotableRiderRover rover; diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java similarity index 69% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java index 27e65ce..b571c86 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.commands.api; public interface RoverCommand { enum Type {MOVE_FORWARD, MOVE_BACKWARDS, TURN_LEFT, TURN_RIGHT} diff --git a/rover-commands/src/main/java/module-info.java b/rover-commands/src/main/java/module-info.java new file mode 100644 index 0000000..a8da85a --- /dev/null +++ b/rover-commands/src/main/java/module-info.java @@ -0,0 +1,5 @@ +module rover.commands { + requires rover.api; + + exports cat.hack3.codingtests.marsrover.commands.api; +} \ No newline at end of file diff --git a/station-plugin/pom.xml b/station-plugin/pom.xml new file mode 100644 index 0000000..2dda5a5 --- /dev/null +++ b/station-plugin/pom.xml @@ -0,0 +1,27 @@ + + + + mars-rover + cat.hack3.codingtests + 10.0 + + 4.0.0 + + station-plugin + + + cat.hack3.codingtests + rover-api + 1.0 + compile + + + + + 17 + 17 + + + \ No newline at end of file diff --git a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java new file mode 100644 index 0000000..2083f9f --- /dev/null +++ b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java @@ -0,0 +1,14 @@ +package cat.hack3.codingtests.marsrover.plugin.station; + +import cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer; + +import java.util.ServiceLoader; + +public class PlanetMapInitializerProvider { + public PlanetMapInitializer getNextAvailable() { + return ServiceLoader + .load(PlanetMapInitializer.class) + .findFirst() + .orElseThrow(); + } +} diff --git a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java new file mode 100644 index 0000000..1177874 --- /dev/null +++ b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java @@ -0,0 +1,14 @@ +package cat.hack3.codingtests.marsrover.plugin.station; + +import cat.hack3.codingtests.marsrover.api.RoverDeployer; + +import java.util.ServiceLoader; + +public class RoverDeployerProvider { + public RoverDeployer getNextAvailable() { + return ServiceLoader + .load(RoverDeployer.class) + .findFirst() + .orElseThrow(); + } +} diff --git a/station-plugin/src/main/java/module-info.java b/station-plugin/src/main/java/module-info.java new file mode 100644 index 0000000..79c760b --- /dev/null +++ b/station-plugin/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module station.plugin { + requires rover.api; + + uses cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer; + uses cat.hack3.codingtests.marsrover.api.RoverDeployer; + + exports cat.hack3.codingtests.marsrover.plugin.station; +} \ No newline at end of file diff --git a/tests-suite/pom.xml b/tests-suite/pom.xml new file mode 100644 index 0000000..84b4677 --- /dev/null +++ b/tests-suite/pom.xml @@ -0,0 +1,45 @@ + + + + mars-rover + cat.hack3.codingtests + 10.0 + + 4.0.0 + + tests-suite + + + cat.hack3.codingtests + rover-api + 1.0 + test + + + cat.hack3.codingtests + station-plugin + 10.0 + test + + + cat.hack3.codingtests + rover-commands + 2.0 + test + + + cat.hack3.codingtests + mars-station + 2.0 + test + + + + + 17 + 17 + + + \ No newline at end of file diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java new file mode 100644 index 0000000..fe3e247 --- /dev/null +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java @@ -0,0 +1,63 @@ +package cat.hack3.codingtests.marsrover.test; + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.commands.api.CommandFactory; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.plugin.station.PlanetMapInitializerProvider; +import cat.hack3.codingtests.marsrover.plugin.station.RoverDeployerProvider; + +import java.util.List; + +import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH; +import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*; + +public class CommonTests { + + public static final Direction STARTING_DIRECTION = SOUTH; + + protected RotableRiderRover rover; + protected RoverCommand moveForwardCommand; + protected RoverCommand moveBackwardsCommand; + protected RoverCommand turnLeftCommand; + protected RoverCommand turnRightCommand; + + private PlanetMapInitializerProvider gpsProvider; + private RoverDeployerProvider roverProvider; + + protected void setup() { + gpsProvider = new PlanetMapInitializerProvider(); + roverProvider = new RoverDeployerProvider(); + + int mapWidth = 10; + int mapHeight = 10; + int latitudeStartingPoint = 2; + int longitudeStartingPoint = 3; + var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); + + var marsMap = getMap(mapHeight, mapWidth, startingCoordinates); + rover = getRover(marsMap); + + var commandFactory = new CommandFactory(this.rover); + moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); + moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); + turnLeftCommand = commandFactory.createCommand(TURN_LEFT); + turnRightCommand = commandFactory.createCommand(TURN_RIGHT); + } + + private PlanetMap getMap(int mapHeight, int mapWidth, Coordinates startingCoordinates) { + var planetInitializer = gpsProvider.getNextAvailable(); + return planetInitializer.setupNewMap(mapHeight, mapWidth, startingCoordinates, getObstacles()); + } + + private RotableRiderRover getRover(PlanetMap marsMap) { + var roverDeployer = roverProvider.getNextAvailable(); + return roverDeployer.deploy(marsMap, CommonTests.STARTING_DIRECTION); + } + + protected List getObstacles() { + return List.of(); + } +} diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java similarity index 81% rename from rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java rename to tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java index 53b8398..c45d831 100644 --- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java @@ -1,41 +1,20 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.test; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; -import cat.hack3.codingtests.marsrover.cartography.MarsMap; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.stream.IntStream; -import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*; import static cat.hack3.codingtests.marsrover.cartography.Direction.*; import static org.testng.Assert.assertEquals; -public class MarsRoverTest { - - private MarsRover rover; - - private RoverCommand moveForwardCommand; - private RoverCommand moveBackwardsCommand; - private RoverCommand turnLeftCommand; - private RoverCommand turnRightCommand; +public class MarsRoverTest extends CommonTests { @BeforeMethod public void setUp() { - int mapWidth = 10; - int mapHeight = 10; - int latitudeStartingPoint = 2; - int longitudeStartingPoint = 3; - var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates); - rover = new MarsRover(marsMap, SOUTH); - - var commandFactory = new CommandFactory(rover); - moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); - moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); - turnLeftCommand = commandFactory.createCommand(TURN_LEFT); - turnRightCommand = commandFactory.createCommand(TURN_RIGHT); + setup(); } @Test diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java similarity index 60% rename from rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java rename to tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java index eef547b..7ed9620 100644 --- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java @@ -1,47 +1,20 @@ -package cat.hack3.codingtests.marsrover; +package cat.hack3.codingtests.marsrover.test; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; -import cat.hack3.codingtests.marsrover.cartography.MarsMap; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.List; -import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*; -import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; -public class MarsRoverWithObstaclesTest { - - private MarsRover rover; - - private RoverCommand moveForwardCommand; - private RoverCommand turnLeftCommand; - private RoverCommand turnRightCommand; +public class MarsRoverWithObstaclesTest extends CommonTests { @BeforeMethod public void setUp() { - int mapWidth = 10; - int mapHeight = 10; - int latitudeStartingPoint = 2; - int longitudeStartingPoint = 3; - var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - List obstaclesLocalizations = List.of( - Coordinates.of(3, 3), - Coordinates.of(5, 5), - Coordinates.of(7, 7), - Coordinates.of(9, 9), - Coordinates.of(10, 10) - ); - var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates, obstaclesLocalizations); - rover = new MarsRover(marsMap, SOUTH); - - var commandFactory = new CommandFactory(rover); - moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); - turnLeftCommand = commandFactory.createCommand(TURN_LEFT); - turnRightCommand = commandFactory.createCommand(TURN_RIGHT); + super.setup(); } @Test @@ -74,4 +47,14 @@ public class MarsRoverWithObstaclesTest { assertNotEquals(rover.getCurrentCoordinates(), positionAfterMove); } + @Override + protected List getObstacles() { + return List.of( + Coordinates.of(3, 3), + Coordinates.of(5, 5), + Coordinates.of(7, 7), + Coordinates.of(9, 9), + Coordinates.of(10, 10) + ); + } } diff --git a/tests-suite/src/test/java/module-info.java b/tests-suite/src/test/java/module-info.java new file mode 100644 index 0000000..1ac0bf0 --- /dev/null +++ b/tests-suite/src/test/java/module-info.java @@ -0,0 +1,10 @@ +module tests.suite { + requires rover.api; + requires station.plugin; + requires mars.station; + requires rover.commands; + + requires org.testng; + + exports cat.hack3.codingtests.marsrover.test; +} \ No newline at end of file diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java index ba40194..0a6f490 100644 --- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java +++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java @@ -1,12 +1,12 @@ package cat.hack3.codingtests.marsrover.ui.console; -import cat.hack3.codingtests.marsrover.CommandFactory; import cat.hack3.codingtests.marsrover.RotableRiderRover; -import cat.hack3.codingtests.marsrover.RoverCommand; +import cat.hack3.codingtests.marsrover.commands.api.CommandFactory; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; import java.util.Scanner; -import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*; +import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*; import static cat.hack3.codingtests.marsrover.ui.console.UICommons.isNotExitSignal; import static cat.hack3.codingtests.marsrover.ui.console.UICommons.output; diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java index cbc8ac1..b2b8c85 100644 --- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java +++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java @@ -4,7 +4,7 @@ import cat.hack3.codingtests.marsrover.MarsRover; import cat.hack3.codingtests.marsrover.RotableRiderRover; import cat.hack3.codingtests.marsrover.cartography.Coordinates; import cat.hack3.codingtests.marsrover.cartography.Direction; -import cat.hack3.codingtests.marsrover.cartography.MarsMap; +import cat.hack3.codingtests.marsrover.gps.MarsMap; import java.util.InputMismatchException; import java.util.List;