diff --git a/cake/console/console_output.php b/cake/console/console_output.php new file mode 100644 index 000000000..ef30bc595 --- /dev/null +++ b/cake/console/console_output.php @@ -0,0 +1,76 @@ +_output = fopen($stream, 'w'); + } + +/** + * Outputs a single or multiple messages to stdout. If no parameters + * are passed outputs just a newline. + * + * @param mixed $message A string or a an array of strings to output + * @param integer $newlines Number of newlines to append + * @return integer Returns the number of bytes returned from writing to stdout. + */ + public function write($message, $newlines = 1) { + if (is_array($message)) { + $message = implode(self::LF, $message); + } + return $this->_write($message . str_repeat(self::LF, $newlines)); + } + +/** + * Writes a message to the output stream + * + * @param string $message Message to write. + * @return boolean success + */ + protected function _write($message) { + return fwrite($this->_output, $message); + } + +/** + * clean up and close handles + * + * @return void + */ + public function __destruct() { + fclose($this->_output); + } +} \ No newline at end of file diff --git a/cake/tests/cases/console/console_output.test.php b/cake/tests/cases/console/console_output.test.php new file mode 100644 index 000000000..b4f13c816 --- /dev/null +++ b/cake/tests/cases/console/console_output.test.php @@ -0,0 +1,92 @@ + + * Copyright 2005-2010, Cake Software Foundation, Inc. + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice + * + * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. + * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests + * @package cake + * @subpackage cake.tests.cases.console + * @since CakePHP(tm) v 1.2.0.5432 + * @license MIT License (http://www.opensource.org/licenses/mit-license.php) + */ + +require_once CAKE . 'console' . DS . 'console_output.php'; + +class ConsoleOutputTest extends CakeTestCase { + +/** + * setup + * + * @return void + */ + function setUp() { + parent::setUp(); + $this->output = $this->getMock('ConsoleOutput', array('_write')); + } + +/** + * tearDown + * + * @return void + */ + function tearDown() { + unset($this->output); + } + +/** + * test writing with no new line + * + * @return void + */ + function testWriteNoNewLine() { + $this->output->expects($this->once())->method('_write') + ->with('Some output'); + + $this->output->write('Some output', false); + } + +/** + * test writing with no new line + * + * @return void + */ + function testWriteNewLine() { + $this->output->expects($this->once())->method('_write') + ->with('Some output' . PHP_EOL); + + $this->output->write('Some output'); + } + +/** + * test write() with multiple new lines + * + * @return void + */ + function testWriteMultipleNewLines() { + $this->output->expects($this->once())->method('_write') + ->with('Some output' . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL); + + $this->output->write('Some output', 4); + } + +/** + * test writing an array of messages. + * + * @return void + */ + function testWriteArray() { + $this->output->expects($this->once())->method('_write') + ->with('Line' . PHP_EOL . 'Line' . PHP_EOL . 'Line' . PHP_EOL); + + $this->output->write(array('Line', 'Line', 'Line')); + } + +} \ No newline at end of file