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
@@ -51,6 +54,7 @@ public function build(ReflectionClass $theClass, string $methodName, array $grou
5154                $ this shouldTestMethodBeRunInSeparateProcess ($ className$ methodName
5255                $ this shouldGlobalStateBePreserved ($ className$ methodName
5356                $ this shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess ($ className
57+                 $ this shouldForkIfPossible ($ className$ methodName
5458                $ this backupSettings ($ className$ methodName
5559                $ groups
5660            );
@@ -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
@@ -98,6 +103,7 @@ private function buildDataProviderTestSuite(string $methodName, string $classNam
98103                $ runTestInSeparateProcess
99104                $ preserveGlobalState
100105                $ runClassInSeparateProcess
106+                 $ forkIfPossible
101107                $ backupSettings
102108            );
103109
@@ -110,7 +116,7 @@ private function buildDataProviderTestSuite(string $methodName, string $classNam
110116    /** 
111117     * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list<string>, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array<string,list<string>>} $backupSettings 
112118     */ 
113-     private  function  configureTestCase (TestCase $ testbool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessarray  $ backupSettingsvoid 
119+     private  function  configureTestCase (TestCase $ testbool  $ runTestInSeparateProcessbool  $ preserveGlobalStatebool  $ runClassInSeparateProcessbool   $ forkIfPossible ,  array  $ backupSettingsvoid 
114120    {
115121        if  ($ runTestInSeparateProcess
116122            $ testsetRunTestInSeparateProcess (true );
@@ -120,6 +126,10 @@ private function configureTestCase(TestCase $test, bool $runTestInSeparateProces
120126            $ testsetRunClassInSeparateProcess (true );
121127        }
122128
129+         if  ($ forkIfPossible
130+             $ testsetForkIfPossible (true );
131+         }
132+ 
123133        if  ($ preserveGlobalStatenull ) {
124134            $ testsetPreserveGlobalState ($ preserveGlobalState
125135        }
@@ -272,4 +282,53 @@ private function shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess(str
272282    {
273283        return  MetadataRegistry::parser ()->forClass ($ classNameisRunClassInSeparateProcess ()->isNotEmpty ();
274284    }
285+ 
286+     /** 
287+      * @psalm-param class-string $className 
288+      * @psalm-param non-empty-string $methodName 
289+      */ 
290+     private  function  shouldForkIfPossible (string  $ classNamestring  $ methodNamebool 
291+     {
292+         $ metadataForMethodparser ()->forMethod ($ className$ methodName
293+ 
294+         if  ($ metadataForMethodisRunInSeparateProcess ()->isNotEmpty ()) {
295+             $ metadata$ metadataForMethodisRunInSeparateProcess ()->asArray ()[0 ];
296+ 
297+             assert ($ metadatainstanceof  RunInSeparateProcess);
298+ 
299+             $ forkIfPossible$ metadataforkIfPossible ();
300+ 
301+             if  ($ forkIfPossiblenull ) {
302+                 return  $ forkIfPossible
303+             }
304+         }
305+ 
306+         $ metadataForClassparser ()->forClass ($ className
307+ 
308+         if  ($ metadataForClassisRunTestsInSeparateProcesses ()->isNotEmpty ()) {
309+             $ metadata$ metadataForClassisRunTestsInSeparateProcesses ()->asArray ()[0 ];
310+ 
311+             assert ($ metadatainstanceof  RunTestsInSeparateProcesses);
312+ 
313+             $ forkIfPossible$ metadataforkIfPossible ();
314+ 
315+             if  ($ forkIfPossiblenull ) {
316+                 return  $ forkIfPossible
317+             }
318+         }
319+ 
320+         if  ($ metadataForClassisRunClassInSeparateProcess ()->isNotEmpty ()) {
321+             $ metadata$ metadataForClassisRunClassInSeparateProcess ()->asArray ()[0 ];
322+ 
323+             assert ($ metadatainstanceof  RunClassInSeparateProcess);
324+ 
325+             $ forkIfPossible$ metadataforkIfPossible ();
326+ 
327+             if  ($ forkIfPossiblenull ) {
328+                 return  $ forkIfPossible
329+             }
330+         }
331+ 
332+         return  false ;
333+     }
275334}
0 commit comments