|
9 | 9 |
|
10 | 10 | final class RTest extends TestCase |
11 | 11 | { |
| 12 | + const STREAM_FILTER_NAME = 'STDERR_MOCK'; |
| 13 | + |
| 14 | + private static $isStreamFilterRegistered; |
| 15 | + |
| 16 | + private $registeredFilter; |
| 17 | + |
| 18 | + protected function setUp() |
| 19 | + { |
| 20 | + if (true !== self::$isStreamFilterRegistered) { |
| 21 | + self::$isStreamFilterRegistered = \stream_filter_register(self::STREAM_FILTER_NAME, MockStderr::class); |
| 22 | + } |
| 23 | + |
| 24 | + MockStderr::$output = ''; |
| 25 | + $this->registeredFilter = \stream_filter_prepend(\STDERR, self::STREAM_FILTER_NAME, \STREAM_FILTER_WRITE); |
| 26 | + } |
| 27 | + |
| 28 | + protected function tearDown() |
| 29 | + { |
| 30 | + \stream_filter_remove($this->registeredFilter); |
| 31 | + } |
| 32 | + |
12 | 33 | public function testScalar() |
13 | 34 | { |
14 | | - \ob_start(); |
15 | 35 | r(1, false); |
16 | | - $output = \ob_get_clean(); |
17 | 36 |
|
18 | | - $this->assertContains(__FILE__, $output); |
19 | | - $this->assertContains('int(1)', $output); |
| 37 | + $this->assertContains(__FILE__, MockStderr::$output); |
| 38 | + $this->assertContains('int(1)', MockStderr::$output); |
20 | 39 | } |
21 | 40 |
|
22 | 41 | public function testNonScalar() |
23 | 42 | { |
24 | | - \ob_start(); |
25 | | - r(array(1 => 2), false); |
26 | | - $output = \ob_get_clean(); |
| 43 | + r([1 => 2], false); |
27 | 44 |
|
28 | | - $this->assertContains(__FILE__, $output); |
29 | | - $this->assertContains("Array\n(\n [1] => 2\n)", $output); |
| 45 | + $this->assertContains(__FILE__, MockStderr::$output); |
| 46 | + $this->assertContains("Array\n(\n [1] => 2\n)", MockStderr::$output); |
30 | 47 | } |
31 | 48 |
|
32 | 49 | public function testFullstackOutput() |
33 | 50 | { |
34 | | - \ob_start(); |
35 | 51 | r(1, false, 0, true); |
36 | | - $output = \ob_get_clean(); |
37 | 52 |
|
38 | | - $this->assertContains(__FILE__, $output); |
39 | | - $this->assertContains(__FUNCTION__, $output); |
40 | | - $this->assertContains('TestCase', $output); |
| 53 | + $this->assertContains(__FILE__, MockStderr::$output); |
| 54 | + $this->assertContains(__FUNCTION__, MockStderr::$output); |
| 55 | + $this->assertContains('TestCase', MockStderr::$output); |
41 | 56 | } |
42 | 57 |
|
43 | 58 | public function testQueryDebug() |
44 | 59 | { |
45 | | - \ob_start(); |
46 | | - rq('SELECT * FROM table WHERE c1 = :p1 AND c1 = :p11 AND c1 = :p2', array('p1' => 1, 'p11' => 2, 'p2' => '"'), false, 0, true); |
47 | | - $output = \ob_get_clean(); |
| 60 | + rq('SELECT * FROM table WHERE c1 = :p1 AND c1 = :p11 AND c1 = :p2', ['p1' => 1, 'p11' => 2, 'p2' => '"'], false, 0, true); |
48 | 61 |
|
49 | | - $this->assertContains('SELECT * FROM table WHERE c1 = "1" AND c1 = "2" AND c1 = "\\""', $output); |
| 62 | + $this->assertContains('SELECT * FROM table WHERE c1 = "1" AND c1 = "2" AND c1 = "\\""', MockStderr::$output); |
50 | 63 | } |
51 | 64 |
|
52 | 65 | public function testDoctrine() |
53 | 66 | { |
54 | | - \ob_start(); |
55 | 67 | r(new stdClass(), false, 1); |
56 | | - $output = \ob_get_clean(); |
57 | 68 |
|
58 | | - $this->assertContains(__FILE__, $output); |
59 | | - $this->assertContains('__CLASS__', $output); |
| 69 | + $this->assertContains(__FILE__, MockStderr::$output); |
| 70 | + $this->assertContains('__CLASS__', MockStderr::$output); |
60 | 71 | } |
61 | 72 |
|
62 | 73 | public function testClearRootPath() |
63 | 74 | { |
64 | 75 | \define('ROOT_PATH', __DIR__); |
65 | 76 |
|
66 | | - \ob_start(); |
67 | 77 | r(1, false); |
68 | | - $output = \ob_get_clean(); |
69 | 78 |
|
70 | | - $this->assertContains(\basename(__FILE__), $output); |
71 | | - $this->assertNotContains(__DIR__, $output); |
| 79 | + $this->assertContains(\basename(__FILE__), MockStderr::$output); |
| 80 | + $this->assertNotContains(__DIR__, MockStderr::$output); |
72 | 81 | } |
73 | 82 | } |
0 commit comments