Assert.assertTrue(model.getStatistics().getScore() == 990);
}
@Test
public void testChangesInModel() {
IModel model = new Model();
model.initIndividuals();
model.initAchievements();
Ship spaceShip = model.getShip();
Statistics statistics = model.getStatistics();
//Testing adding and resetting statistics
statistics.setLevelsCompleted(3);
statistics.setMotherShipsKilled(5);
statistics.setScore(300);
statistics.setAliensKilled(100);
Assert.assertTrue(statistics.getLevelsCompleted() == 3);
Assert.assertTrue(statistics.getMotherShipsKilled() == 5);
Assert.assertTrue(statistics.getScore() == 300);
Assert.assertTrue(statistics.getAliensKilled() == 100);
statistics.resetStatistics();
for (Field f : statistics.getClass().getDeclaredFields()) {
f.setAccessible(true);
try {
Assert.assertTrue(f.getInt(statistics) == 0);
} catch (IllegalArgumentException e) {
System.err.println(GameStrings.ILLEGAL_ARG_ERROR);
} catch (IllegalAccessException e) {
System.err.println(GameStrings.ILLEGAL_ACC_ERROR);
}
}
//Testing movement and some methods of ship
spaceShip.moveIndividual(spaceShip.getPositionX() + 10, spaceShip.getPositionY());
Assert.assertTrue(spaceShip.getPositionX() == 280);
spaceShip.moveIndividual(spaceShip.getPositionX() - 260, spaceShip.getPositionY());
Assert.assertTrue(model.getShip().getPositionX() == 20);
spaceShip.moveIndividual(spaceShip.getPositionX() - 10, spaceShip.getPositionY());
Assert.assertTrue(spaceShip.getPositionX() == 20); //reached minimum left movement, the ship position doesn't change
spaceShip.moveIndividual(spaceShip.getPositionX() + 520, spaceShip.getPositionY());
Assert.assertTrue(spaceShip.getPositionX() == 540);
spaceShip.moveIndividual(spaceShip.getPositionX() + 10, spaceShip.getPositionY());
Assert.assertTrue(spaceShip.getPositionX() == 540); // reached maximum right movement, the ship position doesn't change
spaceShip.decreaseLives();
spaceShip.decreaseLives();
Assert.assertTrue(spaceShip.getLives() == 1);
spaceShip.increaseLives();
Assert.assertTrue(spaceShip.getLives() == 2);
spaceShip.decreaseLives();
//Testing collisions AlienShot -> Ship and Shot -> Alien
model.getList().add(new AlienShot(spaceShip.getPositionX(), spaceShip.getPositionY()));
ShipShot shot = new ShipShot(10, 50);
model.getList().add(shot);
shot.collideWith(model.getList());
spaceShip.collideWith(model.getList());
Assert.assertTrue(spaceShip.isDead());
Assert.assertTrue(shot.isDead());
int individualsKilled = 0;
for (Individual ind : model.getList()) {
if (ind.isDead()) {
individualsKilled++;
}
}
Assert.assertTrue(individualsKilled == 4); //Individuals dead: alienShot, shot, ship and an alien
for (Individual ind : model.getList()) {
if (ind.getPositionX() == 10 && ind.getPositionY() == 50) {
Assert.assertTrue(ind.isDead());
}
}
//Testing collisions Shot -> Wall and Alien shot -> Wall
ShipShot shipShot = new ShipShot(40, 450);
Wall wallKicked = null;
model.getList().add(shipShot);
for (Wall wall : model.getWalls().getList()) {
wall.collideWith(model.getList());
}
for (Wall wall : model.getWalls().getList()) {
if (wall.getPositionX() == 40 && wall.getPositionY() == 450) {
wallKicked = wall;
}
}
Assert.assertTrue(wallKicked.getLives() == 1);
model.getList().remove(shipShot);
AlienShot alienShot = new AlienShot(35, 450);
model.getList().add(alienShot);
wallKicked.collideWith(model.getList());
Assert.assertTrue(wallKicked.getLives() == 0);
Assert.assertTrue(wallKicked.isDead());
//Testing collisions Shot -> Alien Shot
model.getList().add(shipShot);
alienShot.collideWith(model.getList());
Assert.assertTrue(shipShot.isDead());
Assert.assertTrue(alienShot.isDead());
//Testing score when aliens die
model.resetStatistics();
Alien alien1 = new Alien(new AlienType(1), 50, 30);
Alien alien2 = new Alien(new AlienType(2), 80, 30);
Alien alien3 = new Alien(new AlienType(3), 100, 30);
model.getList().add(alien1);
model.getList().add(alien2);
model.getList().add(alien3);
model.removeIndividual(alien1);
Assert.assertTrue(model.getStatistics().getScore() == 10);
model.removeIndividual(alien2);
Assert.assertTrue(model.getStatistics().getScore() == 30);
model.removeIndividual(alien3);
Assert.assertTrue(model.getStatistics().getScore() == 60);
}