forked from wp-cli/wp-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoggingTest.php
More file actions
124 lines (95 loc) · 3.11 KB
/
LoggingTest.php
File metadata and controls
124 lines (95 loc) · 3.11 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
// phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound -- Ignoring test doubles.
// phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound -- Ignoring test doubles.
use WP_CLI\Tests\TestCase;
class MockRegularLogger extends WP_CLI\Loggers\Regular {
protected function get_runner() {
return (object) [
'config' => [
'debug' => true,
],
];
}
protected function write( $handle, $str ) {
echo $str;
}
}
class MockQuietLogger extends WP_CLI\Loggers\Quiet {
protected function get_runner() {
return (object) [
'config' => [
'debug' => true,
],
];
}
}
class LoggingTest extends TestCase {
public function testLogDebug() {
$message = 'This is a test message.';
$regular_logger = new MockRegularLogger( false );
$this->expectOutputRegex( "/Debug: {$message} \(\d+\.*\d*s\)/" );
$regular_logger->debug( $message );
$quiet_logger = new MockQuietLogger();
$this->expectOutputRegex( "/Debug: {$message} \(\d+\.*\d*s\)/" );
$quiet_logger->debug( $message );
}
public function testLogEscaping() {
$logger = new MockRegularLogger( false );
$message = 'foo%20bar';
$this->expectOutputString( "Success: $message\n" );
$logger->success( $message );
}
public function testExecutionLogger() {
// Save Runner config.
$runner = WP_CLI::get_runner();
$runner_config = new \ReflectionProperty( $runner, 'config' );
$runner_config->setAccessible( true );
$prev_config = $runner_config->getValue( $runner );
// Set debug.
$runner_config->setValue( $runner, [ 'debug' => true ] );
$logger = new WP_CLI\Loggers\Execution();
// Standard use.
$logger->info( 'info' );
$logger->info( 'info2' );
$logger->success( 'success' );
$logger->warning( 'warning' );
$logger->error( 'error' );
$logger->success( 'success2' );
$logger->warning( 'warning2' );
$logger->debug( 'debug', 'group' );
$logger->error_multi_line( [ 'line11', 'line12', 'line13' ] );
$logger->error( 'error2' );
$logger->error_multi_line( [ 'line21' ] );
$logger->debug( 'debug2', 'group2' );
$this->assertSame( "info\ninfo2\nSuccess: success\nSuccess: success2\n", $logger->stdout );
$match_count = preg_match(
'/^'
. 'Warning: warning\nError: error\n'
. 'Warning: warning2\nDebug \(group\): debug \([0-9.]+s\)\n'
. 'Error:\nline11\nline12\nline13\n---------\n\nError: error2\n'
. 'Error:\nline21\n---------\n\nDebug \(group2\): debug2 \([0-9.]+s\)$/',
$logger->stderr
);
$this->assertSame( 1, $match_count );
$logger->stdout = '';
$logger->stderr = '';
// With output buffering.
$logger->ob_start();
echo 'echo';
$logger->info( 'info' );
print "print\n";
$logger->success( 'success' );
echo "echo2\n";
$logger->error( 'error' );
echo "echo3\n";
$logger->success( 'success2' );
echo 'echo4';
$logger->ob_end();
$this->assertSame( "echoinfo\nprint\nSuccess: success\necho2\necho3\nSuccess: success2\necho4", $logger->stdout );
$this->assertSame( "Error: error\n", $logger->stderr );
$logger->stdout = '';
$logger->stderr = '';
// Restore.
$runner_config->setValue( $runner, $prev_config );
}
}