1818use Symfony \Component \HttpFoundation \Request ;
1919use Symfony \Component \HttpFoundation \Response ;
2020use Symfony \Component \VarDumper \Cloner \Data ;
21+ use Symfony \Component \VarDumper \Dumper \CliDumper ;
2122
2223class DoctrineDataCollectorTestextends TestCase
2324{
@@ -74,7 +75,7 @@ public function testCollectTime()
7475/**
7576 * @dataProvider paramProvider
7677 */
77- public function testCollectQueries ($ param ,$ types ,$ expected ,$ explainable )
78+ public function testCollectQueries ($ param ,$ types ,$ expected ,$ explainable, bool $ runnable = true )
7879 {
7980$ queries = [
8081 ['sql ' =>'SELECT * FROM table1 WHERE field1 = ?1 ' ,'params ' => [$ param ],'types ' =>$ types ,'executionMS ' =>1 ],
@@ -83,8 +84,19 @@ public function testCollectQueries($param, $types, $expected, $explainable)
8384$ c ->collect (new Request (),new Response ());
8485
8586$ collectedQueries =$ c ->getQueries ();
86- $ this ->assertEquals ($ expected ,$ collectedQueries ['default ' ][0 ]['params ' ][0 ]);
87+
88+ $ collectedParam =$ collectedQueries ['default ' ][0 ]['params ' ][0 ];
89+ if ($ collectedParaminstanceof 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+
8798$ this ->assertEquals ($ explainable ,$ collectedQueries ['default ' ][0 ]['explainable ' ]);
99+ $ this ->assertSame ($ runnable ,$ collectedQueries ['default ' ][0 ]['runnable ' ]);
88100 }
89101
90102public function testCollectQueryWithNoParams ()
@@ -100,9 +112,11 @@ public function testCollectQueryWithNoParams()
100112$ this ->assertInstanceOf (Data::class,$ collectedQueries ['default ' ][0 ]['params ' ]);
101113$ this ->assertEquals ([],$ collectedQueries ['default ' ][0 ]['params ' ]->getValue ());
102114$ this ->assertTrue ($ collectedQueries ['default ' ][0 ]['explainable ' ]);
115+ $ this ->assertTrue ($ collectedQueries ['default ' ][0 ]['runnable ' ]);
103116$ this ->assertInstanceOf (Data::class,$ collectedQueries ['default ' ][1 ]['params ' ]);
104117$ this ->assertEquals ([],$ collectedQueries ['default ' ][1 ]['params ' ]->getValue ());
105118$ this ->assertTrue ($ collectedQueries ['default ' ][1 ]['explainable ' ]);
119+ $ this ->assertTrue ($ collectedQueries ['default ' ][1 ]['runnable ' ]);
106120 }
107121
108122public function testCollectQueryWithNoTypes ()
@@ -134,7 +148,7 @@ public function testReset()
134148/**
135149 * @dataProvider paramProvider
136150 */
137- public function testSerialization ($ param ,$ types ,$ expected ,$ explainable )
151+ public function testSerialization ($ param ,$ types ,$ expected ,$ explainable, bool $ runnable = true )
138152 {
139153$ queries = [
140154 ['sql ' =>'SELECT * FROM table1 WHERE field1 = ?1 ' ,'params ' => [$ param ],'types ' =>$ types ,'executionMS ' =>1 ],
@@ -144,8 +158,19 @@ public function testSerialization($param, $types, $expected, $explainable)
144158$ c =unserialize (serialize ($ c ));
145159
146160$ collectedQueries =$ c ->getQueries ();
147- $ this ->assertEquals ($ expected ,$ collectedQueries ['default ' ][0 ]['params ' ][0 ]);
161+
162+ $ collectedParam =$ collectedQueries ['default ' ][0 ]['params ' ][0 ];
163+ if ($ collectedParaminstanceof 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+
148172$ this ->assertEquals ($ explainable ,$ collectedQueries ['default ' ][0 ]['explainable ' ]);
173+ $ this ->assertSame ($ runnable ,$ collectedQueries ['default ' ][0 ]['runnable ' ]);
149174 }
150175
151176public function paramProvider ()
@@ -156,19 +181,46 @@ public function paramProvider()
156181 [true , [],true ,true ],
157182 [null , [],null ,true ],
158183 [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+ ],
161197 [
162198new StringRepresentableClass (),
163199 [],
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+ ,
165206false ,
166207 ],
167208 ];
168209
169210if (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+ ];
172224 }
173225
174226return $ tests ;