package ge.edu.freeuni.sdp.snake.model;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class SnakeTest {
private Configuration conf;
@Before
public void setUp(){
conf = mock(Configuration.class);
}
@Test
public void checkObjectCreation(){
Being mockBeing = mock(Being.class);
when(mockBeing.getLives()).thenReturn(6);
Snake target = new Snake(new Point(6,5),6,conf);
Assert.assertEquals(3, target.getLength());
Assert.assertEquals(6, target.getLives());
Point head = target.getHead();
Point expected = new Point(6, 5);
Assert.assertEquals(expected.X, head.X);
Assert.assertEquals(expected.Y, head.Y);
}
@Test
public void testContains(){
Point point1 = new Point(6, 5);
Point point2 = new Point(10, 10);
Snake target = new Snake(point1,1,conf);
Assert.assertEquals(true, target.contains(point1));
Assert.assertEquals(false, target.contains(point2));
}
@Test
public void kindIsSnake() {
Snake target = new Snake(new Point(6, 5),1,conf);
BeingKind actual = target.getKind();
Assert.assertEquals(BeingKind.Snake, actual);
}
@Test
public void interactWithOtherMakeSureOtherIsKilledAndCheckGrow() {
Snake target = new Snake(new Point(6, 5),1,conf);
Being other = mock(Being.class);
target.interactWith(other);
verify(other).kill();
Assert.assertEquals(4, target.getLength());
}
@Test
public void testMoveTo(){
Point point1 = new Point(50, 15);
Point point2 = new Point(51, 15);
Point point3 = new Point(52, 15);
Point point4 = new Point(53, 15);
Snake target = new Snake(point1,1,conf);
target.moveTo(point2);
target.moveTo(point3);
Assert.assertEquals(true, target.contains(point1));
Assert.assertEquals(true, target.contains(point2));
Assert.assertEquals(true, target.contains(point3));
Assert.assertEquals(false, target.contains(point4));
target.moveTo(point4);
Assert.assertEquals(false, target.contains(point1));
Assert.assertEquals(true, target.contains(point2));
Assert.assertEquals(true, target.contains(point3));
Assert.assertEquals(true, target.contains(point4));
}
@Test
public void testSaveMemento(){
when(conf.getSelectedLevelIndex()).thenReturn(0);
Snake target = new Snake(new Point(6,5),1,conf);
target.setDirection(Direction.LEFT);
Memento result = target.saveToMemento();
Assert.assertEquals(3, result.getLength());
Assert.assertEquals("left",result.getDirectionString());
Assert.assertEquals(6, result.getHead().X);
Assert.assertEquals(5, result.getHead().Y);
Assert.assertEquals(0, result.getLevelIndex());
}
@Test
public void testRestoreFromMemento(){
Memento mockMemento = mock(Memento.class);
when(mockMemento.getHead()).thenReturn(new Point(6,5));
when(mockMemento.getLength()).thenReturn(3);
when(conf.getSelectedLevelIndex()).thenReturn(0);
Snake target = new Snake(new Point(6,5),1,conf);
target.restoreFromMemento(mockMemento);
Assert.assertEquals(3, target.getLength());
Assert.assertEquals(6, target.getHead().X);
Assert.assertEquals(5, target.getHead().Y);
}
}