<?php
require_once './bootstrap.php';
use \Ptx\Snake;
class SnakeTest extends PHPUnit_Framework_TestCase
{
/**
* Tests whether we do have class name Snake
*/
public function testSnakeClass_exits()
{
$this->assertTrue(class_exists('\Ptx\Snake'));
}
/**
* Checks that init length param is working
*/
public function testSnakeClass_InitLength_CorrectSnake()
{
$snake_obj = new Snake([
'init_length' => 3,
]);
$expected = [ [0,0], [1,0], [2,0], [3,0] ];
$this->assertEquals($expected, $snake_obj->get_positions());
}
public function testReset_MoveSnakeAndReset_CorrectPosition()
{
$snake_obj = new Snake();
$snake_obj->move_snake('FFEEFFEE');
$snake_obj->reset();
$this->assertEquals([[0,0], [1,0]], $snake_obj->get_positions());
$this->assertEquals(0, $snake_obj->get_steps());
}
public function testMoveSnake_UnknownMove_ThrowsException()
{
$snake_obj = new Snake();
$exception = false;
try {
$snake_obj->move_snake('FFEEFFEED');
} catch(\Ptx\SnakeException $e) {
$exception = true;
}
$this->assertTrue($exception);
}
/**
* @param $move - snake path
* @param $expected - what is an expected result.
* @dataProvider data_4_move_tests
* @throws \Ptx\SnakeException
*/
public function testSnakeMove_Path_CorrectResults($move, $expected)
{
$snake_obj = new Snake();
$snake_obj->move_snake($move);
$this->assertEquals($expected, $snake_obj->get_positions(), $move);
}
/**
* @param $move - snake path
* @param $expected - what is an expected result.
* @dataProvider data_4_survive_tests
* @throws \Ptx\SnakeException
*/
public function testSnakeMove_Path_Survive($move, $expected)
{
$snake_obj = new Snake();
$this->assertEquals($expected, $snake_obj->move_snake($move), $move);
}
/**
* Data provider
*
* @return array
*/
public function data_4_move_tests()
{
return [
['FFF', [[3,0], [4,0]]],
['FFL', [[3,0], [3,1]]],
['FLL', [[2,1], [1,1]]],
['FRR', [[2,-1], [1, -1]]],
['FFLLRRFF', [[4,2], [5,2]]],
['FE', [[1,0], [2,0], [3,0]]],
['FEE', [[1,0], [2,0], [3,0], [4,0]]],
['FEEL', [[2,0], [3,0], [4,0], [4,1]]],
['FLERFF', [[3,2], [4,2], [5,2]]],
];
}
/**
* Data provider
*
* @return array
*/
public function data_4_survive_tests()
{
return [
['FFF', -1],
['FFL', -1],
['FLL', -1],
['FRR', -1],
['FFLLRRFF', -1],
['FE', -1],
['FEE', -1],
['FEEL', -1],
['FLERFF', -1],
['EEEELLLL', 7],
];
}
}
|