<?phpnamespace Tests;use App\Scene\LinkScene;use JumPHP\Testing\GameTestCase;/** Two peers on one screen: they connect, a PING comes back as a PONG, A's cursor reaches B through the unreliable channel. */final class LinkTest extends GameTestCase{ public function testTheTwoPeersConnect(): void { $this->game->start(LinkScene::class); $this->game->run(20); self::assertSame('connected', $this->game->peek('stateA')); self::assertSame('connected', $this->game->peek('stateB')); } public function testAPingComesBackAsAPong(): void { $this->game->start(LinkScene::class); $this->game->run(20); $this->game->press('send'); $this->game->run(10); self::assertSame(1, $this->game->peek('pings')); self::assertSame(1, $this->game->peek('received')); self::assertNotNull($this->game->peek('rtt')); $this->game->shot('link-pong'); } public function testTheCursorOfAAppearsOnB(): void { $this->game->start(LinkScene::class); $this->game->run(20); $this->game->hold('right', 30); $this->game->run(5); $cursor = $this->game->peek('cursor'); $ghost = $this->game->peek('ghost'); self::assertGreaterThan(0.7, $cursor[0]); self::assertNotNull($ghost); self::assertEqualsWithDelta($cursor[0], $ghost[0], 0.05); self::assertGreaterThan(10, $this->game->peek('cursorPackets')); } public function testEscapeGoesBackToTheMenu(): void { $this->game->start(LinkScene::class); $this->game->press('back'); $this->game->run(40); self::assertInstanceOf(\App\Scene\TitleScene::class, $this->game->scene()); }}