Compare commits

..
10 Commits
Author SHA1 Message Date
romanschenk37 a67a96d19d fix in CarTest.java 2022-03-10 14:46:51 +01:00
Leonardo Brandenberger 19b227c59f merged cartest branch into car branch 2022-03-10 14:18:33 +01:00
Leonardo Brandenberger cbc915bf50 Merge remote-tracking branch 'origin/CarTest' into car 2022-03-10 14:04:48 +01:00
Leonardo Brandenberger b6f69d3c1c created Branch car
finished all TODOS in car and created needed method getID and getVelocity.
2022-03-10 13:31:51 +01:00
romanschenk37 31a24120eb added checks for method getVelocity in Test Movement in CarTest.java 2022-03-07 20:44:05 +01:00
romanschenk37 dea430e418 Added Test for Method getID in CarTest.java 2022-03-07 17:43:32 +01:00
romanschenk37 40cd4f7b72 Added Javadoc and comments in CarTest.java 2022-03-06 18:57:01 +01:00
romanschenk37 8086111772 Fix in CarTest.java
@Test setPosition
2022-03-06 18:13:27 +01:00
romanschenk37 972f011a08 changes in Tests car.CarTest
setPosition, movement, crash, moveStrategy
2022-03-06 17:06:42 +01:00
romanschenk37 381ea44a9a Created CarTest.java
added Tests setPosition, nextPosition
2022-03-05 16:39:08 +01:00
4 changed files with 233 additions and 25 deletions
+40 -13
View File
@@ -3,6 +3,8 @@ package ch.zhaw.pm2.racetrack;
import ch.zhaw.pm2.racetrack.given.CarSpecification; import ch.zhaw.pm2.racetrack.given.CarSpecification;
import ch.zhaw.pm2.racetrack.strategy.MoveStrategy; import ch.zhaw.pm2.racetrack.strategy.MoveStrategy;
import java.util.Vector;
/** /**
* Class representing a car on the racetrack. * Class representing a car on the racetrack.
* Uses {@link PositionVector} to store current position on the track grid and current velocity vector. * Uses {@link PositionVector} to store current position on the track grid and current velocity vector.
@@ -48,17 +50,39 @@ public class Car implements CarSpecification {
setPosition(position); setPosition(position);
} }
/**
* Returns the id of the car.
*
* @return id of the car.
*/
public char getID(){
return id;
}
/**
* Returns the current velocity of the car as a PositionVector.
*
* @return velocity current velocity of the car.
*/
public PositionVector getVelocity(){
return velocity;
}
/** /**
* Set this Car position directly, regardless of current position and velocity. * Set this Car position directly, regardless of current position and velocity.
* This should only be used by the game controller in rare cases to set the crash or winning position. * This should only be used by the game controller in rare cases to set the crash or winning position.
* The next position is normaly automatically calculated and set in the {@link #move()} method. * The next position is normaly automatically calculated and set in the {@link #move()} method.
* *
* @param position The new position to set the car directly to. * @param position The new position to set the car directly to.
* @throws IllegalArgumentException if invalid PositionVector is given.
*/ */
@Override @Override
public void setPosition(final PositionVector position) { public void setPosition(final PositionVector position) {
// TODO: implementation if (position.getX() < 0 || position.getY() < 0) {
throw new UnsupportedOperationException(); throw new IllegalArgumentException();
}
else {
this.position = position;
}
} }
/** /**
@@ -69,8 +93,7 @@ public class Car implements CarSpecification {
*/ */
@Override @Override
public PositionVector nextPosition() { public PositionVector nextPosition() {
// TODO: implementation return new PositionVector(position.getX() + velocity.getX(),position.getY() + velocity.getY());
throw new UnsupportedOperationException();
} }
/** /**
@@ -80,11 +103,18 @@ public class Car implements CarSpecification {
* Changes only velocity, not position. * Changes only velocity, not position.
* *
* @param acceleration A Direction vector containing the amounts to add to the velocity in x and y dimension * @param acceleration A Direction vector containing the amounts to add to the velocity in x and y dimension
* @throws IllegalArgumentException if PositionVector is not in allowed area.
*/ */
@Override @Override
public void accelerate(PositionVector.Direction acceleration) { public void accelerate(PositionVector.Direction acceleration) {
// TODO: implementation if(acceleration.vector.getX() < -1 || acceleration.vector.getX() > 1||
throw new UnsupportedOperationException(); acceleration.vector.getY() < -1 || acceleration.vector.getY() > 1) {
throw new IllegalArgumentException();
}
else {
velocity = new PositionVector(velocity.getX() + acceleration.vector.getX(),
velocity.getY() + acceleration.vector.getY());
}
} }
/** /**
@@ -92,8 +122,7 @@ public class Car implements CarSpecification {
*/ */
@Override @Override
public void move() { public void move() {
// TODO: implementation position = new PositionVector(position.getX() + velocity.getX(), position.getY() + velocity.getY());
throw new UnsupportedOperationException();
} }
/** /**
@@ -101,8 +130,7 @@ public class Car implements CarSpecification {
*/ */
@Override @Override
public void crash() { public void crash() {
// TODO: implementation crashed = true;
throw new UnsupportedOperationException();
} }
/** /**
@@ -112,13 +140,12 @@ public class Car implements CarSpecification {
*/ */
@Override @Override
public boolean isCrashed() { public boolean isCrashed() {
// TODO: implementation return crashed;
throw new UnsupportedOperationException();
} }
/** /**
* Set move strategy * Set move strategy
* @param moveStrategy * @param moveStrategy Strategy to be implemented
*/ */
public void setMoveStrategy(MoveStrategy moveStrategy) { public void setMoveStrategy(MoveStrategy moveStrategy) {
this.moveStrategy = moveStrategy; this.moveStrategy = moveStrategy;
@@ -1,10 +1,5 @@
package ch.zhaw.pm2.racetrack; package ch.zhaw.pm2.racetrack;
/**
* Class for Exception when invalid Fileformat is used.
*/
public class InvalidFileFormatException extends Exception { public class InvalidFileFormatException extends Exception {
public InvalidFileFormatException(String errorMessage) { // TODO: implementation
super(errorMessage);
}
} }
@@ -1,10 +1,5 @@
package ch.zhaw.pm2.racetrack; package ch.zhaw.pm2.racetrack;
/**
* Class for Exception when invalid track format is used.
*/
public class InvalidTrackFormatException extends Exception { public class InvalidTrackFormatException extends Exception {
public InvalidTrackFormatException(String errorMessage) { // TODO: implementation
super(errorMessage);
}
} }
@@ -0,0 +1,191 @@
package ch.zhaw.pm2.racetrack;
import ch.zhaw.pm2.racetrack.strategy.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
/**
* Tests for Class Car
*/
class CarTest {
Car car;
// Default coordinates for tests
int DEFAULT_X = 10;
int DEFAULT_Y = 10;
char DEFAULT_ID = 'f';
/**
* Create a new Car Object and set Position to a defined Default Position
*/
@BeforeEach
void setUp() {
car = new Car(DEFAULT_ID, new PositionVector(DEFAULT_X, DEFAULT_Y));
}
@Test
void getID() {
assertEquals(DEFAULT_ID, car.getID());
}
/**
* Method to check nextPosition with coordinates as int
*
* @param x the expected value for x coordinate
* @param y the expected value for y coordinate
*/
void checkNextPosition(int x, int y) {
assertEquals(new PositionVector(x, y), car.nextPosition());
}
/**
* - checks if the position of the car can be set and saved correctly with valid positions.
* - checks if an exception is throwed and position keeps unchanged if invalid coordinates are entered.
*/
@Test
void setPosition() {
checkNextPosition(DEFAULT_X, DEFAULT_Y);
// List of valid Positions
List<PositionVector> validPositions = new ArrayList<>();
validPositions.add(new PositionVector(20, 20));
validPositions.add(new PositionVector(0, 0));
validPositions.add(new PositionVector(20, 0));
validPositions.add(new PositionVector(0, 20));
for (PositionVector positionVector : validPositions) {
car.setPosition(positionVector);
assertEquals(positionVector, car.nextPosition());
}
// List of invalid positions.
List<PositionVector> invalidPositions = new ArrayList<>();
invalidPositions.add(new PositionVector(0, -20));
invalidPositions.add(new PositionVector(-20, 0));
invalidPositions.add(new PositionVector(-20, -20));
for (PositionVector positionVector : invalidPositions) {
boolean exception = false;
setUp();
try {
car.setPosition(positionVector);
} catch (IllegalArgumentException e) {
exception = true;
}
assertTrue(exception);
// position should keep unchanged
checkNextPosition(DEFAULT_X, DEFAULT_Y);
}
}
void checkVelocity(int x, int y) {
assertEquals(new PositionVector(x, y), car.getVelocity());
}
/**
* Checks if the methods accelerate, move and getVelocity are working correctly with acceleration in all directions.
* Checks also if velocity is calculated correctly if method accelerate is called a second time.
*/
@Test
void movement() {
// add all possible directions in a List
List<PositionVector.Direction> directions = Arrays.asList(PositionVector.Direction.values());
//position shouldn't be changed because velocity should be 0.
car.move();
checkNextPosition(DEFAULT_X, DEFAULT_Y);
for (PositionVector.Direction direction1 : directions) {
for (PositionVector.Direction direction2 : directions) {
//create a new instance of Car with default coordinates and velocity 0.
setUp();
//variables to save the actual expected result of method nextPosition
int expectedNextPosX = DEFAULT_X;
int expectedNextPosY = DEFAULT_Y;
//variables to save the acutal expected result of method getVelocity
int expectedVelocityX = 0;
int expectedVelocityY = 0;
car.accelerate(direction1);
expectedVelocityX += direction1.vector.getX();
expectedVelocityY += direction1.vector.getY();
expectedNextPosX += direction1.vector.getX();
expectedNextPosY += direction1.vector.getY();
checkVelocity(expectedVelocityX, expectedVelocityY);
checkNextPosition(expectedNextPosX, expectedNextPosY);
car.move();
expectedNextPosX += direction1.vector.getX();
expectedNextPosY += direction1.vector.getY();
checkVelocity(expectedVelocityX, expectedVelocityY);
checkNextPosition(expectedNextPosX, expectedNextPosY);
car.accelerate(direction2);
expectedVelocityX += direction2.vector.getX();
expectedVelocityY += direction2.vector.getY();
expectedNextPosX += direction2.vector.getX();
expectedNextPosY += direction2.vector.getY();
checkVelocity(expectedVelocityX, expectedVelocityY);
checkNextPosition(expectedNextPosX, expectedNextPosY);
car.move();
checkVelocity(expectedVelocityX, expectedVelocityY);
expectedNextPosX += (direction1.vector.getX() + direction2.vector.getX());
expectedNextPosY += (direction1.vector.getY() + direction2.vector.getY());
checkNextPosition(expectedNextPosX, expectedNextPosY);
}
}
}
/**
* test for methods crash and isCrashed. checks if state crashed is set and returned correctly.
*/
@Test
void crash() {
assertFalse(car.isCrashed());
car.crash();
assertTrue(car.isCrashed());
}
/**
* test for methods setMoveStrategy. Checks if the MoveStrategy Object is saved and returned correctly
* with all Types of MoveStrategy.
*/
@Test
void MoveStrategy() {
MoveStrategy moveStrategy;
moveStrategy = new DoNotMoveStrategy();
car.setMoveStrategy(moveStrategy);
assertEquals(moveStrategy, car.getMoveStrategy());
moveStrategy = new MoveListStrategy();
car.setMoveStrategy(moveStrategy);
assertEquals(moveStrategy, car.getMoveStrategy());
moveStrategy = new PathFollowerMoveStrategy();
car.setMoveStrategy(moveStrategy);
assertEquals(moveStrategy, car.getMoveStrategy());
moveStrategy = new UserMoveStrategy();
car.setMoveStrategy(moveStrategy);
assertEquals(moveStrategy, car.getMoveStrategy());
}
}