@@ -255,4 +255,66 @@ public function testSetDeprecated()
255255 restore_error_handler ();
256256 $ this ->assertTrue ($ deprecationTriggered , '->finalize() should trigger if the deprecated node is set ' );
257257 }
258+
259+ /**
260+ * @dataProvider getDataWithIncludedExtraKeys
261+ */
262+ public function testMergeWithoutIgnoringExtraKeys ($ prenormalizeds , $ merged )
263+ {
264+ $ this ->expectException ('RuntimeException ' );
265+ $ this ->expectExceptionMessage ('merge() expects a normalized config array. ' );
266+ $ node = new ArrayNode ('root ' );
267+ $ node ->addChild (new ScalarNode ('foo ' ));
268+ $ node ->addChild (new ScalarNode ('bar ' ));
269+ $ node ->setIgnoreExtraKeys (false );
270+
271+ $ r = new \ReflectionMethod ($ node , 'mergeValues ' );
272+ $ r ->setAccessible (true );
273+
274+ $ r ->invoke ($ node , ...$ prenormalizeds );
275+ }
276+
277+ /**
278+ * @dataProvider getDataWithIncludedExtraKeys
279+ */
280+ public function testMergeWithIgnoringAndRemovingExtraKeys ($ prenormalizeds , $ merged )
281+ {
282+ $ this ->expectException ('RuntimeException ' );
283+ $ this ->expectExceptionMessage ('merge() expects a normalized config array. ' );
284+ $ node = new ArrayNode ('root ' );
285+ $ node ->addChild (new ScalarNode ('foo ' ));
286+ $ node ->addChild (new ScalarNode ('bar ' ));
287+ $ node ->setIgnoreExtraKeys (true );
288+
289+ $ r = new \ReflectionMethod ($ node , 'mergeValues ' );
290+ $ r ->setAccessible (true );
291+
292+ $ r ->invoke ($ node , ...$ prenormalizeds );
293+ }
294+
295+ /**
296+ * @dataProvider getDataWithIncludedExtraKeys
297+ */
298+ public function testMergeWithIgnoringExtraKeys ($ prenormalizeds , $ merged )
299+ {
300+ $ node = new ArrayNode ('root ' );
301+ $ node ->addChild (new ScalarNode ('foo ' ));
302+ $ node ->addChild (new ScalarNode ('bar ' ));
303+ $ node ->setIgnoreExtraKeys (true , false );
304+
305+ $ r = new \ReflectionMethod ($ node , 'mergeValues ' );
306+ $ r ->setAccessible (true );
307+
308+ $ this ->assertEquals ($ merged , $ r ->invoke ($ node , ...$ prenormalizeds ));
309+ }
310+
311+ public function getDataWithIncludedExtraKeys ()
312+ {
313+ return [
314+ [
315+ [['foo ' => 'bar ' , 'baz ' => 'not foo ' ], ['bar ' => 'baz ' , 'baz ' => 'foo ' ]],
316+ ['foo ' => 'bar ' , 'bar ' => 'baz ' , 'baz ' => 'foo ' ],
317+ ],
318+ ];
319+ }
258320}
0 commit comments