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: }