1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 2.8
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: App::uses("ConsoleOutput", "Console");
16:
17: /**
18: * StubOutput makes testing shell commands/shell helpers easier.
19: *
20: * You can use this class by injecting it into a Helper instance:
21: *
22: * ```
23: * App::uses("ConsoleOutputStub", "TestSuite/Stub");
24: *
25: * $output = new ConsoleOutputStub();
26: * $helper = new ProgressHelper($output);
27: * ```
28: */
29: class ConsoleOutputStub extends ConsoleOutput {
30:
31: /**
32: * Buffered messages.
33: *
34: * @var array
35: */
36: protected $_out = array();
37:
38: /**
39: * The number of bytes written by last call to write
40: *
41: * @var int
42: */
43: protected $_lastWritten = 0;
44:
45: /**
46: * Write output to the buffer.
47: *
48: * @param string|array $message A string or an array of strings to output
49: * @param int $newlines Number of newlines to append
50: * @return void
51: */
52: public function write($message, $newlines = 1) {
53: foreach ((array)$message as $line) {
54: $this->_out[] = $line;
55: $this->_lastWritten = strlen($line);
56: }
57: $newlines--;
58: while ($newlines > 0) {
59: $this->_out[] = '';
60: $this->_lastWritten = 0;
61: $newlines--;
62: }
63: }
64:
65: /**
66: * Overwrite output already written to the buffer.
67: *
68: * @param array|string $message The message to output.
69: * @param int $newlines Number of newlines to append.
70: * @param int $size The number of bytes to overwrite. Defaults to the
71: * length of the last message output.
72: * @return void
73: */
74: public function overwrite($message, $newlines = 1, $size = null) {
75: //insert an empty array to mock deletion of existing output
76: $this->_out[] = "";
77: //append new message to output
78: $this->write($message, $newlines);
79: }
80:
81: /**
82: * Get the buffered output.
83: *
84: * @return array
85: */
86: public function messages() {
87: return $this->_out;
88: }
89: }