Index: tests/Zend/ProgressBar/Adapter/ConsoleTest.php =================================================================== --- tests/Zend/ProgressBar/Adapter/ConsoleTest.php (revision 14615) +++ tests/Zend/ProgressBar/Adapter/ConsoleTest.php (working copy) @@ -35,6 +35,8 @@ */ require_once 'Zend/ProgressBar/Adapter/Console.php'; +require_once 'MockupStream.php'; + /** * @category Zend * @package Zend_ProgressBar @@ -44,6 +46,17 @@ */ class Zend_ProgressBar_Adapter_ConsoleTest extends PHPUnit_Framework_TestCase { + + protected function setUp() + { + stream_wrapper_register("zendprogressbaradapterconsole", "Zend_ProgressBar_Adapter_Console_MockupStream"); + } + + protected function tearDown() + { + stream_wrapper_unregister('zendprogressbaradapterconsole'); + } + /** * Runs the test methods of this class. * @@ -65,33 +78,33 @@ $this->markTestSkipped('Not testable on non-windows systems'); } } - + public function testStandardOutputStream() { $adapter = new Zend_ProgressBar_Adapter_Console_Stub(); $this->assertTrue(is_resource($adapter->getOutputStream())); - + $metaData = stream_get_meta_data($adapter->getOutputStream()); $this->assertEquals('php://stdout', $metaData['uri']); } - + public function testManualStandardOutputStream() { $adapter = new Zend_ProgressBar_Adapter_Console_Stub(array('outputStream' => 'php://stdout')); $this->assertTrue(is_resource($adapter->getOutputStream())); - + $metaData = stream_get_meta_data($adapter->getOutputStream()); $this->assertEquals('php://stdout', $metaData['uri']); } - + public function testManualErrorOutputStream() { $adapter = new Zend_ProgressBar_Adapter_Console_Stub(array('outputStream' => 'php://stderr')); $this->assertTrue(is_resource($adapter->getOutputStream())); - + $metaData = stream_get_meta_data($adapter->getOutputStream()); $this->assertEquals('php://stderr', $metaData['uri']); } @@ -244,6 +257,87 @@ $this->assertContains('foobar [', $adapter->getLastOutput()); } + + public function testSetOutputStreamOpen() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream('zendprogressbaradapterconsole://test1'); + $this->assertArrayHasKey('test1', Zend_ProgressBar_Adapter_Console_MockupStream::$tests); + } + + public function testSetOutputStreamOpenFail() { + try { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream(null); + $this->fail('Expected Zend_ProgressBar_Adapter_Exception'); + } catch (Zend_ProgressBar_Adapter_Exception $e) { + } + } + + public function testSetOutputStreamReplaceStream() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream('zendprogressbaradapterconsole://test2'); + $this->assertArrayHasKey('test2', Zend_ProgressBar_Adapter_Console_MockupStream::$tests); + $adapter->setOutputStream('zendprogressbaradapterconsole://test3'); + $this->assertArrayHasKey('test3', Zend_ProgressBar_Adapter_Console_MockupStream::$tests); + $this->assertArrayNotHasKey('test2', Zend_ProgressBar_Adapter_Console_MockupStream::$tests); + } + + public function testgetOutputStream() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream('zendprogressbaradapterconsole://test4'); + $resource = $adapter->getOutputStream(); + fwrite($resource, 'Hello Word!'); + $this->assertEquals('Hello Word!', Zend_ProgressBar_Adapter_Console_MockupStream::$tests['test4']); + } + + public function testgetOutputStreamReturnigStdout() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $resource = $adapter->getOutputStream(); + $this->assertTrue(is_resource($resource)); + } + + public function testFinishEol() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream('zendprogressbaradapterconsole://test5'); + $adapter->finish(); + $this->assertEquals(PHP_EOL, Zend_ProgressBar_Adapter_Console_MockupStream::$tests['test5']); + } + + public function testFinishNone() { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setOutputStream('zendprogressbaradapterconsole://test7'); + $adapter->setFinishAction(Zend_ProgressBar_Adapter_Console::FINISH_ACTION_NONE); + $adapter->finish(); + $this->assertEquals('', Zend_ProgressBar_Adapter_Console_MockupStream::$tests['test7']); + } + + public function testSetBarLeftChar() { + try { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setBarLeftChar(null); + $this->fail('Expected Zend_ProgressBar_Adapter_Exception'); + } catch (Zend_ProgressBar_Adapter_Exception $e) { + } + } + + public function testSetBarRightChar() { + try { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setBarRightChar(null); + $this->fail('Expected Zend_ProgressBar_Adapter_Exception'); + } catch (Zend_ProgressBar_Adapter_Exception $e) { + } + } + + public function testSetInvalidFinishAction() { + try { + $adapter = new Zend_ProgressBar_Adapter_Console(); + $adapter->setFinishAction('CUSTOM_FINISH_ACTION'); + $this->fail('Expected Zend_ProgressBar_Adapter_Exception'); + } catch (Zend_ProgressBar_Adapter_Exception $e) { + } + } + } class Zend_ProgressBar_Adapter_Console_Stub extends Zend_ProgressBar_Adapter_Console Index: tests/Zend/ProgressBar/Adapter/MockupStream.php =================================================================== --- tests/Zend/ProgressBar/Adapter/MockupStream.php (revision 0) +++ tests/Zend/ProgressBar/Adapter/MockupStream.php (revision 0) @@ -0,0 +1,113 @@ +test = $url["host"]; + $this->position = 0; + + self::$tests[$url["host"]] = ''; + return true; + } + + function stream_read($count) + { + $ret = substr(self::$tests[$this->test], $this->position, $count); + $this->position += strlen($ret); + return $ret; + } + + function stream_write($data) + { + $left = substr(self::$tests[$this->test], 0, $this->position); + $right = substr(self::$tests[$this->test], $this->position + strlen($data)); + self::$tests[$this->test] = $left . $data . $right; + $this->position += strlen($data); + return strlen($data); + } + + function stream_tell() + { + return $this->position; + } + + function stream_eof() + { + return $this->position >= strlen(self::$tests[$this->test]); + } + + function stream_seek($offset, $whence) + { + switch ($whence) { + case SEEK_SET: + if ($offset < strlen(self::$tests[$this->test]) && $offset >= 0) { + $this->position = $offset; + return true; + } else { + return false; + } + break; + + case SEEK_CUR: + if ($offset >= 0) { + $this->position += $offset; + return true; + } else { + return false; + } + break; + + case SEEK_END: + if (strlen(self::$tests[$this->test]) + $offset >= 0) { + $this->position = strlen(self::$tests[$this->test]) + $offset; + return true; + } else { + return false; + } + break; + + default: + return false; + } + } + + public function __destruct() { + unset(self::$tests[$this->test]); + } +}