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