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