-
Notifications
You must be signed in to change notification settings - Fork 144
Expand file tree
/
Copy pathMockInputOutput.php
More file actions
108 lines (85 loc) · 2.68 KB
/
Copy pathMockInputOutput.php
File metadata and controls
108 lines (85 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
declare(strict_types=1);
/**
* This file is part of CodeIgniter Shield.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace CodeIgniter\Shield\Test;
use CodeIgniter\CLI\CLI;
use CodeIgniter\Shield\Commands\Utils\InputOutput;
use CodeIgniter\Shield\Exceptions\LogicException;
use CodeIgniter\Test\Filters\CITestStreamFilter;
use CodeIgniter\Test\PhpStreamWrapper;
final class MockInputOutput extends InputOutput
{
private array $inputs = [];
private array $outputs = [];
/**
* Sets user inputs.
*/
public function setInputs(array $inputs): void
{
$this->inputs = $inputs;
}
/**
* Takes the last output from the output array.
*/
public function getLastOutput(): string
{
return array_pop($this->outputs);
}
/**
* Takes the first output from the output array.
*/
public function getFirstOutput(): string
{
return array_shift($this->outputs);
}
/**
* Returns all outputs.
*/
public function getOutputs(): string
{
return implode('', $this->outputs);
}
public function prompt(string $field, $options = null, $validation = null): string
{
$input = array_shift($this->inputs);
CITestStreamFilter::registration();
CITestStreamFilter::addOutputFilter();
CITestStreamFilter::addErrorFilter();
PhpStreamWrapper::register();
PhpStreamWrapper::setContent($input);
$userInput = CLI::prompt($field, $options, $validation);
PhpStreamWrapper::restore();
CITestStreamFilter::removeOutputFilter();
CITestStreamFilter::removeErrorFilter();
if ($input !== $userInput) {
throw new LogicException($input . '!==' . $userInput);
}
return $input;
}
public function write(
string $text = '',
?string $foreground = null,
?string $background = null,
): void {
CITestStreamFilter::registration();
CITestStreamFilter::addOutputFilter();
CLI::write($text, $foreground, $background);
$this->outputs[] = CITestStreamFilter::$buffer;
CITestStreamFilter::removeOutputFilter();
}
public function error(string $text, string $foreground = 'light_red', ?string $background = null): void
{
CITestStreamFilter::registration();
CITestStreamFilter::addErrorFilter();
CLI::error($text, $foreground, $background);
$this->outputs[] = CITestStreamFilter::$buffer;
CITestStreamFilter::removeErrorFilter();
}
}