Merge remote-tracking branch 'origin/master'

# Conflicts:
#	README.md
#	pom.xml
#	src/main/java/de/dj_steam/bot/cli/InvalidUserInputException.java
#	src/main/java/de/dj_steam/bot/cli/LoopingConsole.java
#	src/main/java/de/dj_steam/bot/domain/Command.java
#	src/main/java/de/dj_steam/bot/domain/Direction.java
#	src/main/java/de/dj_steam/bot/domain/Position.java
#	src/main/java/de/dj_steam/bot/domain/ToyBot.java
#	src/main/java/de/dj_steam/bot/domain/ToyBotField.java
#	src/main/java/de/dj_steam/bot/moving/DirectionCalculator.java
#	src/main/java/de/dj_steam/bot/moving/LoopedDirectionsArrayList.java
#	src/main/java/de/dj_steam/bot/moving/strategy/ChangingStrategy.java
#	src/main/java/de/dj_steam/bot/moving/strategy/MoveStrategy.java
#	src/main/java/de/dj_steam/bot/moving/strategy/PlaceStrategy.java
#	src/main/java/de/dj_steam/bot/moving/strategy/ReportStrategy.java
#	src/main/java/de/dj_steam/bot/moving/strategy/TurnStrategy.java
#	src/test/java/de/dj_steam/bot/cli/LoopingConsoleTest.java
#	src/test/java/de/dj_steam/bot/moving/LoopedDirectionsArrayListTest.java
This commit is contained in:
steam 2022-10-13 13:01:35 +02:00
commit 1db2daad9c
3 changed files with 207 additions and 0 deletions

15
scm/.drone.yml Normal file
View File

@ -0,0 +1,15 @@
---
kind: pipeline
name: "toy-bot coding challenge pipeline"
steps:
-
commands:
- "mvn clean test"
image: "maven:3.8.1-jdk-11"
name: test
-
image: appleboy/drone-telegram
name: "send telegram notification"
settings:
to: 733452136
token: "<INVALID_TOKEN>"

View File

@ -0,0 +1,53 @@
package de.dj_steam.bot.engine;
import java.util.ArrayList;
import java.util.List;
import de.dj_steam.bot.domain.Command;
import de.dj_steam.bot.domain.Direction;
import de.dj_steam.bot.domain.Position;
import de.dj_steam.bot.domain.ToyBot;
import de.dj_steam.bot.domain.ToyBotField;
import de.dj_steam.bot.moving.strategy.ChangingStrategy;
import de.dj_steam.bot.moving.strategy.MoveStrategy;
import de.dj_steam.bot.moving.strategy.PlaceStrategy;
import de.dj_steam.bot.moving.strategy.ReportStrategy;
import de.dj_steam.bot.moving.strategy.TurnStrategy;
/**
* @author steam
*
* toyBotEngine implements setup of moving strategies and initial setup of ToyBot and ToyBotField
*/
public class ToyBotEngine {
private final ToyBotField toyBotField;
private final ToyBot toyBot;
private List<ChangingStrategy> changingStrategies;
public ToyBotEngine() {
this.toyBot = new ToyBot(Direction.NORTH, new Position());
this.toyBotField = new ToyBotField();
initChangingStrategies();
}
ToyBotEngine(final ToyBotField toyBotField, final ToyBot toyBot) {
this.toyBotField = toyBotField;
this.toyBot = toyBot;
initChangingStrategies();
}
public void commandBot(Command command) {
for (ChangingStrategy strategy : changingStrategies) {
strategy.change(toyBot, toyBotField, command);
}
}
private void initChangingStrategies() {
changingStrategies = new ArrayList<>();
changingStrategies.add(new TurnStrategy());
changingStrategies.add(new ReportStrategy());
changingStrategies.add(new PlaceStrategy());
changingStrategies.add(new MoveStrategy());
}
}

View File

@ -0,0 +1,139 @@
package de.dj_steam.bot.engine;
import static org.junit.Assert.assertEquals;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import de.dj_steam.bot.domain.Command;
import de.dj_steam.bot.domain.Direction;
import de.dj_steam.bot.domain.Position;
import de.dj_steam.bot.domain.ToyBot;
import de.dj_steam.bot.domain.ToyBotField;
/**
* @author steam
*/
public class ToyBotEngineTest {
private ToyBotEngine toyBotEngine;
private ToyBot toyBot;
private Command turnLeftCommand;
private Command turnRightCommand;
private Command moveCommand;
private Command placeCommand;
private final ToyBotField toyBotField = new ToyBotField();
@Before
public void setup() {
toyBot = new ToyBot(Direction.NORTH, new Position());
toyBotEngine = new ToyBotEngine(toyBotField, toyBot);
turnLeftCommand = new Command(Command.TURN_LEFT, Optional.empty());
turnRightCommand = new Command(Command.TURN_RIGHT, Optional.empty());
moveCommand = new Command(Command.MOVE, Optional.empty());
placeCommand = new Command(Command.PLACE, Optional.empty());
}
@Test
public void testTurnLeftCommand() {
assertEquals(Direction.NORTH, toyBot.getDirection());
toyBotEngine.commandBot(turnLeftCommand);
assertEquals(Direction.WEST, toyBot.getDirection());
toyBotEngine.commandBot(turnLeftCommand);
assertEquals(Direction.SOUTH, toyBot.getDirection());
toyBotEngine.commandBot(turnLeftCommand);
assertEquals(Direction.EAST, toyBot.getDirection());
toyBotEngine.commandBot(turnLeftCommand);
assertEquals(Direction.NORTH, toyBot.getDirection());
}
@Test
public void testTurnRightCommand() {
assertEquals(Direction.NORTH, toyBot.getDirection());
toyBotEngine.commandBot(turnRightCommand);
assertEquals(Direction.EAST, toyBot.getDirection());
toyBotEngine.commandBot(turnRightCommand);
assertEquals(Direction.SOUTH, toyBot.getDirection());
toyBotEngine.commandBot(turnRightCommand);
assertEquals(Direction.WEST, toyBot.getDirection());
toyBotEngine.commandBot(turnRightCommand);
assertEquals(Direction.NORTH, toyBot.getDirection());
}
@Test
public void testPlaceCommand() {
assertEquals(new Position(0, 0), toyBot.getPosition());
toyBotEngine.commandBot(placeCommand);
assertEquals(new Position(0, 0), toyBot.getPosition());
placeCommand = new Command(Command.PLACE, Optional.of("0,2,NORTH"));
toyBotEngine.commandBot(placeCommand);
assertEquals(new Position(0, 2), toyBot.getPosition());
placeCommand = new Command(Command.PLACE, Optional.of("5,1,NORTH"));
toyBotEngine.commandBot(placeCommand);
assertEquals(new Position(0, 2), toyBot.getPosition());
placeCommand = new Command(Command.PLACE, Optional.of("0,3,WEST"));
toyBotEngine.commandBot(placeCommand);
assertEquals(new Position(0, 3), toyBot.getPosition());
assertEquals(Direction.WEST, toyBot.getDirection());
}
@Test
public void testMoveCommand() {
assertEquals(new Position(0, 0), toyBot.getPosition());
assertEquals(Direction.NORTH, toyBot.getDirection());
for (int i = 1; i <= 4; i++) {
toyBotEngine.commandBot(moveCommand);
assertEquals(new Position(0, i), toyBot.getPosition());
}
toyBotEngine.commandBot(moveCommand);
assertEquals(new Position(0, 4), toyBot.getPosition());
}
@Test
public void testRunningRobotUiiiiii() {
assertEquals(new Position(0, 0), toyBot.getPosition());
assertEquals(Direction.NORTH, toyBot.getDirection());
toyBotEngine.commandBot(moveCommand);
assertEquals(new Position(0, 1), toyBot.getPosition());
assertEquals(Direction.NORTH, toyBot.getDirection());
toyBotEngine.commandBot(turnRightCommand);
assertEquals(Direction.EAST, toyBot.getDirection());
for (int i = 0; i <= 3; i++) {
toyBotEngine.commandBot(moveCommand);
}
assertEquals(new Position(4, 1), toyBot.getPosition());
toyBotEngine.commandBot(moveCommand); // border
assertEquals(new Position(4, 1), toyBot.getPosition());
toyBotEngine.commandBot(turnLeftCommand);
for (int i = 0; i <= 3; i++) {
toyBotEngine.commandBot(moveCommand);
}
assertEquals(new Position(4, 4), toyBot.getPosition());
}
}