1919use  PHPUnit \Metadata \ExcludeStaticPropertyFromBackup ;
2020use  PHPUnit \Metadata \Parser \Registry  as  MetadataRegistry ;
2121use  PHPUnit \Metadata \PreserveGlobalState ;
22+ use  PHPUnit \Metadata \RunClassInSeparateProcess ;
23+ use  PHPUnit \Metadata \RunInSeparateProcess ;
24+ use  PHPUnit \Metadata \RunTestsInSeparateProcesses ;
2225use  PHPUnit \TextUI \Configuration \Registry  as  ConfigurationRegistry ;
2326use  ReflectionClass ;
2427
@@ -50,6 +53,7 @@ public function build(ReflectionClass $theClass, string $methodName, array $grou
5053                $ this shouldTestMethodBeRunInSeparateProcess ($ className$ methodName
5154                $ this shouldGlobalStateBePreserved ($ className$ methodName
5255                $ this shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess ($ className
56+                 $ this shouldForkIfPossible ($ className$ methodName
5357                $ this backupSettings ($ className$ methodName
5458                $ groups
5559            );
@@ -64,6 +68,7 @@ public function build(ReflectionClass $theClass, string $methodName, array $grou
6468            $ this shouldTestMethodBeRunInSeparateProcess ($ className$ methodName
6569            $ this shouldGlobalStateBePreserved ($ className$ methodName
6670            $ this shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess ($ className
71+             $ this shouldForkIfPossible ($ className$ methodName
6772            $ this backupSettings ($ className$ methodName
6873        );
6974
@@ -76,7 +81,7 @@ public function build(ReflectionClass $theClass, string $methodName, array $grou
7681     * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list<string>, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array<string,list<string>>} $backupSettings 
7782     * @psalm-param list<non-empty-string> $groups 
7883     */ 
79-     private  function  buildDataProviderTestSuite (string  $ methodNamestring  $ classNamearray  $ databool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessarray  $ backupSettingsarray  $ groupsDataProviderTestSuite 
84+     private  function  buildDataProviderTestSuite (string  $ methodNamestring  $ classNamearray  $ databool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessbool   $ forkIfPossible ,  array  $ backupSettingsarray  $ groupsDataProviderTestSuite 
8085    {
8186        $ dataProviderTestSuiteempty (
8287            $ className':: '  . $ methodName
@@ -99,6 +104,7 @@ private function buildDataProviderTestSuite(string $methodName, string $classNam
99104                $ runTestInSeparateProcess
100105                $ preserveGlobalState
101106                $ runClassInSeparateProcess
107+                 $ forkIfPossible
102108                $ backupSettings
103109            );
104110
@@ -111,7 +117,7 @@ private function buildDataProviderTestSuite(string $methodName, string $classNam
111117    /** 
112118     * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list<string>, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array<string,list<string>>} $backupSettings 
113119     */ 
114-     private  function  configureTestCase (TestCase $ testbool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessarray  $ backupSettingsvoid 
120+     private  function  configureTestCase (TestCase $ testbool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessbool   $ forkIfPossible ,  array  $ backupSettingsvoid 
115121    {
116122        if  ($ runTestInSeparateProcess
117123            $ testsetRunTestInSeparateProcess (true );
@@ -121,6 +127,10 @@ private function configureTestCase(TestCase $test, bool $runTestInSeparateProces
121127            $ testsetRunClassInSeparateProcess (true );
122128        }
123129
130+         if  ($ forkIfPossible
131+             $ testsetForkIfPossible (true );
132+         }
133+ 
124134        if  ($ preserveGlobalStatenull ) {
125135            $ testsetPreserveGlobalState ($ preserveGlobalState
126136        }
@@ -273,4 +283,53 @@ private function shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess(str
273283    {
274284        return  MetadataRegistry::parser ()->forClass ($ classNameisRunClassInSeparateProcess ()->isNotEmpty ();
275285    }
286+ 
287+     /** 
288+      * @psalm-param class-string $className 
289+      * @psalm-param non-empty-string $methodName 
290+      */ 
291+     private  function  shouldForkIfPossible (string  $ classNamestring  $ methodNamebool 
292+     {
293+         $ metadataForMethodparser ()->forMethod ($ className$ methodName
294+ 
295+         if  ($ metadataForMethodisRunInSeparateProcess ()->isNotEmpty ()) {
296+             $ metadata$ metadataForMethodisRunInSeparateProcess ()->asArray ()[0 ];
297+ 
298+             assert ($ metadatainstanceof  RunInSeparateProcess);
299+ 
300+             $ forkIfPossible$ metadataforkIfPossible ();
301+ 
302+             if  ($ forkIfPossiblenull ) {
303+                 return  $ forkIfPossible
304+             }
305+         }
306+ 
307+         $ metadataForClassparser ()->forClass ($ className
308+ 
309+         if  ($ metadataForClassisRunTestsInSeparateProcesses ()->isNotEmpty ()) {
310+             $ metadata$ metadataForClassisRunTestsInSeparateProcesses ()->asArray ()[0 ];
311+ 
312+             assert ($ metadatainstanceof  RunTestsInSeparateProcesses);
313+ 
314+             $ forkIfPossible$ metadataforkIfPossible ();
315+ 
316+             if  ($ forkIfPossiblenull ) {
317+                 return  $ forkIfPossible
318+             }
319+         }
320+ 
321+         if  ($ metadataForClassisRunClassInSeparateProcess ()->isNotEmpty ()) {
322+             $ metadata$ metadataForClassisRunClassInSeparateProcess ()->asArray ()[0 ];
323+ 
324+             assert ($ metadatainstanceof  RunClassInSeparateProcess);
325+ 
326+             $ forkIfPossible$ metadataforkIfPossible ();
327+ 
328+             if  ($ forkIfPossiblenull ) {
329+                 return  $ forkIfPossible
330+             }
331+         }
332+ 
333+         return  false ;
334+     }
276335}
0 commit comments