mockApplication(); } public function testAddressTaken(): void { $docroot = __DIR__ . '/stub'; /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMocK::className()) ->setConstructorArgs(['serve', Yii::$app]) ->onlyMethods(['isAddressTaken', 'runCommand']) ->getMock(); $serveController->expects($this->once())->method('isAddressTaken')->willReturn(true); $serveController->expects($this->never())->method('runCommand'); $serveController->docroot = $docroot; $serveController->port = 8080; ob_start(); $serveController->actionIndex('localhost:8080'); ob_end_clean(); $result = $serveController->flushStdOutBuffer(); $this->assertStringContainsString('http://localhost:8080 is taken by another process.', $result); } public function testDefaultValues(): void { $docroot = __DIR__ . '/stub'; /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMock::className()) ->setConstructorArgs(['serve', Yii::$app]) ->onlyMethods(['runCommand']) ->getMock(); $serveController->docroot = $docroot; $serveController->port = 8080; $serveController->expects($this->once())->method('runCommand')->willReturn(true); ob_start(); $serveController->actionIndex(); ob_end_clean(); $result = $serveController->flushStdOutBuffer(); $this->assertStringContainsString('Server started on http://localhost:8080', $result); $this->assertStringContainsString("Document root is \"{$docroot}\"", $result); $this->assertStringContainsString('Quit the server with CTRL-C or COMMAND-C.', $result); } public function testDoocRootWithNoExistValue(): void { $docroot = '/not/exist/path'; /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMock::className()) ->setConstructorArgs(['serve', Yii::$app]) ->onlyMethods(['runCommand']) ->getMock(); $serveController->docroot = $docroot; $serveController->expects($this->any())->method('runCommand')->willReturn(true); ob_start(); $serveController->actionIndex(); ob_end_clean(); $result = $serveController->flushStdOutBuffer(); $this->assertStringContainsString("Document root \"{$docroot}\" does not exist.", $result); } public function testWithRouterNoExistValue(): void { $docroot = __DIR__ . '/stub'; $router = '/not/exist/path'; /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMock::className()) ->setConstructorArgs(['serve', Yii::$app]) ->onlyMethods(['runCommand']) ->getMock(); $serveController->docroot = $docroot; $serveController->port = 8081; $serveController->router = $router; $serveController->expects($this->any())->method('runCommand')->willReturn(true); ob_start(); $serveController->actionIndex(); ob_end_clean(); $result = $serveController->flushStdOutBuffer(); $this->assertStringContainsString("Routing file \"$router\" does not exist.", $result); } public function testWithRouterValue(): void { $docroot = __DIR__ . '/stub'; $router = __DIR__ . '/stub/index.php'; /** @var ServeController $serveController */ $serveController = $this->getMockBuilder(ServeControllerMock::className()) ->setConstructorArgs(['serve', Yii::$app]) ->onlyMethods(['runCommand']) ->getMock(); $serveController->docroot = $docroot; $serveController->port = 8081; $serveController->router = $router; $serveController->expects($this->once())->method('runCommand')->willReturn(true); ob_start(); $serveController->actionIndex(); ob_end_clean(); $result = $serveController->flushStdOutBuffer(); $this->assertStringContainsString('Server started on http://localhost:8081', $result); $this->assertStringContainsString("Document root is \"{$docroot}\"", $result); $this->assertStringContainsString("Routing file is \"{$router}\"", $result); $this->assertStringContainsString('Quit the server with CTRL-C or COMMAND-C.', $result); } } /** * Mock class for [[\yii\console\controllers\ServeController]]. */ class ServeControllerMock extends ServeController { use StdOutBufferControllerTrait; }