@@ -22,6 +22,23 @@ public function testParse()
22
22
}
23
23
}
24
24
25
+ public function testParseWithMapObjects ()
26
+ {
27
+ foreach ($ this ->getTestsForMapObjectParse () as $ yaml => $ value ) {
28
+ $ actual = Inline::parse ($ yaml , false , false , true );
29
+ if (true === is_object ($ value )) {
30
+ $ this ->assertInstanceOf (get_class ($ value ), $ actual );
31
+ $ this ->assertEquals (get_object_vars ($ value ), get_object_vars ($ actual ));
32
+ } elseif (true === is_array ($ value )) {
33
+ $ this ->assertEquals ($ value , $ actual );
34
+ $ this ->assertMixedArraysSame ($ value , $ actual );
35
+ } else {
36
+ $ this ->assertSame ($ value , $ actual );
37
+ }
38
+ }
39
+
40
+ }
41
+
25
42
public function testDump ()
26
43
{
27
44
$ testsForDump = $ this ->getTestsForDump ();
@@ -182,6 +199,85 @@ protected function getTestsForParse()
182
199
);
183
200
}
184
201
202
+ protected function getTestsForMapObjectParse ()
203
+ {
204
+ return array (
205
+ '' => '' ,
206
+ 'null ' => null ,
207
+ 'false ' => false ,
208
+ 'true ' => true ,
209
+ '12 ' => 12 ,
210
+ '-12 ' => -12 ,
211
+ '"quoted string" ' => 'quoted string ' ,
212
+ "'quoted string' " => 'quoted string ' ,
213
+ '12.30e+02 ' => 12.30e+02 ,
214
+ '0x4D2 ' => 0x4D2 ,
215
+ '02333 ' => 02333 ,
216
+ '.Inf ' => -log (0 ),
217
+ '-.Inf ' => log (0 ),
218
+ "'686e444' " => '686e444 ' ,
219
+ '686e444 ' => 646e444 ,
220
+ '123456789123456789123456789123456789 ' => '123456789123456789123456789123456789 ' ,
221
+ '"foo\r\nbar" ' => "foo \r\nbar " ,
222
+ "'foo#bar' " => 'foo#bar ' ,
223
+ "'foo # bar' " => 'foo # bar ' ,
224
+ "'#cfcfcf' " => '#cfcfcf ' ,
225
+ '::form_base.html.twig ' => '::form_base.html.twig ' ,
226
+
227
+ '2007-10-30 ' => mktime (0 , 0 , 0 , 10 , 30 , 2007 ),
228
+ '2007-10-30T02:59:43Z ' => gmmktime (2 , 59 , 43 , 10 , 30 , 2007 ),
229
+ '2007-10-30 02:59:43 Z ' => gmmktime (2 , 59 , 43 , 10 , 30 , 2007 ),
230
+ '1960-10-30 02:59:43 Z ' => gmmktime (2 , 59 , 43 , 10 , 30 , 1960 ),
231
+ '1730-10-30T02:59:43Z ' => gmmktime (2 , 59 , 43 , 10 , 30 , 1730 ),
232
+
233
+ '"a \\"string \\" with \'quoted strings inside \'" ' => 'a "string" with \'quoted strings inside \'' ,
234
+ "'a \"string \" with ''quoted strings inside''' " => 'a "string" with \'quoted strings inside \'' ,
235
+
236
+ // sequences
237
+ // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
238
+ '[foo, http://urls.are/no/mappings, false, null, 12] ' => array ('foo ' , 'http://urls.are/no/mappings ' , false , null , 12 ),
239
+ '[ foo , bar , false , null , 12 ] ' => array ('foo ' , 'bar ' , false , null , 12 ),
240
+ '[ \'foo,bar \', \'foo bar \'] ' => array ('foo,bar ' , 'foo bar ' ),
241
+
242
+ // mappings
243
+ '{foo:bar,bar:foo,false:false,null:null,integer:12} ' => (object ) array ('foo ' => 'bar ' , 'bar ' => 'foo ' , 'false ' => false , 'null ' => null , 'integer ' => 12 ),
244
+ '{ foo : bar, bar : foo, false : false, null : null, integer : 12 } ' => (object ) array ('foo ' => 'bar ' , 'bar ' => 'foo ' , 'false ' => false , 'null ' => null , 'integer ' => 12 ),
245
+ '{foo: \'bar \', bar: \'foo: bar \'} ' => (object ) array ('foo ' => 'bar ' , 'bar ' => 'foo: bar ' ),
246
+ '{ \'foo \': \'bar \', "bar": \'foo: bar \'} ' => (object ) array ('foo ' => 'bar ' , 'bar ' => 'foo: bar ' ),
247
+ '{ \'foo \'\'\': \'bar \', "bar\"": \'foo: bar \'} ' => (object ) array ('foo \'' => 'bar ' , "bar \"" => 'foo: bar ' ),
248
+ '{ \'foo: \': \'bar \', "bar: ": \'foo: bar \'} ' => (object ) array ('foo: ' => 'bar ' , "bar: " => 'foo: bar ' ),
249
+
250
+ // nested sequences and mappings
251
+ '[foo, [bar, foo]] ' => array ('foo ' , array ('bar ' , 'foo ' )),
252
+ '[foo, {bar: foo}] ' => array ('foo ' , (object ) array ('bar ' => 'foo ' )),
253
+ '{ foo: {bar: foo} } ' => (object ) array ('foo ' => (object ) array ('bar ' => 'foo ' )),
254
+ '{ foo: [bar, foo] } ' => (object ) array ('foo ' => array ('bar ' , 'foo ' )),
255
+
256
+ '[ foo, [ bar, foo ] ] ' => array ('foo ' , array ('bar ' , 'foo ' )),
257
+
258
+ '[{ foo: {bar: foo} }] ' => array ((object ) array ('foo ' => (object ) array ('bar ' => 'foo ' ))),
259
+
260
+ '[foo, [bar, [foo, [bar, foo]], foo]] ' => array ('foo ' , array ('bar ' , array ('foo ' , array ('bar ' , 'foo ' )), 'foo ' )),
261
+
262
+ '[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]] ' => array ('foo ' , (object ) array ('bar ' => 'foo ' , 'foo ' => array ('foo ' , (object ) array ('bar ' => 'foo ' ))), array ('foo ' , (object ) array ('bar ' => 'foo ' ))),
263
+
264
+ '[foo, bar: { foo: bar }] ' => array ('foo ' , '1 ' => (object ) array ('bar ' => (object ) array ('foo ' => 'bar ' ))),
265
+ '[foo, \'@foo.baz \', { \'%foo% \': \'foo is %foo% \', bar: \'%foo% \' }, true, \'@service_container \'] ' => array ('foo ' , '@foo.baz ' , (object ) array ('%foo% ' => 'foo is %foo% ' , 'bar ' => '%foo% ' ,), true , '@service_container ' ,),
266
+
267
+ '{} ' => new \stdClass (),
268
+ '{ foo : bar, bar : {} } ' => (object ) array ('foo ' => 'bar ' , 'bar ' => new \stdClass ()),
269
+ '{ foo : [], bar : {} } ' => (object ) array ('foo ' => array (), 'bar ' => new \stdClass ()),
270
+ '{foo: \'bar \', bar: {} } ' => (object ) array ('foo ' => 'bar ' , 'bar ' => new \stdClass ()),
271
+ '{ \'foo \': \'bar \', "bar": {}} ' => (object ) array ('foo ' => 'bar ' , 'bar ' => new \stdClass ()),
272
+ '{ \'foo \': \'bar \', "bar": \'{} \'} ' => (object ) array ('foo ' => 'bar ' , 'bar ' => '{} ' ),
273
+
274
+ '[foo, [{}, {}]] ' => array ('foo ' , array (new \stdClass (), new \stdClass ())),
275
+ '[foo, [[], {}]] ' => array ('foo ' , array (array (), new \stdClass ())),
276
+ '[foo, [[{}, {}], {}]] ' => array ('foo ' , array (array (new \stdClass (), new \stdClass ()), new \stdClass ())),
277
+ '[foo, {bar: {}}] ' => array ('foo ' , '1 ' => (object ) array ('bar ' => new \stdClass ())),
278
+ );
279
+ }
280
+
185
281
protected function getTestsForDump ()
186
282
{
187
283
return array (
@@ -228,4 +324,27 @@ protected function getTestsForDump()
228
324
'[foo, \'@foo.baz \', { \'%foo% \': \'foo is %foo% \', bar: \'%foo% \' }, true, \'@service_container \'] ' => array ('foo ' , '@foo.baz ' , array ('%foo% ' => 'foo is %foo% ' , 'bar ' => '%foo% ' ,), true , '@service_container ' ,),
229
325
);
230
326
}
327
+
328
+ protected function assertMixedArraysSame ($ a , $ b )
329
+ {
330
+
331
+ foreach ($ a as $ key => $ value ) {
332
+ if (array_key_exists ($ key , $ b )) {
333
+ if (is_array ($ value )) {
AA62
code>
334
+ $ this ->assertMixedArraysSame ($ value , $ b [$ key ]);
335
+ } else {
336
+ if (true === is_object ($ value )) {
337
+ $ this ->assertEquals ($ value , $ b [$ key ]);
338
+ $ this ->assertInstanceOf (get_class ($ value ), $ b [$ key ]);
339
+ $ this ->assertEquals (get_object_vars ($ value ), get_object_vars ($ b [$ key ]));
340
+ } else {
341
+ $ this ->assertSame ($ value , $ b [$ key ]);
342
+ }
343
+ }
344
+ } else {
345
+ $ this ->assertFail ();
346
+ }
347
+ }
348
+
349
+ }
231
350
}