|
30 | 30 | use Symfony\Component\Serializer\Tests\Fixtures\CircularReferenceDummy;
|
31 | 31 | use Symfony\Component\Serializer\Tests\Fixtures\GroupDummy;
|
32 | 32 | use Symfony\Component\Serializer\Tests\Fixtures\SiblingHolder;
|
| 33 | +use Symfony\Component\Serializer\Tests\Normalizer\Features\CallbacksObject; |
| 34 | +use Symfony\Component\Serializer\Tests\Normalizer\Features\CallbacksTestTrait; |
33 | 35 | use Symfony\Component\Serializer\Tests\Normalizer\Features\ConstructorArgumentsTestTrait;
|
34 | 36 | use Symfony\Component\Serializer\Tests\Normalizer\Features\GroupsTestTrait;
|
35 | 37 | use Symfony\Component\Serializer\Tests\Normalizer\Features\MaxDepthTestTrait;
|
|
38 | 40 |
|
39 | 41 | class GetSetMethodNormalizerTest extends TestCase
|
40 | 42 | {
|
| 43 | + use CallbacksTestTrait; |
| 44 | + use ConstructorArgumentsTestTrait; |
41 | 45 | use GroupsTestTrait;
|
42 |
| - use ObjectToPopulateTestTrait; |
43 | 46 | use MaxDepthTestTrait;
|
44 |
| - use ConstructorArgumentsTestTrait; |
| 47 | + use ObjectToPopulateTestTrait; |
45 | 48 | use TypeEnforcementTestTrait;
|
46 | 49 |
|
47 | 50 | /**
|
@@ -218,62 +221,48 @@ public function testConstructorWArgWithPrivateMutator()
|
218 | 221 | $this->assertEquals('bar', $obj->getFoo());
|
219 | 222 | }
|
220 | 223 |
|
221 |
| - protected function getNormalizerForGroups(): GetSetMethodNormalizer |
| 224 | + protected function getNormalizerForCallbacks(): GetSetMethodNormalizer |
222 | 225 | {
|
223 | 226 | $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
224 | 227 |
|
225 |
| - return new GetSetMethodNormalizer($classMetadataFactory); |
| 228 | + return new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); |
226 | 229 | }
|
227 | 230 |
|
228 |
| - protected function getDenormalizerForGroups(): GetSetMethodNormalizer |
| 231 | + /** |
| 232 | + * @dataProvider provideCallbacks |
| 233 | + */ |
| 234 | + public function testLegacyCallbacks($callbacks, $value, $result) |
229 | 235 | {
|
230 |
| - $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); |
| 236 | + $this->normalizer->setCallbacks($callbacks); |
231 | 237 |
|
232 |
| - return new GetSetMethodNormalizer($classMetadataFactory); |
| 238 | + $obj = new CallbacksObject($value); |
| 239 | + $this->assertEquals( |
| 240 | + $result, |
| 241 | + $this->normalizer->normalize($obj, 'any') |
| 242 | + ); |
233 | 243 | }
|
234 | 244 |
|
235 |
| - protected function getDenormalizerForObjectToPopulate(): DenormalizerInterface |
| 245 | + protected function getDenormalizerForConstructArguments(): GetSetMethodNormalizer |
236 | 246 | {
|
237 | 247 | $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
238 |
| - $normalizer = new GetSetMethodNormalizer($classMetadataFactory, null, new PhpDocExtractor()); |
239 |
| - new Serializer([$normalizer]); |
| 248 | + $denormalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); |
| 249 | + new Serializer([$denormalizer]); |
240 | 250 |
|
241 |
| - return $normalizer; |
| 251 | + return $denormalizer; |
242 | 252 | }
|
243 | 253 |
|
244 |
| - protected function getNormalizerForMaxDepth(): NormalizerInterface |
| 254 | + protected function getNormalizerForGroups(): GetSetMethodNormalizer |
245 | 255 | {
|
246 | 256 | $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
247 |
| - $normalizer = new GetSetMethodNormalizer($classMetadataFactory); |
248 |
| - $serializer = new Serializer([$normalizer]); |
249 |
| - $normalizer->setSerializer($serializer); |
250 | 257 |
|
251 |
| - return $normalizer; |
| 258 | + return new GetSetMethodNormalizer($classMetadataFactory); |
252 | 259 | }
|
253 | 260 |
|
254 |
| - protected function getDenormalizerForConstructArguments(): DenormalizerInterface |
| 261 | + protected function getDenormalizerForGroups(): GetSetMethodNormalizer |
255 | 262 | {
|
256 | 263 | $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
|
257 |
| - $denormalizer = new GetSetMethodNormalizer($classMetadataFactory, new MetadataAwareNameConverter($classMetadataFactory)); |
258 |
| - $serializer = new Serializer([$denormalizer]); |
259 |
| - $denormalizer->setSerializer($serializer); |
260 | 264 |
|
261 |
| - return $denormalizer; |
262 |
| - } |
263 |
| - |
264 |
| - protected function getDenormalizerForTypeEnforcement(): DenormalizerInterface |
265 |
| - { |
266 |
| - $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]); |
267 |
| - $normalizer = new GetSetMethodNormalizer(null, null, $extractor); |
268 |
| - $serializer = new Serializer([new ArrayDenormalizer(), $normalizer]); |
269 |
| - $normalizer->setSerializer($serializer); |
270 |
| - |
271 |
| - return $normalizer; |
272 |
| - } |
273 |
| - |
274 |
| - public function testRejectInvalidKey() |
275 |
| - { |
276 |
| - $this->markTestSkipped('This test makes no sense with the GetSetMethodNormalizer'); |
| 265 | + return new GetSetMethodNormalizer($classMetadataFactory); |
277 | 266 | }
|
278 | 267 |
|
279 | 268 | public function testGroupsNormalizeWithNameConverter()
|
@@ -318,59 +307,44 @@ public function testGroupsDenormalizeWithNameConverter()
|
318 | 307 | );
|
319 | 308 | }
|
320 | 309 |
|
321 |
| - /** |
322 |
| - * @dataProvider provideCallbacks |
323 |
| - */ |
324 |
| - public function testCallbacks($callbacks, $value, $result, $message) |
| 310 | + protected function getNormalizerForMaxDepth(): NormalizerInterface |
325 | 311 | {
|
326 |
| - $this->doTestCallbacks($callbacks, $value, $result, $message); |
327 |
| - } |
| 312 | + $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); |
| 313 | + $normalizer = new GetSetMethodNormalizer($classMetadataFactory); |
| 314 | + $serializer = new Serializer([$normalizer]); |
| 315 | + $normalizer->setSerializer($serializer); |
328 | 316 |
|
329 |
| - /** |
330 |
| - * @dataProvider provideCallbacks |
331 |
| - */ |
332 |
| - public function testLegacyCallbacks($callbacks, $value, $result, $message) |
333 |
| - { |
334 |
| - $this->doTestCallbacks($callbacks, $value, $result, $message, true); |
| 317 | + return $normalizer; |
335 | 318 | }
|
336 | 319 |
|
337 |
| - private function doTestCallbacks($callbacks, $value, $result, $message, bool $legacy = false) |
| 320 | + protected function getDenormalizerForObjectToPopulate(): DenormalizerInterface |
338 | 321 | {
|
339 |
| - $legacy ? $this->normalizer->setCallbacks($callbacks) : $this->createNormalizer([GetSetMethodNormalizer::CALLBACKS => $callbacks]); |
| 322 | + $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); |
| 323 | + $normalizer = new GetSetMethodNormalizer($classMetadataFactory, null, new PhpDocExtractor()); |
| 324 | + new Serializer([$normalizer]); |
340 | 325 |
|
341 |
| - $obj = new GetConstructorDummy('', $value, true); |
342 |
| - $this->assertEquals( |
343 |
| - $result, |
344 |
| - $this->normalizer->normalize($obj, 'any'), |
345 |
| - $message |
346 |
| - ); |
| 326 | + return $normalizer; |
347 | 327 | }
|
348 | 328 |
|
349 |
| - /** |
350 |
| - * @expectedException \InvalidArgumentException |
351 |
| - */ |
352 |
| - public function testUncallableCallbacks() |
| 329 | + protected function getDenormalizerForTypeEnforcement(): DenormalizerInterface |
353 | 330 | {
|
354 |
| - $this->doTestUncallableCallbacks(); |
| 331 | + $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]); |
| 332 | + $normalizer = new GetSetMethodNormalizer(null, null, $extractor); |
| 333 | + $serializer = new Serializer([new ArrayDenormalizer(), $normalizer]); |
| 334 | + $normalizer->setSerializer($serializer); |
| 335 | + |
| 336 | + return $normalizer; |
355 | 337 | }
|
356 | 338 |
|
357 |
| - /** |
358 |
| - * @expectedException \InvalidArgumentException |
359 |
| - */ |
360 |
| - public function testLegacyUncallableCallbacks() |
| 339 | + public function testRejectInvalidKey() |
361 | 340 | {
|
362 |
| - $this->doTestUncallableCallbacks(true); |
| 341 | + $this->markTestSkipped('This test makes no sense with the GetSetMethodNormalizer'); |
363 | 342 | }
|
364 | 343 |
|
365 |
| - private function doTestUncallableCallbacks(bool $legacy = false) |
366 |
| - { |
367 |
| - $callbacks = ['bar' => null]; |
368 |
| - $legacy ? $this->normalizer->setCallbacks($callbacks) : $this->createNormalizer([GetSetMethodNormalizer::CALLBACKS => $callbacks]); |
369 | 344 |
|
370 |
| - $obj = new GetConstructorDummy('baz', 'quux', true); |
371 | 345 |
|
372 |
| - $this->normalizer->normalize($obj, 'any'); |
373 |
| - } |
| 346 | + |
| 347 | + |
374 | 348 |
|
375 | 349 | public function testIgnoredAttributes()
|
376 | 350 | {
|
@@ -398,66 +372,6 @@ private function doTestIgnoredAttributes(bool $legacy = false)
|
398 | 372 | );
|
399 | 373 | }
|
400 | 374 |
|
401 |
| - public function provideCallbacks() |
402 |
| - { |
403 |
| - return [ |
404 |
| - [ |
405 |
| - [ |
406 |
| - 'bar' => function ($bar) { |
407 |
| - return 'baz'; |
408 |
| - }, |
409 |
| - ], |
410 |
| - 'baz', |
411 |
| - ['foo' => '', 'bar' => 'baz', 'baz' => true], |
412 |
| - 'Change a string', |
413 |
| - ], |
414 |
| - [ |
415 |
| - [ |
416 |
| - 'bar' => function ($bar) { |
417 |
| - }, |
418 |
| - ], |
419 |
| - 'baz', |
420 |
| - ['foo' => '', 'bar' => null, 'baz' => true], |
421 |
| - 'Null an item', |
422 |
| - ], |
423 |
| - [ |
424 |
| - [ |
425 |
| - 'bar' => function ($bar) { |
426 |
| - return $bar->format('d-m-Y H:i:s'); |
427 |
| - }, |
428 |
| - ], |
429 |
| - new \DateTime('2011-09-10 06:30:00'), |
430 |
| - ['foo' => '', 'bar' => '10-09-2011 06:30:00', 'baz' => true], |
431 |
| - 'Format a date', |
432 |
| - ], |
433 |
| - [ |
434 |
| - [ |
435 |
| - 'bar' => function ($bars) { |
436 |
| - $foos = ''; |
437 |
| - foreach ($bars as $bar) { |
438 |
| - $foos .= $bar->getFoo(); |
439 |
| - } |
440 |
| - |
441 |
| - return $foos; |
442 |
| - }, |
443 |
| - ], |
444 |
| - [new GetConstructorDummy('baz', '', false), new GetConstructorDummy('quux', '', false)], |
445 |
| - ['foo' => '', 'bar' => 'bazquux', 'baz' => true], |
446 |
| - 'Collect a property', |
447 |
| - ], |
448 |
| - [ |
449 |
| - [ |
450 |
| - 'bar' => function ($bars) { |
451 |
| - return \count($bars); |
452 |
| - }, |
453 |
| - ], |
454 |
| - [new GetConstructorDummy('baz', '', false), new GetConstructorDummy('quux', '', false)], |
455 |
| - ['foo' => '', 'bar' => 2, 'baz' => true], |
456 |
| - 'Count a property', |
457 |
| - ], |
458 |
| - ]; |
459 |
| - } |
460 |
| - |
461 | 375 | /**
|
462 | 376 | * @expectedException \Symfony\Component\Serializer\Exception\LogicException
|
463 | 377 | * @expectedExceptionMessage Cannot normalize attribute "object" because the injected serializer is not a normalizer
|
|
0 commit comments