18
18
use Symfony \Component \HttpFoundation \Request ;
19
19
use Symfony \Component \HttpFoundation \Response ;
20
20
use Symfony \Component \VarDumper \Cloner \Data ;
21
+ use Symfony \Component \VarDumper \Dumper \CliDumper ;
21
22
22
23
class DoctrineDataCollectorTest extends TestCase
23
24
{
@@ -74,7 +75,7 @@ public function testCollectTime()
74
75
/**
75
76
* @dataProvider paramProvider
76
77
*/
77
- public function testCollectQueries ($ param , $ types , $ expected , $ explainable )
78
+ public function testCollectQueries ($ param , $ types , $ expected , $ explainable, bool $ runnable )
78
79
{
79
80
$ queries = [
80
81
['sql ' => 'SELECT * FROM table1 WHERE field1 = ?1 ' , 'params ' => [$ param ], 'types ' => $ types , 'executionMS ' => 1 ],
@@ -83,8 +84,17 @@ public function testCollectQueries($param, $types, $expected, $explainable)
83
84
$ c ->collect (new Request (), new Response ());
84
85
85
86
$ collectedQueries = $ c ->getQueries ();
86
- $ this ->assertEquals ($ expected , $ collectedQueries ['default ' ][0 ]['params ' ][0 ]);
87
+
88
+ $ collectedParam = $ collectedQueries ['default ' ][0 ]['params ' ][0 ];
89
+ if ($ collectedParam instanceof Data) {
90
+ $ collectedParam ->dump (new CliDumper ($ out = fopen ('php://memory ' , 'r+b ' )));
91
+ $ this ->assertStringMatchesFormat ($ expected , print_r (stream_get_contents ($ out , -1 , 0 ), true ));
92
+ } else {
93
+ $ this ->assertEquals ($ expected , $ collectedParam );
94
+ }
95
+
87
96
$ this ->assertEquals ($ explainable , $ collectedQueries ['default ' ][0 ]['explainable ' ]);
97
+ $ this ->assertSame ($ runnable , $ collectedQueries ['default ' ][0 ]['runnable ' ]);
88
98
}
89
99
90
100
public function testCollectQueryWithNoParams ()
@@ -100,9 +110,11 @@ public function testCollectQueryWithNoParams()
100
110
$ this ->assertInstanceOf (Data::class, $ collectedQueries ['default ' ][0 ]['params ' ]);
101
111
$ this ->assertEquals ([], $ collectedQueries ['default ' ][0 ]['params ' ]->getValue ());
102
112
$ this ->assertTrue ($ collectedQueries ['default ' ][0 ]['explainable ' ]);
113
+ $ this ->assertTrue ($ collectedQueries ['default ' ][0 ]['runnable ' ]);
103
114
$ this ->assertInstanceOf (Data::class, $ collectedQueries ['default ' ][1 ]['params ' ]);
104
115
$ this ->assertEquals ([], $ collectedQueries ['default ' ][1 ]['params ' ]->getValue ());
105
116
$ this ->assertTrue ($ collectedQueries ['default ' ][1 ]['explainable ' ]);
117
+ $ this ->assertTrue ($ collectedQueries ['default ' ][1 ]['runnable ' ]);
106
118
}
107
119
108
120
public function testCollectQueryWithNoTypes ()
@@ -134,7 +146,7 @@ public function testReset()
134
146
/**
135
147
* @dataProvider paramProvider
136
148
*/
137
- public function testSerialization ($ param , $ types , $ expected , $ explainable )
149
+ public function testSerialization ($ param , $ types , $ expected , $ explainable, bool $ runnable )
138
150
{
139
151
$ queries = [
140
152
['sql ' => 'SELECT * FROM table1 WHERE field1 = ?1 ' , 'params ' => [$ param ], 'types ' => $ types , 'executionMS ' => 1 ],
@@ -144,31 +156,65 @@ public function testSerialization($param, $types, $expected, $explainable)
144
156
$ c = unserialize (serialize ($ c ));
145
157
146
158
$ collectedQueries = $ c ->getQueries ();
147
- $ this ->assertEquals ($ expected , $ collectedQueries ['default ' ][0 ]['params ' ][0 ]);
159
+
160
+ $ collectedParam = $ collectedQueries ['default ' ][0 ]['params ' ][0 ];
161
+ if ($ collectedParam instanceof Data) {
162
+ $ collectedParam ->dump (new CliDumper ($ out = fopen ('php://memory ' , 'r+b ' )));
163
+ $ this ->assertStringMatchesFormat ($ expected , print_r (stream_get_contents ($ out , -1 , 0 ), true ));
164
+ } else {
165
+ $ this ->assertEquals ($ expected , $ collectedParam );
166
+ }
167
+
148
168
$ this ->assertEquals ($ explainable , $ collectedQueries ['default ' ][0 ]['explainable ' ]);
169
+ $ this ->assertSame ($ runnable , $ collectedQueries ['default ' ][0 ]['runnable ' ]);
149
170
}
150
171
151
172
public function paramProvider ()
152
173
{
153
174
$ tests = [
154
- ['some value ' , [], 'some value ' , true ],
155
- [1 , [], 1 , true ],
156
- [true , [], true , true ],
157
- [null , [], null , true ],
158
- [new \DateTime ('2011-09-11 ' ), ['date ' ], '2011-09-11 ' , true ],
159
- [fopen (__FILE__ , 'r ' ), [], '/* Resource(stream) */ ' , false ],
160
- [new \stdClass (), [], '/* Object(stdClass) */ ' , false ],
175
+ ['some value ' , [], 'some value ' , true , true ],
176
+ [1 , [], 1 , true , true ],
177
+ [true , [], true , true , true ],
178
+ [null , [], null , true , true ],
179
+ [new \DateTime ('2011-09-11 ' ), ['date ' ], '2011-09-11 ' , true , true ],
180
+ [fopen (__FILE__ , 'r ' ), [], '/* Resource(stream) */ ' , false , false ],
181
+ [
182
+ new \stdClass (),
183
+ [],
184
+ <<<EOTXT
185
+ {#%d
186
+ ⚠: "Object of class "stdClass" could not be converted to string."
187
+ }
188
+ EOTXT
189
+ , false , false , ],
161
190
[
162
191
new StringRepresentableClass (),
163
192
[],
164
- '/* Object(Symfony\Bridge\Doctrine\Tests\DataCollector\StringRepresentableClass): */"string representation" ' ,
193
+ <<<EOTXT
194
+ Symfony\Bridge\Doctrine\Tests\DataCollector\StringRepresentableClass {#%d
195
+ __toString(): "string representation"
196
+ }
197
+ EOTXT
198
+ ,
165
199
false ,
200
+ true ,
166
201
],
167
202
];
168
203
169
204
if (version_compare (Version::VERSION , '2.6 ' , '>= ' )) {
170
- $ tests [] = ['this is not a date ' , ['date ' ], 'this is not a date ' , false ];
171
- $ tests [] = [new \stdClass (), ['date ' ], '/* Object(stdClass) */ ' , false ];
205
+ $ tests [] = ['this is not a date ' , ['date ' ], "⚠ Could not convert PHP value 'this is not a date' of type 'string' to type 'date'. Expected one of the following types: null, DateTime " , false , false ];
206
+ $ tests [] = [
207
+ new \stdClass (),
208
+ ['date ' ],
209
+ <<<EOTXT
210
+ {#%d
211
+ ⚠: "Could not convert PHP value of type 'stdClass' to type 'date'. Expected one of the following types: null, DateTime"
212
+ }
213
+ EOTXT
214
+ ,
215
+ false ,
216
+ false ,
217
+ ];
172
218
}
173
219
174
220
return $ tests ;
0 commit comments