22
22
23
23
class ManagerRegistryTest extends TestCase
24
24
{
25
- public static function setUpBeforeClass (): void
25
+ public function testResetService ()
26
26
{
27
27
$ container = new ContainerBuilder ();
28
28
@@ -32,10 +32,7 @@ public static function setUpBeforeClass(): void
32
32
33
33
$ dumper = new PhpDumper ($ container );
34
34
eval ('?> ' .$ dumper ->dump (['class ' => 'LazyServiceDoctrineBridgeContainer ' ]));
35
- }
36
35
37
- public function testResetService ()
38
- {
39
36
$ container = new \LazyServiceDoctrineBridgeContainer ();
40
37
41
38
$ registry = new TestManagerRegistry ('name ' , [], ['defaultManager ' => 'foo ' ], 'defaultConnection ' , 'defaultManager ' , 'proxyInterfaceName ' );
@@ -52,6 +49,63 @@ public function testResetService()
52
49
$ this ->assertFalse (isset ($ foo ->bar ));
53
50
}
54
51
52
+ /**
53
+ * @requires PHP 8.4
54
+ *
55
+ * @dataProvider provideResetServiceWithNativeLazyObjectsCases
56
+ */
57
+ public function testResetServiceWithNativeLazyObjects (string $ class )
58
+ {
59
+ $ container = new $ class ();
60
+
61
+ $ registry = new TestManagerRegistry (
62
+ 'irrelevant ' ,
63
+ [],
64
+ ['defaultManager ' => 'foo ' ],
65
+ 'irrelevant ' ,
66
+ 'defaultManager ' ,
67
+ 'irrelevant ' ,
68
+ );
69
+ $ registry ->setTestContainer ($ container );
70
+
71
+ $ foo = $ container ->get ('foo ' );
72
+ self ::assertSame (DummyManager::class, $ foo ::class);
73
+
74
+ $ foo ->bar = 123 ;
75
+ self ::assertTrue (isset ($ foo ->bar ));
76
+
77
+ $ registry ->resetManager ();
78
+
79
+ self ::assertSame ($ foo , $ container ->get ('foo ' ));
80
+ self ::assertSame (DummyManager::class, $ foo ::class);
81
+ self ::assertFalse (isset ($ foo ->bar ));
82
+ }
83
+
84
+ public static function provideResetServiceWithNativeLazyObjectsCases (): iterable
85
+ {
86
+ $ container = new ContainerBuilder ();
87
+
88
+ $ container ->register ('foo ' , DummyManager::class)->setPublic (true );
89
+ $ container ->getDefinition ('foo ' )->setLazy (true );
90
+ $ container ->compile ();
91
+
92
+ $ dumper = new PhpDumper ($ container );
93
+
94
+ eval ('?> ' .$ dumper ->dump (['class ' => 'NativeLazyServiceDoctrineBridgeContainer ' ]));
95
+
96
+ yield ['NativeLazyServiceDoctrineBridgeContainer ' ];
97
+
98
+ $ dumps = $ dumper ->dump (['class ' => 'NativeLazyServiceDoctrineBridgeContainerAsFiles ' , 'as_files ' => true ]);
99
+
100
+ $ lastDump = array_pop ($ dumps );
101
+ foreach (array_reverse ($ dumps ) as $ dump ) {
102
+ eval ('?> ' .$ dump );
103
+ }
104
+ eval ('?> ' .$ lastDump );
105
+
106
+ yield ['NativeLazyServiceDoctrineBridgeContainerAsFiles ' ];
107
+ }
108
+
55
109
/**
56
110
* When performing an entity manager lazy service reset, the reset operations may re-use the container
57
111
* to create a "fresh" service: when doing so, it can happen that the "fresh" service is itself a proxy.
0 commit comments