-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRTest.php
More file actions
118 lines (91 loc) · 3.74 KB
/
RTest.php
File metadata and controls
118 lines (91 loc) · 3.74 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
<?php
declare(strict_types=1);
namespace SlamTest\Debug;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use stdClass;
final class RTest extends TestCase
{
private const STREAM_FILTER_NAME = 'STDERR_MOCK';
private static bool $isStreamFilterRegistered = false;
/** @var resource */
private $registeredFilter;
protected function setUp(): void
{
if (true !== self::$isStreamFilterRegistered) {
self::$isStreamFilterRegistered = \stream_filter_register(self::STREAM_FILTER_NAME, MockStderr::class);
}
MockStderr::$output = '';
$this->registeredFilter = \stream_filter_prepend(\STDERR, self::STREAM_FILTER_NAME, \STREAM_FILTER_WRITE);
}
protected function tearDown(): void
{
\stream_filter_remove($this->registeredFilter);
}
public function testScalar(): void
{
r(1, false);
self::assertStringContainsString(__FILE__, MockStderr::$output);
self::assertStringContainsString('int(1)', MockStderr::$output);
}
public function testNonScalar(): void
{
r([1 => 2], false);
self::assertStringContainsString(__FILE__, MockStderr::$output);
self::assertStringContainsString("Array\n(\n [1] => 2\n)", MockStderr::$output);
}
public function testFullstackOutput(): void
{
r(1, false, 0, true);
self::assertStringContainsString(__FILE__, MockStderr::$output);
self::assertStringContainsString(__FUNCTION__, MockStderr::$output);
self::assertStringContainsString('TestCase', MockStderr::$output);
self::assertMatchesRegularExpression(\sprintf('/%s:\d+\b/', \preg_quote(__FILE__, '/')), MockStderr::$output);
self::assertStringContainsString('TextUI/Application', MockStderr::$output);
}
public function testStripEntriesFromFullstack(): void
{
r(1, false, 0, true, 'TextUI');
self::assertStringContainsString(__FILE__, MockStderr::$output);
self::assertStringContainsString(__FUNCTION__, MockStderr::$output);
self::assertStringContainsString('TestCase', MockStderr::$output);
self::assertStringNotContainsString('TextUI/Command', MockStderr::$output);
}
public function testQueryDebug(): void
{
rq('SELECT * FROM table WHERE c1 = :p1 AND c1 = :p11 AND c1 = :p2', ['p1' => 1, 'p11' => 2, 'p2' => '\''], false, 0, true);
self::assertStringContainsString('SELECT * FROM table WHERE c1 = \'1\' AND c1 = \'2\' AND c1 = \'\\\'\'', MockStderr::$output);
}
public function testDoctrine(): void
{
r(new stdClass(), false, 1);
self::assertStringContainsString(__FILE__, MockStderr::$output);
self::assertStringContainsString('__CLASS__', MockStderr::$output);
}
public function testClearRootPath(): void
{
\define('ROOT_PATH', __DIR__);
r(1, false);
self::assertStringContainsString(\basename(__FILE__), MockStderr::$output);
self::assertStringNotContainsString(__DIR__, MockStderr::$output);
}
#[DataProvider('provideCallArgumentDetailsCases')]
public function testCallArgumentDetails($argument, string $expectedNeedle): void
{
r($argument, false);
self::assertStringContainsString($expectedNeedle, MockStderr::$output);
}
public static function provideCallArgumentDetailsCases(): iterable
{
return [
[new stdClass(), 'r(stdClass,'],
[[1, 2], 'r(array:2,'],
[3, 'r(integer:3,'],
['4', 'r(string:4,'],
[5.1, 'r(double:5.1,'],
[null, 'r(NULL,'],
[true, 'r(boolean:true,'],
[\str_repeat('foobar ', 10), 'r(string:70:foobar foobar foobar [...],'],
];
}
}