Files
zombie-game/tests/Unit/Game/ZombieTest.php
T
2026-09-07 20:37:40 +02:00

74 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Game;
use App\Game\Entities\Zombie;
use App\Game\EntityList;
use App\Game\InputState;
use App\Game\Player;
use App\Game\Room;
use App\Game\Vector2;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
final class ZombieTest extends TestCase
{
#[Test]
public function zombieChasesTarget(): void
{
$room = new Room('test');
$list = $room->entities;
$player = new Player('p1', 'Tester', new InputState(), $list, $room, ['x' => 100.0, 'y' => 0.0]);
$room->addPlayer($player);
$zombie = new Zombie(0.0, 0.0, $list, $room, ['emergeTime' => 0.0]);
$list->append($zombie);
$zombie->target = $player;
$zombie->update(0.1);
$this->assertGreaterThan(0.0, $zombie->pos->x, 'zombie moves toward player x');
$this->assertEqualsWithDelta(0.0, $zombie->pos->y, 1e-6, 'zombie stays on same y');
}
#[Test]
public function hitReducesHealthAndKnocksBack(): void
{
$room = new Room('test');
$zombie = new Zombie(10.0, 0.0, $room->entities, $room);
$impulse = new Vector2(1.0, 0.0);
$dead = $zombie->hit($impulse, 1);
$this->assertTrue($dead);
$this->assertSame(0, $zombie->health);
}
#[Test]
public function hitDoesNotKillAtHighHealth(): void
{
$room = new Room('test');
$zombie = new Zombie(10.0, 0.0, $room->entities, $room, ['health' => 10]);
$dead = $zombie->hit(new Vector2(1.0, 0.0), 1);
$this->assertFalse($dead);
$this->assertSame(9, $zombie->health);
}
#[Test]
public function dieRemovesFromContainer(): void
{
$room = new Room('test');
$zombie = new Zombie(5.0, 5.0, $room->entities, $room);
$room->entities->append($zombie);
$zombie->die();
$this->assertCount(0, $room->entities);
}
#[Test]
public function emergeBlocksMovement(): void
{
$room = new Room('test');
$zombie = new Zombie(0.0, 0.0, $room->entities, $room, ['emergeTime' => 1.0]);
$room->entities->append($zombie);
$zombie->target = new Player('p1', 'T', new InputState(), $room->entities, $room, ['x' => 100.0, 'y' => 100.0]);
$zombie->update(0.1);
$this->assertSame(0.0, $zombie->pos->x, 'zombie blocked during emerge');
}
}