|
41 | 41 | use Symfony\Component\ObjectMapper\Tests\Fixtures\InstanceCallback\B as InstanceCallbackB; |
42 | 42 | use Symfony\Component\ObjectMapper\Tests\Fixtures\InstanceCallbackWithArguments\A as InstanceCallbackWithArgumentsA; |
43 | 43 | use Symfony\Component\ObjectMapper\Tests\Fixtures\InstanceCallbackWithArguments\B as InstanceCallbackWithArgumentsB; |
| 44 | +use Symfony\Component\ObjectMapper\Tests\Fixtures\LazyFoo; |
44 | 45 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MapStruct\AToBMapper; |
45 | 46 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MapStruct\MapStructMapperMetadataFactory; |
46 | 47 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MapStruct\Source; |
|
52 | 53 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MultipleTargetProperty\C as MultipleTargetPropertyC; |
53 | 54 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MultipleTargets\A as MultipleTargetsA; |
54 | 55 | use Symfony\Component\ObjectMapper\Tests\Fixtures\MultipleTargets\C as MultipleTargetsC; |
| 56 | +use Symfony\Component\ObjectMapper\Tests\Fixtures\MyProxy; |
55 | 57 | use Symfony\Component\ObjectMapper\Tests\Fixtures\PromotedConstructor\Source as PromotedConstructorSource; |
56 | 58 | use Symfony\Component\ObjectMapper\Tests\Fixtures\PromotedConstructor\Target as PromotedConstructorTarget; |
57 | 59 | use Symfony\Component\ObjectMapper\Tests\Fixtures\Recursion\AB; |
@@ -369,6 +371,38 @@ public static function objectMapperProvider(): iterable |
369 | 371 | yield [new ObjectMapper(new ReflectionObjectMapperMetadataFactory(), PropertyAccess::createPropertyAccessor())]; |
370 | 372 | } |
371 | 373 |
|
| 374 | + public function testMapInitializesLazyObject() |
| 375 | + { |
| 376 | + $lazy = new LazyFoo(); |
| 377 | + $mapper = new ObjectMapper(); |
| 378 | + $mapper->map($lazy, \stdClass::class); |
| 379 | + $this->assertTrue($lazy->isLazyObjectInitialized()); |
| 380 | + } |
| 381 | + |
| 382 | + /** |
| 383 | + * @requires PHP 8.4 |
| 384 | + */ |
| 385 | + public function testMapInitializesNativePhp84LazyObject() |
| 386 | + { |
| 387 | + $initialized = false; |
| 388 | + $initializer = function () use (&$initialized) { |
| 389 | + $initialized = true; |
| 390 | + |
| 391 | + $p = new MyProxy(); |
| 392 | + $p->name = 'test'; |
| 393 | + |
| 394 | + return $p; |
| 395 | + }; |
| 396 | + |
| 397 | + $r = new \ReflectionClass(MyProxy::class); |
| 398 | + $lazyObj = $r->newLazyProxy($initializer); |
| 399 | + $this->assertFalse($initialized); |
| 400 | + $mapper = new ObjectMapper(); |
| 401 | + $d = $mapper->map($lazyObj, MyProxy::class); |
| 402 | + $this->assertSame('test', $d->name); |
| 403 | + $this->assertTrue($initialized); |
| 404 | + } |
| 405 | + |
372 | 406 | public function testDecorateObjectMapper() |
373 | 407 | { |
374 | 408 | $mapper = new ObjectMapper(); |
|
0 commit comments