<?php namespace Nkey\Caribu\Console\Test; use Nkey\Caribu\Console\CLI; class CLITest extends \PHPUnit\Framework\TestCase { private $stdin; private $stdout; private $stderr; private $cli; protected function setUp() { // Use temporary stream to simulate stdin input $this->stdin = fopen("php://memory", "r+"); $this->stdout = fopen("php://memory", "r+"); $this->stderr = fopen("php://memory", "r+"); $this->cli = new CLI(); $this->cli->setStdIn($this->stdin); $this->cli->setStdOut($this->stdout); $this->cli->setStdErr($this->stderr); } protected function tearDown() { fclose($this->stdin); fclose($this->stdout); fclose($this->stderr); } public function testCli() { // Test stdin fprintf($this->stdin, "exit" . PHP_EOL); rewind($this->stdin); $parsed = $this->cli->readLine(); $this->assertEquals("exit", $parsed->getCommand()); // Test stdout $this->cli->writeStdoutLine($parsed->getCommand()); rewind($this->stdout); $readen = stream_get_line($this->stdout, 1024, PHP_EOL); $this->assertEquals("cli > exit", $readen); // Test stderr $this->cli->writeStderrLine("Error while processing command"); rewind($this->stderr); $readen = stream_get_line($this->stderr, 1024, PHP_EOL); $this->assertEquals("Error while processing command", $readen); } public function testCliParsing() { fprintf($this->stdin, "printf 'Hello World'" . PHP_EOL); rewind($this->stdin); $parsed = $this->cli->readLine(); $this->assertEquals("printf", $parsed->getCommand()); $this->assertEquals(1, count($parsed->getArguments())); $this->assertEquals("Hello World", $parsed->getArguments()[0]); } } |