@@ -14,125 +14,125 @@ |
||
14 | 14 | */ |
15 | 15 | abstract class LoggerInterfaceTest extends TestCase |
16 | 16 | { |
17 | - /** |
|
18 | - * @return LoggerInterface |
|
19 | - */ |
|
20 | - abstract public function getLogger(); |
|
21 | - |
|
22 | - /** |
|
23 | - * This must return the log messages in order. |
|
24 | - * |
|
25 | - * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>". |
|
26 | - * |
|
27 | - * Example ->error('Foo') would yield "error Foo". |
|
28 | - * |
|
29 | - * @return string[] |
|
30 | - */ |
|
31 | - abstract public function getLogs(); |
|
32 | - |
|
33 | - public function testImplements() |
|
34 | - { |
|
35 | - $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); |
|
36 | - } |
|
37 | - |
|
38 | - /** |
|
39 | - * @dataProvider provideLevelsAndMessages |
|
40 | - */ |
|
41 | - public function testLogsAtAllLevels($level, $message) |
|
42 | - { |
|
43 | - $logger = $this->getLogger(); |
|
44 | - $logger->{$level}($message, array('user' => 'Bob')); |
|
45 | - $logger->log($level, $message, array('user' => 'Bob')); |
|
46 | - |
|
47 | - $expected = array( |
|
48 | - $level.' message of level '.$level.' with context: Bob', |
|
49 | - $level.' message of level '.$level.' with context: Bob', |
|
50 | - ); |
|
51 | - $this->assertEquals($expected, $this->getLogs()); |
|
52 | - } |
|
53 | - |
|
54 | - public function provideLevelsAndMessages() |
|
55 | - { |
|
56 | - return array( |
|
57 | - LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), |
|
58 | - LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), |
|
59 | - LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), |
|
60 | - LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), |
|
61 | - LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), |
|
62 | - LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), |
|
63 | - LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), |
|
64 | - LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), |
|
65 | - ); |
|
66 | - } |
|
67 | - |
|
68 | - /** |
|
69 | - * @expectedException \Psr\Log\InvalidArgumentException |
|
70 | - */ |
|
71 | - public function testThrowsOnInvalidLevel() |
|
72 | - { |
|
73 | - $logger = $this->getLogger(); |
|
74 | - $logger->log('invalid level', 'Foo'); |
|
75 | - } |
|
76 | - |
|
77 | - public function testContextReplacement() |
|
78 | - { |
|
79 | - $logger = $this->getLogger(); |
|
80 | - $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); |
|
81 | - |
|
82 | - $expected = array('info {Message {nothing} Bob Bar a}'); |
|
83 | - $this->assertEquals($expected, $this->getLogs()); |
|
84 | - } |
|
85 | - |
|
86 | - public function testObjectCastToString() |
|
87 | - { |
|
88 | - if (method_exists($this, 'createPartialMock')) { |
|
89 | - $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
90 | - } else { |
|
91 | - $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
92 | - } |
|
93 | - $dummy->expects($this->once()) |
|
94 | - ->method('__toString') |
|
95 | - ->will($this->returnValue('DUMMY')); |
|
96 | - |
|
97 | - $this->getLogger()->warning($dummy); |
|
98 | - |
|
99 | - $expected = array('warning DUMMY'); |
|
100 | - $this->assertEquals($expected, $this->getLogs()); |
|
101 | - } |
|
102 | - |
|
103 | - public function testContextCanContainAnything() |
|
104 | - { |
|
105 | - $closed = fopen('php://memory', 'r'); |
|
106 | - fclose($closed); |
|
107 | - |
|
108 | - $context = array( |
|
109 | - 'bool' => true, |
|
110 | - 'null' => null, |
|
111 | - 'string' => 'Foo', |
|
112 | - 'int' => 0, |
|
113 | - 'float' => 0.5, |
|
114 | - 'nested' => array('with object' => new DummyTest), |
|
115 | - 'object' => new \DateTime, |
|
116 | - 'resource' => fopen('php://memory', 'r'), |
|
117 | - 'closed' => $closed, |
|
118 | - ); |
|
119 | - |
|
120 | - $this->getLogger()->warning('Crazy context data', $context); |
|
121 | - |
|
122 | - $expected = array('warning Crazy context data'); |
|
123 | - $this->assertEquals($expected, $this->getLogs()); |
|
124 | - } |
|
125 | - |
|
126 | - public function testContextExceptionKeyCanBeExceptionOrOtherValues() |
|
127 | - { |
|
128 | - $logger = $this->getLogger(); |
|
129 | - $logger->warning('Random message', array('exception' => 'oops')); |
|
130 | - $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); |
|
131 | - |
|
132 | - $expected = array( |
|
133 | - 'warning Random message', |
|
134 | - 'critical Uncaught Exception!' |
|
135 | - ); |
|
136 | - $this->assertEquals($expected, $this->getLogs()); |
|
137 | - } |
|
17 | + /** |
|
18 | + * @return LoggerInterface |
|
19 | + */ |
|
20 | + abstract public function getLogger(); |
|
21 | + |
|
22 | + /** |
|
23 | + * This must return the log messages in order. |
|
24 | + * |
|
25 | + * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>". |
|
26 | + * |
|
27 | + * Example ->error('Foo') would yield "error Foo". |
|
28 | + * |
|
29 | + * @return string[] |
|
30 | + */ |
|
31 | + abstract public function getLogs(); |
|
32 | + |
|
33 | + public function testImplements() |
|
34 | + { |
|
35 | + $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); |
|
36 | + } |
|
37 | + |
|
38 | + /** |
|
39 | + * @dataProvider provideLevelsAndMessages |
|
40 | + */ |
|
41 | + public function testLogsAtAllLevels($level, $message) |
|
42 | + { |
|
43 | + $logger = $this->getLogger(); |
|
44 | + $logger->{$level}($message, array('user' => 'Bob')); |
|
45 | + $logger->log($level, $message, array('user' => 'Bob')); |
|
46 | + |
|
47 | + $expected = array( |
|
48 | + $level.' message of level '.$level.' with context: Bob', |
|
49 | + $level.' message of level '.$level.' with context: Bob', |
|
50 | + ); |
|
51 | + $this->assertEquals($expected, $this->getLogs()); |
|
52 | + } |
|
53 | + |
|
54 | + public function provideLevelsAndMessages() |
|
55 | + { |
|
56 | + return array( |
|
57 | + LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), |
|
58 | + LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), |
|
59 | + LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), |
|
60 | + LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), |
|
61 | + LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), |
|
62 | + LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), |
|
63 | + LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), |
|
64 | + LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), |
|
65 | + ); |
|
66 | + } |
|
67 | + |
|
68 | + /** |
|
69 | + * @expectedException \Psr\Log\InvalidArgumentException |
|
70 | + */ |
|
71 | + public function testThrowsOnInvalidLevel() |
|
72 | + { |
|
73 | + $logger = $this->getLogger(); |
|
74 | + $logger->log('invalid level', 'Foo'); |
|
75 | + } |
|
76 | + |
|
77 | + public function testContextReplacement() |
|
78 | + { |
|
79 | + $logger = $this->getLogger(); |
|
80 | + $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); |
|
81 | + |
|
82 | + $expected = array('info {Message {nothing} Bob Bar a}'); |
|
83 | + $this->assertEquals($expected, $this->getLogs()); |
|
84 | + } |
|
85 | + |
|
86 | + public function testObjectCastToString() |
|
87 | + { |
|
88 | + if (method_exists($this, 'createPartialMock')) { |
|
89 | + $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
90 | + } else { |
|
91 | + $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); |
|
92 | + } |
|
93 | + $dummy->expects($this->once()) |
|
94 | + ->method('__toString') |
|
95 | + ->will($this->returnValue('DUMMY')); |
|
96 | + |
|
97 | + $this->getLogger()->warning($dummy); |
|
98 | + |
|
99 | + $expected = array('warning DUMMY'); |
|
100 | + $this->assertEquals($expected, $this->getLogs()); |
|
101 | + } |
|
102 | + |
|
103 | + public function testContextCanContainAnything() |
|
104 | + { |
|
105 | + $closed = fopen('php://memory', 'r'); |
|
106 | + fclose($closed); |
|
107 | + |
|
108 | + $context = array( |
|
109 | + 'bool' => true, |
|
110 | + 'null' => null, |
|
111 | + 'string' => 'Foo', |
|
112 | + 'int' => 0, |
|
113 | + 'float' => 0.5, |
|
114 | + 'nested' => array('with object' => new DummyTest), |
|
115 | + 'object' => new \DateTime, |
|
116 | + 'resource' => fopen('php://memory', 'r'), |
|
117 | + 'closed' => $closed, |
|
118 | + ); |
|
119 | + |
|
120 | + $this->getLogger()->warning('Crazy context data', $context); |
|
121 | + |
|
122 | + $expected = array('warning Crazy context data'); |
|
123 | + $this->assertEquals($expected, $this->getLogs()); |
|
124 | + } |
|
125 | + |
|
126 | + public function testContextExceptionKeyCanBeExceptionOrOtherValues() |
|
127 | + { |
|
128 | + $logger = $this->getLogger(); |
|
129 | + $logger->warning('Random message', array('exception' => 'oops')); |
|
130 | + $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); |
|
131 | + |
|
132 | + $expected = array( |
|
133 | + 'warning Random message', |
|
134 | + 'critical Uncaught Exception!' |
|
135 | + ); |
|
136 | + $this->assertEquals($expected, $this->getLogs()); |
|
137 | + } |
|
138 | 138 | } |
@@ -19,107 +19,107 @@ |
||
19 | 19 | */ |
20 | 20 | interface LoggerInterface |
21 | 21 | { |
22 | - /** |
|
23 | - * System is unusable. |
|
24 | - * |
|
25 | - * @param string $message |
|
26 | - * @param mixed[] $context |
|
27 | - * |
|
28 | - * @return void |
|
29 | - */ |
|
30 | - public function emergency($message, array $context = array()); |
|
22 | + /** |
|
23 | + * System is unusable. |
|
24 | + * |
|
25 | + * @param string $message |
|
26 | + * @param mixed[] $context |
|
27 | + * |
|
28 | + * @return void |
|
29 | + */ |
|
30 | + public function emergency($message, array $context = array()); |
|
31 | 31 | |
32 | - /** |
|
33 | - * Action must be taken immediately. |
|
34 | - * |
|
35 | - * Example: Entire website down, database unavailable, etc. This should |
|
36 | - * trigger the SMS alerts and wake you up. |
|
37 | - * |
|
38 | - * @param string $message |
|
39 | - * @param mixed[] $context |
|
40 | - * |
|
41 | - * @return void |
|
42 | - */ |
|
43 | - public function alert($message, array $context = array()); |
|
32 | + /** |
|
33 | + * Action must be taken immediately. |
|
34 | + * |
|
35 | + * Example: Entire website down, database unavailable, etc. This should |
|
36 | + * trigger the SMS alerts and wake you up. |
|
37 | + * |
|
38 | + * @param string $message |
|
39 | + * @param mixed[] $context |
|
40 | + * |
|
41 | + * @return void |
|
42 | + */ |
|
43 | + public function alert($message, array $context = array()); |
|
44 | 44 | |
45 | - /** |
|
46 | - * Critical conditions. |
|
47 | - * |
|
48 | - * Example: Application component unavailable, unexpected exception. |
|
49 | - * |
|
50 | - * @param string $message |
|
51 | - * @param mixed[] $context |
|
52 | - * |
|
53 | - * @return void |
|
54 | - */ |
|
55 | - public function critical($message, array $context = array()); |
|
45 | + /** |
|
46 | + * Critical conditions. |
|
47 | + * |
|
48 | + * Example: Application component unavailable, unexpected exception. |
|
49 | + * |
|
50 | + * @param string $message |
|
51 | + * @param mixed[] $context |
|
52 | + * |
|
53 | + * @return void |
|
54 | + */ |
|
55 | + public function critical($message, array $context = array()); |
|
56 | 56 | |
57 | - /** |
|
58 | - * Runtime errors that do not require immediate action but should typically |
|
59 | - * be logged and monitored. |
|
60 | - * |
|
61 | - * @param string $message |
|
62 | - * @param mixed[] $context |
|
63 | - * |
|
64 | - * @return void |
|
65 | - */ |
|
66 | - public function error($message, array $context = array()); |
|
57 | + /** |
|
58 | + * Runtime errors that do not require immediate action but should typically |
|
59 | + * be logged and monitored. |
|
60 | + * |
|
61 | + * @param string $message |
|
62 | + * @param mixed[] $context |
|
63 | + * |
|
64 | + * @return void |
|
65 | + */ |
|
66 | + public function error($message, array $context = array()); |
|
67 | 67 | |
68 | - /** |
|
69 | - * Exceptional occurrences that are not errors. |
|
70 | - * |
|
71 | - * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
72 | - * that are not necessarily wrong. |
|
73 | - * |
|
74 | - * @param string $message |
|
75 | - * @param mixed[] $context |
|
76 | - * |
|
77 | - * @return void |
|
78 | - */ |
|
79 | - public function warning($message, array $context = array()); |
|
68 | + /** |
|
69 | + * Exceptional occurrences that are not errors. |
|
70 | + * |
|
71 | + * Example: Use of deprecated APIs, poor use of an API, undesirable things |
|
72 | + * that are not necessarily wrong. |
|
73 | + * |
|
74 | + * @param string $message |
|
75 | + * @param mixed[] $context |
|
76 | + * |
|
77 | + * @return void |
|
78 | + */ |
|
79 | + public function warning($message, array $context = array()); |
|
80 | 80 | |
81 | - /** |
|
82 | - * Normal but significant events. |
|
83 | - * |
|
84 | - * @param string $message |
|
85 | - * @param mixed[] $context |
|
86 | - * |
|
87 | - * @return void |
|
88 | - */ |
|
89 | - public function notice($message, array $context = array()); |
|
81 | + /** |
|
82 | + * Normal but significant events. |
|
83 | + * |
|
84 | + * @param string $message |
|
85 | + * @param mixed[] $context |
|
86 | + * |
|
87 | + * @return void |
|
88 | + */ |
|
89 | + public function notice($message, array $context = array()); |
|
90 | 90 | |
91 | - /** |
|
92 | - * Interesting events. |
|
93 | - * |
|
94 | - * Example: User logs in, SQL logs. |
|
95 | - * |
|
96 | - * @param string $message |
|
97 | - * @param mixed[] $context |
|
98 | - * |
|
99 | - * @return void |
|
100 | - */ |
|
101 | - public function info($message, array $context = array()); |
|
91 | + /** |
|
92 | + * Interesting events. |
|
93 | + * |
|
94 | + * Example: User logs in, SQL logs. |
|
95 | + * |
|
96 | + * @param string $message |
|
97 | + * @param mixed[] $context |
|
98 | + * |
|
99 | + * @return void |
|
100 | + */ |
|
101 | + public function info($message, array $context = array()); |
|
102 | 102 | |
103 | - /** |
|
104 | - * Detailed debug information. |
|
105 | - * |
|
106 | - * @param string $message |
|
107 | - * @param mixed[] $context |
|
108 | - * |
|
109 | - * @return void |
|
110 | - */ |
|
111 | - public function debug($message, array $context = array()); |
|
103 | + /** |
|
104 | + * Detailed debug information. |
|
105 | + * |
|
106 | + * @param string $message |
|
107 | + * @param mixed[] $context |
|
108 | + * |
|
109 | + * @return void |
|
110 | + */ |
|
111 | + public function debug($message, array $context = array()); |
|
112 | 112 | |
113 | - /** |
|
114 | - * Logs with an arbitrary level. |
|
115 | - * |
|
116 | - * @param mixed $level |
|
117 | - * @param string $message |
|
118 | - * @param mixed[] $context |
|
119 | - * |
|
120 | - * @return void |
|
121 | - * |
|
122 | - * @throws \Psr\Log\InvalidArgumentException |
|
123 | - */ |
|
124 | - public function log($level, $message, array $context = array()); |
|
113 | + /** |
|
114 | + * Logs with an arbitrary level. |
|
115 | + * |
|
116 | + * @param mixed $level |
|
117 | + * @param string $message |
|
118 | + * @param mixed[] $context |
|
119 | + * |
|
120 | + * @return void |
|
121 | + * |
|
122 | + * @throws \Psr\Log\InvalidArgumentException |
|
123 | + */ |
|
124 | + public function log($level, $message, array $context = array()); |
|
125 | 125 | } |
@@ -12,39 +12,39 @@ |
||
12 | 12 | use Symfony\Polyfill\Ctype as p; |
13 | 13 | |
14 | 14 | if (\PHP_VERSION_ID >= 80000) { |
15 | - return require __DIR__.'/bootstrap80.php'; |
|
15 | + return require __DIR__.'/bootstrap80.php'; |
|
16 | 16 | } |
17 | 17 | |
18 | 18 | if (!function_exists('ctype_alnum')) { |
19 | - function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } |
|
19 | + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } |
|
20 | 20 | } |
21 | 21 | if (!function_exists('ctype_alpha')) { |
22 | - function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } |
|
22 | + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } |
|
23 | 23 | } |
24 | 24 | if (!function_exists('ctype_cntrl')) { |
25 | - function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } |
|
25 | + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } |
|
26 | 26 | } |
27 | 27 | if (!function_exists('ctype_digit')) { |
28 | - function ctype_digit($text) { return p\Ctype::ctype_digit($text); } |
|
28 | + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } |
|
29 | 29 | } |
30 | 30 | if (!function_exists('ctype_graph')) { |
31 | - function ctype_graph($text) { return p\Ctype::ctype_graph($text); } |
|
31 | + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } |
|
32 | 32 | } |
33 | 33 | if (!function_exists('ctype_lower')) { |
34 | - function ctype_lower($text) { return p\Ctype::ctype_lower($text); } |
|
34 | + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } |
|
35 | 35 | } |
36 | 36 | if (!function_exists('ctype_print')) { |
37 | - function ctype_print($text) { return p\Ctype::ctype_print($text); } |
|
37 | + function ctype_print($text) { return p\Ctype::ctype_print($text); } |
|
38 | 38 | } |
39 | 39 | if (!function_exists('ctype_punct')) { |
40 | - function ctype_punct($text) { return p\Ctype::ctype_punct($text); } |
|
40 | + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } |
|
41 | 41 | } |
42 | 42 | if (!function_exists('ctype_space')) { |
43 | - function ctype_space($text) { return p\Ctype::ctype_space($text); } |
|
43 | + function ctype_space($text) { return p\Ctype::ctype_space($text); } |
|
44 | 44 | } |
45 | 45 | if (!function_exists('ctype_upper')) { |
46 | - function ctype_upper($text) { return p\Ctype::ctype_upper($text); } |
|
46 | + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } |
|
47 | 47 | } |
48 | 48 | if (!function_exists('ctype_xdigit')) { |
49 | - function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } |
|
49 | + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } |
|
50 | 50 | } |
@@ -12,35 +12,35 @@ |
||
12 | 12 | use Symfony\Polyfill\Ctype as p; |
13 | 13 | |
14 | 14 | if (!function_exists('ctype_alnum')) { |
15 | - function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } |
|
15 | + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } |
|
16 | 16 | } |
17 | 17 | if (!function_exists('ctype_alpha')) { |
18 | - function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } |
|
18 | + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } |
|
19 | 19 | } |
20 | 20 | if (!function_exists('ctype_cntrl')) { |
21 | - function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } |
|
21 | + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } |
|
22 | 22 | } |
23 | 23 | if (!function_exists('ctype_digit')) { |
24 | - function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } |
|
24 | + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } |
|
25 | 25 | } |
26 | 26 | if (!function_exists('ctype_graph')) { |
27 | - function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } |
|
27 | + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } |
|
28 | 28 | } |
29 | 29 | if (!function_exists('ctype_lower')) { |
30 | - function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } |
|
30 | + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } |
|
31 | 31 | } |
32 | 32 | if (!function_exists('ctype_print')) { |
33 | - function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } |
|
33 | + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } |
|
34 | 34 | } |
35 | 35 | if (!function_exists('ctype_punct')) { |
36 | - function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } |
|
36 | + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } |
|
37 | 37 | } |
38 | 38 | if (!function_exists('ctype_space')) { |
39 | - function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } |
|
39 | + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } |
|
40 | 40 | } |
41 | 41 | if (!function_exists('ctype_upper')) { |
42 | - function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } |
|
42 | + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } |
|
43 | 43 | } |
44 | 44 | if (!function_exists('ctype_xdigit')) { |
45 | - function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } |
|
45 | + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } |
|
46 | 46 | } |
@@ -20,208 +20,208 @@ |
||
20 | 20 | */ |
21 | 21 | final class Ctype |
22 | 22 | { |
23 | - /** |
|
24 | - * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. |
|
25 | - * |
|
26 | - * @see https://php.net/ctype-alnum |
|
27 | - * |
|
28 | - * @param string|int $text |
|
29 | - * |
|
30 | - * @return bool |
|
31 | - */ |
|
32 | - public static function ctype_alnum($text) |
|
33 | - { |
|
34 | - $text = self::convert_int_to_char_for_ctype($text); |
|
35 | - |
|
36 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); |
|
37 | - } |
|
38 | - |
|
39 | - /** |
|
40 | - * Returns TRUE if every character in text is a letter, FALSE otherwise. |
|
41 | - * |
|
42 | - * @see https://php.net/ctype-alpha |
|
43 | - * |
|
44 | - * @param string|int $text |
|
45 | - * |
|
46 | - * @return bool |
|
47 | - */ |
|
48 | - public static function ctype_alpha($text) |
|
49 | - { |
|
50 | - $text = self::convert_int_to_char_for_ctype($text); |
|
51 | - |
|
52 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); |
|
53 | - } |
|
54 | - |
|
55 | - /** |
|
56 | - * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. |
|
57 | - * |
|
58 | - * @see https://php.net/ctype-cntrl |
|
59 | - * |
|
60 | - * @param string|int $text |
|
61 | - * |
|
62 | - * @return bool |
|
63 | - */ |
|
64 | - public static function ctype_cntrl($text) |
|
65 | - { |
|
66 | - $text = self::convert_int_to_char_for_ctype($text); |
|
67 | - |
|
68 | - return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); |
|
69 | - } |
|
70 | - |
|
71 | - /** |
|
72 | - * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. |
|
73 | - * |
|
74 | - * @see https://php.net/ctype-digit |
|
75 | - * |
|
76 | - * @param string|int $text |
|
77 | - * |
|
78 | - * @return bool |
|
79 | - */ |
|
80 | - public static function ctype_digit($text) |
|
81 | - { |
|
82 | - $text = self::convert_int_to_char_for_ctype($text); |
|
83 | - |
|
84 | - return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); |
|
85 | - } |
|
86 | - |
|
87 | - /** |
|
88 | - * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. |
|
89 | - * |
|
90 | - * @see https://php.net/ctype-graph |
|
91 | - * |
|
92 | - * @param string|int $text |
|
93 | - * |
|
94 | - * @return bool |
|
95 | - */ |
|
96 | - public static function ctype_graph($text) |
|
97 | - { |
|
98 | - $text = self::convert_int_to_char_for_ctype($text); |
|
99 | - |
|
100 | - return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); |
|
101 | - } |
|
102 | - |
|
103 | - /** |
|
104 | - * Returns TRUE if every character in text is a lowercase letter. |
|
105 | - * |
|
106 | - * @see https://php.net/ctype-lower |
|
107 | - * |
|
108 | - * @param string|int $text |
|
109 | - * |
|
110 | - * @return bool |
|
111 | - */ |
|
112 | - public static function ctype_lower($text) |
|
113 | - { |
|
114 | - $text = self::convert_int_to_char_for_ctype($text); |
|
115 | - |
|
116 | - return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. |
|
121 | - * |
|
122 | - * @see https://php.net/ctype-print |
|
123 | - * |
|
124 | - * @param string|int $text |
|
125 | - * |
|
126 | - * @return bool |
|
127 | - */ |
|
128 | - public static function ctype_print($text) |
|
129 | - { |
|
130 | - $text = self::convert_int_to_char_for_ctype($text); |
|
131 | - |
|
132 | - return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); |
|
133 | - } |
|
134 | - |
|
135 | - /** |
|
136 | - * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. |
|
137 | - * |
|
138 | - * @see https://php.net/ctype-punct |
|
139 | - * |
|
140 | - * @param string|int $text |
|
141 | - * |
|
142 | - * @return bool |
|
143 | - */ |
|
144 | - public static function ctype_punct($text) |
|
145 | - { |
|
146 | - $text = self::convert_int_to_char_for_ctype($text); |
|
147 | - |
|
148 | - return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); |
|
149 | - } |
|
150 | - |
|
151 | - /** |
|
152 | - * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. |
|
153 | - * |
|
154 | - * @see https://php.net/ctype-space |
|
155 | - * |
|
156 | - * @param string|int $text |
|
157 | - * |
|
158 | - * @return bool |
|
159 | - */ |
|
160 | - public static function ctype_space($text) |
|
161 | - { |
|
162 | - $text = self::convert_int_to_char_for_ctype($text); |
|
163 | - |
|
164 | - return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); |
|
165 | - } |
|
166 | - |
|
167 | - /** |
|
168 | - * Returns TRUE if every character in text is an uppercase letter. |
|
169 | - * |
|
170 | - * @see https://php.net/ctype-upper |
|
171 | - * |
|
172 | - * @param string|int $text |
|
173 | - * |
|
174 | - * @return bool |
|
175 | - */ |
|
176 | - public static function ctype_upper($text) |
|
177 | - { |
|
178 | - $text = self::convert_int_to_char_for_ctype($text); |
|
179 | - |
|
180 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); |
|
181 | - } |
|
182 | - |
|
183 | - /** |
|
184 | - * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. |
|
185 | - * |
|
186 | - * @see https://php.net/ctype-xdigit |
|
187 | - * |
|
188 | - * @param string|int $text |
|
189 | - * |
|
190 | - * @return bool |
|
191 | - */ |
|
192 | - public static function ctype_xdigit($text) |
|
193 | - { |
|
194 | - $text = self::convert_int_to_char_for_ctype($text); |
|
195 | - |
|
196 | - return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); |
|
197 | - } |
|
198 | - |
|
199 | - /** |
|
200 | - * Converts integers to their char versions according to normal ctype behaviour, if needed. |
|
201 | - * |
|
202 | - * If an integer between -128 and 255 inclusive is provided, |
|
203 | - * it is interpreted as the ASCII value of a single character |
|
204 | - * (negative values have 256 added in order to allow characters in the Extended ASCII range). |
|
205 | - * Any other integer is interpreted as a string containing the decimal digits of the integer. |
|
206 | - * |
|
207 | - * @param string|int $int |
|
208 | - * |
|
209 | - * @return mixed |
|
210 | - */ |
|
211 | - private static function convert_int_to_char_for_ctype($int) |
|
212 | - { |
|
213 | - if (!\is_int($int)) { |
|
214 | - return $int; |
|
215 | - } |
|
216 | - |
|
217 | - if ($int < -128 || $int > 255) { |
|
218 | - return (string) $int; |
|
219 | - } |
|
220 | - |
|
221 | - if ($int < 0) { |
|
222 | - $int += 256; |
|
223 | - } |
|
224 | - |
|
225 | - return \chr($int); |
|
226 | - } |
|
23 | + /** |
|
24 | + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. |
|
25 | + * |
|
26 | + * @see https://php.net/ctype-alnum |
|
27 | + * |
|
28 | + * @param string|int $text |
|
29 | + * |
|
30 | + * @return bool |
|
31 | + */ |
|
32 | + public static function ctype_alnum($text) |
|
33 | + { |
|
34 | + $text = self::convert_int_to_char_for_ctype($text); |
|
35 | + |
|
36 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); |
|
37 | + } |
|
38 | + |
|
39 | + /** |
|
40 | + * Returns TRUE if every character in text is a letter, FALSE otherwise. |
|
41 | + * |
|
42 | + * @see https://php.net/ctype-alpha |
|
43 | + * |
|
44 | + * @param string|int $text |
|
45 | + * |
|
46 | + * @return bool |
|
47 | + */ |
|
48 | + public static function ctype_alpha($text) |
|
49 | + { |
|
50 | + $text = self::convert_int_to_char_for_ctype($text); |
|
51 | + |
|
52 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); |
|
53 | + } |
|
54 | + |
|
55 | + /** |
|
56 | + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. |
|
57 | + * |
|
58 | + * @see https://php.net/ctype-cntrl |
|
59 | + * |
|
60 | + * @param string|int $text |
|
61 | + * |
|
62 | + * @return bool |
|
63 | + */ |
|
64 | + public static function ctype_cntrl($text) |
|
65 | + { |
|
66 | + $text = self::convert_int_to_char_for_ctype($text); |
|
67 | + |
|
68 | + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); |
|
69 | + } |
|
70 | + |
|
71 | + /** |
|
72 | + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. |
|
73 | + * |
|
74 | + * @see https://php.net/ctype-digit |
|
75 | + * |
|
76 | + * @param string|int $text |
|
77 | + * |
|
78 | + * @return bool |
|
79 | + */ |
|
80 | + public static function ctype_digit($text) |
|
81 | + { |
|
82 | + $text = self::convert_int_to_char_for_ctype($text); |
|
83 | + |
|
84 | + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); |
|
85 | + } |
|
86 | + |
|
87 | + /** |
|
88 | + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. |
|
89 | + * |
|
90 | + * @see https://php.net/ctype-graph |
|
91 | + * |
|
92 | + * @param string|int $text |
|
93 | + * |
|
94 | + * @return bool |
|
95 | + */ |
|
96 | + public static function ctype_graph($text) |
|
97 | + { |
|
98 | + $text = self::convert_int_to_char_for_ctype($text); |
|
99 | + |
|
100 | + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); |
|
101 | + } |
|
102 | + |
|
103 | + /** |
|
104 | + * Returns TRUE if every character in text is a lowercase letter. |
|
105 | + * |
|
106 | + * @see https://php.net/ctype-lower |
|
107 | + * |
|
108 | + * @param string|int $text |
|
109 | + * |
|
110 | + * @return bool |
|
111 | + */ |
|
112 | + public static function ctype_lower($text) |
|
113 | + { |
|
114 | + $text = self::convert_int_to_char_for_ctype($text); |
|
115 | + |
|
116 | + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. |
|
121 | + * |
|
122 | + * @see https://php.net/ctype-print |
|
123 | + * |
|
124 | + * @param string|int $text |
|
125 | + * |
|
126 | + * @return bool |
|
127 | + */ |
|
128 | + public static function ctype_print($text) |
|
129 | + { |
|
130 | + $text = self::convert_int_to_char_for_ctype($text); |
|
131 | + |
|
132 | + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); |
|
133 | + } |
|
134 | + |
|
135 | + /** |
|
136 | + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. |
|
137 | + * |
|
138 | + * @see https://php.net/ctype-punct |
|
139 | + * |
|
140 | + * @param string|int $text |
|
141 | + * |
|
142 | + * @return bool |
|
143 | + */ |
|
144 | + public static function ctype_punct($text) |
|
145 | + { |
|
146 | + $text = self::convert_int_to_char_for_ctype($text); |
|
147 | + |
|
148 | + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); |
|
149 | + } |
|
150 | + |
|
151 | + /** |
|
152 | + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. |
|
153 | + * |
|
154 | + * @see https://php.net/ctype-space |
|
155 | + * |
|
156 | + * @param string|int $text |
|
157 | + * |
|
158 | + * @return bool |
|
159 | + */ |
|
160 | + public static function ctype_space($text) |
|
161 | + { |
|
162 | + $text = self::convert_int_to_char_for_ctype($text); |
|
163 | + |
|
164 | + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); |
|
165 | + } |
|
166 | + |
|
167 | + /** |
|
168 | + * Returns TRUE if every character in text is an uppercase letter. |
|
169 | + * |
|
170 | + * @see https://php.net/ctype-upper |
|
171 | + * |
|
172 | + * @param string|int $text |
|
173 | + * |
|
174 | + * @return bool |
|
175 | + */ |
|
176 | + public static function ctype_upper($text) |
|
177 | + { |
|
178 | + $text = self::convert_int_to_char_for_ctype($text); |
|
179 | + |
|
180 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); |
|
181 | + } |
|
182 | + |
|
183 | + /** |
|
184 | + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. |
|
185 | + * |
|
186 | + * @see https://php.net/ctype-xdigit |
|
187 | + * |
|
188 | + * @param string|int $text |
|
189 | + * |
|
190 | + * @return bool |
|
191 | + */ |
|
192 | + public static function ctype_xdigit($text) |
|
193 | + { |
|
194 | + $text = self::convert_int_to_char_for_ctype($text); |
|
195 | + |
|
196 | + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); |
|
197 | + } |
|
198 | + |
|
199 | + /** |
|
200 | + * Converts integers to their char versions according to normal ctype behaviour, if needed. |
|
201 | + * |
|
202 | + * If an integer between -128 and 255 inclusive is provided, |
|
203 | + * it is interpreted as the ASCII value of a single character |
|
204 | + * (negative values have 256 added in order to allow characters in the Extended ASCII range). |
|
205 | + * Any other integer is interpreted as a string containing the decimal digits of the integer. |
|
206 | + * |
|
207 | + * @param string|int $int |
|
208 | + * |
|
209 | + * @return mixed |
|
210 | + */ |
|
211 | + private static function convert_int_to_char_for_ctype($int) |
|
212 | + { |
|
213 | + if (!\is_int($int)) { |
|
214 | + return $int; |
|
215 | + } |
|
216 | + |
|
217 | + if ($int < -128 || $int > 255) { |
|
218 | + return (string) $int; |
|
219 | + } |
|
220 | + |
|
221 | + if ($int < 0) { |
|
222 | + $int += 256; |
|
223 | + } |
|
224 | + |
|
225 | + return \chr($int); |
|
226 | + } |
|
227 | 227 | } |
@@ -10,18 +10,18 @@ |
||
10 | 10 | */ |
11 | 11 | |
12 | 12 | if (!function_exists('trigger_deprecation')) { |
13 | - /** |
|
14 | - * Triggers a silenced deprecation notice. |
|
15 | - * |
|
16 | - * @param string $package The name of the Composer package that is triggering the deprecation |
|
17 | - * @param string $version The version of the package that introduced the deprecation |
|
18 | - * @param string $message The message of the deprecation |
|
19 | - * @param mixed ...$args Values to insert in the message using printf() formatting |
|
20 | - * |
|
21 | - * @author Nicolas Grekas <[email protected]> |
|
22 | - */ |
|
23 | - function trigger_deprecation(string $package, string $version, string $message, ...$args): void |
|
24 | - { |
|
25 | - @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); |
|
26 | - } |
|
13 | + /** |
|
14 | + * Triggers a silenced deprecation notice. |
|
15 | + * |
|
16 | + * @param string $package The name of the Composer package that is triggering the deprecation |
|
17 | + * @param string $version The version of the package that introduced the deprecation |
|
18 | + * @param string $message The message of the deprecation |
|
19 | + * @param mixed ...$args Values to insert in the message using printf() formatting |
|
20 | + * |
|
21 | + * @author Nicolas Grekas <[email protected]> |
|
22 | + */ |
|
23 | + function trigger_deprecation(string $package, string $version, string $message, ...$args): void |
|
24 | + { |
|
25 | + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); |
|
26 | + } |
|
27 | 27 | } |
@@ -20,50 +20,50 @@ |
||
20 | 20 | */ |
21 | 21 | class ProcessTimedOutException extends RuntimeException |
22 | 22 | { |
23 | - public const TYPE_GENERAL = 1; |
|
24 | - public const TYPE_IDLE = 2; |
|
23 | + public const TYPE_GENERAL = 1; |
|
24 | + public const TYPE_IDLE = 2; |
|
25 | 25 | |
26 | - private $process; |
|
27 | - private $timeoutType; |
|
26 | + private $process; |
|
27 | + private $timeoutType; |
|
28 | 28 | |
29 | - public function __construct(Process $process, int $timeoutType) |
|
30 | - { |
|
31 | - $this->process = $process; |
|
32 | - $this->timeoutType = $timeoutType; |
|
29 | + public function __construct(Process $process, int $timeoutType) |
|
30 | + { |
|
31 | + $this->process = $process; |
|
32 | + $this->timeoutType = $timeoutType; |
|
33 | 33 | |
34 | - parent::__construct(sprintf( |
|
35 | - 'The process "%s" exceeded the timeout of %s seconds.', |
|
36 | - $process->getCommandLine(), |
|
37 | - $this->getExceededTimeout() |
|
38 | - )); |
|
39 | - } |
|
34 | + parent::__construct(sprintf( |
|
35 | + 'The process "%s" exceeded the timeout of %s seconds.', |
|
36 | + $process->getCommandLine(), |
|
37 | + $this->getExceededTimeout() |
|
38 | + )); |
|
39 | + } |
|
40 | 40 | |
41 | - public function getProcess() |
|
42 | - { |
|
43 | - return $this->process; |
|
44 | - } |
|
41 | + public function getProcess() |
|
42 | + { |
|
43 | + return $this->process; |
|
44 | + } |
|
45 | 45 | |
46 | - public function isGeneralTimeout() |
|
47 | - { |
|
48 | - return self::TYPE_GENERAL === $this->timeoutType; |
|
49 | - } |
|
46 | + public function isGeneralTimeout() |
|
47 | + { |
|
48 | + return self::TYPE_GENERAL === $this->timeoutType; |
|
49 | + } |
|
50 | 50 | |
51 | - public function isIdleTimeout() |
|
52 | - { |
|
53 | - return self::TYPE_IDLE === $this->timeoutType; |
|
54 | - } |
|
51 | + public function isIdleTimeout() |
|
52 | + { |
|
53 | + return self::TYPE_IDLE === $this->timeoutType; |
|
54 | + } |
|
55 | 55 | |
56 | - public function getExceededTimeout() |
|
57 | - { |
|
58 | - switch ($this->timeoutType) { |
|
59 | - case self::TYPE_GENERAL: |
|
60 | - return $this->process->getTimeout(); |
|
56 | + public function getExceededTimeout() |
|
57 | + { |
|
58 | + switch ($this->timeoutType) { |
|
59 | + case self::TYPE_GENERAL: |
|
60 | + return $this->process->getTimeout(); |
|
61 | 61 | |
62 | - case self::TYPE_IDLE: |
|
63 | - return $this->process->getIdleTimeout(); |
|
62 | + case self::TYPE_IDLE: |
|
63 | + return $this->process->getIdleTimeout(); |
|
64 | 64 | |
65 | - default: |
|
66 | - throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)); |
|
67 | - } |
|
68 | - } |
|
65 | + default: |
|
66 | + throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType)); |
|
67 | + } |
|
68 | + } |
|
69 | 69 | } |
@@ -20,35 +20,35 @@ |
||
20 | 20 | */ |
21 | 21 | class ProcessFailedException extends RuntimeException |
22 | 22 | { |
23 | - private $process; |
|
24 | - |
|
25 | - public function __construct(Process $process) |
|
26 | - { |
|
27 | - if ($process->isSuccessful()) { |
|
28 | - throw new InvalidArgumentException('Expected a failed process, but the given process was successful.'); |
|
29 | - } |
|
30 | - |
|
31 | - $error = sprintf('The command "%s" failed.'."\n\nExit Code: %s(%s)\n\nWorking directory: %s", |
|
32 | - $process->getCommandLine(), |
|
33 | - $process->getExitCode(), |
|
34 | - $process->getExitCodeText(), |
|
35 | - $process->getWorkingDirectory() |
|
36 | - ); |
|
37 | - |
|
38 | - if (!$process->isOutputDisabled()) { |
|
39 | - $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", |
|
40 | - $process->getOutput(), |
|
41 | - $process->getErrorOutput() |
|
42 | - ); |
|
43 | - } |
|
44 | - |
|
45 | - parent::__construct($error); |
|
46 | - |
|
47 | - $this->process = $process; |
|
48 | - } |
|
49 | - |
|
50 | - public function getProcess() |
|
51 | - { |
|
52 | - return $this->process; |
|
53 | - } |
|
23 | + private $process; |
|
24 | + |
|
25 | + public function __construct(Process $process) |
|
26 | + { |
|
27 | + if ($process->isSuccessful()) { |
|
28 | + throw new InvalidArgumentException('Expected a failed process, but the given process was successful.'); |
|
29 | + } |
|
30 | + |
|
31 | + $error = sprintf('The command "%s" failed.'."\n\nExit Code: %s(%s)\n\nWorking directory: %s", |
|
32 | + $process->getCommandLine(), |
|
33 | + $process->getExitCode(), |
|
34 | + $process->getExitCodeText(), |
|
35 | + $process->getWorkingDirectory() |
|
36 | + ); |
|
37 | + |
|
38 | + if (!$process->isOutputDisabled()) { |
|
39 | + $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", |
|
40 | + $process->getOutput(), |
|
41 | + $process->getErrorOutput() |
|
42 | + ); |
|
43 | + } |
|
44 | + |
|
45 | + parent::__construct($error); |
|
46 | + |
|
47 | + $this->process = $process; |
|
48 | + } |
|
49 | + |
|
50 | + public function getProcess() |
|
51 | + { |
|
52 | + return $this->process; |
|
53 | + } |
|
54 | 54 | } |
@@ -20,22 +20,22 @@ |
||
20 | 20 | */ |
21 | 21 | final class ProcessSignaledException extends RuntimeException |
22 | 22 | { |
23 | - private $process; |
|
23 | + private $process; |
|
24 | 24 | |
25 | - public function __construct(Process $process) |
|
26 | - { |
|
27 | - $this->process = $process; |
|
25 | + public function __construct(Process $process) |
|
26 | + { |
|
27 | + $this->process = $process; |
|
28 | 28 | |
29 | - parent::__construct(sprintf('The process has been signaled with signal "%s".', $process->getTermSignal())); |
|
30 | - } |
|
29 | + parent::__construct(sprintf('The process has been signaled with signal "%s".', $process->getTermSignal())); |
|
30 | + } |
|
31 | 31 | |
32 | - public function getProcess(): Process |
|
33 | - { |
|
34 | - return $this->process; |
|
35 | - } |
|
32 | + public function getProcess(): Process |
|
33 | + { |
|
34 | + return $this->process; |
|
35 | + } |
|
36 | 36 | |
37 | - public function getSignal(): int |
|
38 | - { |
|
39 | - return $this->getProcess()->getTermSignal(); |
|
40 | - } |
|
37 | + public function getSignal(): int |
|
38 | + { |
|
39 | + return $this->getProcess()->getTermSignal(); |
|
40 | + } |
|
41 | 41 | } |