@@ -98,6 +98,17 @@ public function testNormalizers(array $defaults, array $options, array $normaliz
9898 $ this ->assertEquals ($ result , $ expectedResult );
9999 }
100100
101+ /**
102+ * @dataProvider resolveOnlyTestProvider
103+ */
104+ public function testResolveOnly (array $ defaults , array $ options , array $ expectedResult ): void
105+ {
106+ $ resolver = new OptionsResolver ();
107+ $ resolver ->setDefaults ($ defaults );
108+ $ result = $ resolver ->resolveOnly ($ options );
109+ $ this ->assertEquals ($ expectedResult , $ result );
110+ }
111+
101112 public function testNormalizerReturnsInvalidType ()
102113 {
103114 $ resolver = new OptionsResolver ();
@@ -242,7 +253,30 @@ public function allowedValueTestProvider(): \Generator
242253 ];
243254 }
244255
245- public function normalizerTestProvider ()
256+ public function resolveOnlyTestProvider (): \Generator
257+ {
258+ $ defaults = ['foo ' => 'bar ' , 'test ' => 'example ' , 'a ' => 'b ' ];
259+
260+ yield 'Result only contains passed values ' => [
261+ $ defaults ,
262+ ['foo ' => 'test ' ],
263+ ['foo ' => 'test ' ],
264+ ];
265+
266+ yield 'Result does not contain invalid key ' => [
267+ $ defaults ,
268+ ['foo ' => 'test ' , 'example ' => 'abcde ' ],
269+ ['foo ' => 'test ' ],
270+ ];
271+
272+ yield 'Empty input returns empty output ' => [
273+ $ defaults ,
274+ [],
275+ [],
276+ ];
277+ }
278+
279+ public function normalizerTestProvider (): \Generator
246280 {
247281 yield 'Normalizes successful ' => [
248282 ['a ' => 'b ' ],
@@ -254,21 +288,9 @@ public function normalizerTestProvider()
254288 ];
255289 }
256290
257- public function testDebugLogsProduced ()
291+ public function testDebugLogsProduced (): void
258292 {
259- $ logger = new class extends AbstractLogger {
260- private $ logs = [];
261-
262- public function log ($ level , $ message , array $ context = []): void
263- {
264- $ this ->logs [] = $ message ;
265- }
266-
267- public function getLogs (): array
268- {
269- return $ this ->logs ;
270- }
271- };
293+ $ logger = new TestLogger ();
272294 $ resolver = new OptionsResolver ();
273295 $ resolver ->setAllowedValues ('test ' , ['foo ' ]);
274296 $ resolver ->setDefaults ([
@@ -282,4 +304,35 @@ public function getLogs(): array
282304 $ this ->assertCount (2 , $ logger ->getLogs ());
283305 $ this ->assertEquals ('Invalid value for option "test". Using default value. ' , $ logger ->getLogs ()[1 ]);
284306 }
307+
308+ public function testDebugLogsProducedForResolveOnly (): void
309+ {
310+ $ logger = new TestLogger ();
311+ $ resolver = new OptionsResolver ();
312+ $ resolver ->setAllowedValues ('test ' , ['foo ' ]);
313+ $ resolver ->setDefaults (['test ' => 'foo ' , 'abc ' => 'def ' , 'bar ' => 'baz ' ]);
314+
315+ $ resolver ->resolveOnly (['example ' => 'test ' ], $ logger );
316+ $ this ->assertCount (1 , $ logger ->getLogs ());
317+ $ this ->assertEquals ('Option "example" does not exist and will be ignored ' , $ logger ->getLogs ()[0 ]);
318+
319+ $ resolver ->resolveOnly (['test ' => 'abc ' ], $ logger );
320+ $ this ->assertCount (2 , $ logger ->getLogs ());
321+ $ this ->assertEquals ('Invalid value for option "test". Using default value. ' , $ logger ->getLogs ()[1 ]);
322+ }
323+ }
324+
325+ class TestLogger extends AbstractLogger
326+ {
327+ private $ logs = [];
328+
329+ public function log ($ level , $ message , array $ context = []): void
330+ {
331+ $ this ->logs [] = $ message ;
332+ }
333+
334+ public function getLogs (): array
335+ {
336+ return $ this ->logs ;
337+ }
285338}
0 commit comments