Skip to content

Commit 38dfa46

Browse files
committed
added fork-if-possible annotation support
1 parent 0758468 commit 38dfa46

8 files changed

+105
-9
lines changed

src/Framework/Attributes/RunClassInSeparateProcess.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,15 @@
1919
#[Attribute(Attribute::TARGET_CLASS)]
2020
final readonly class RunClassInSeparateProcess
2121
{
22+
private ?bool $forkIfPossible;
23+
24+
public function __construct(bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
}
28+
29+
public function forkIfPossible(): ?bool
30+
{
31+
return $this->forkIfPossible;
32+
}
2233
}

src/Framework/Attributes/RunInSeparateProcess.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,15 @@
1919
#[Attribute(Attribute::TARGET_METHOD)]
2020
final readonly class RunInSeparateProcess
2121
{
22+
private ?bool $forkIfPossible;
23+
24+
public function __construct(?bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
}
28+
29+
public function forkIfPossible(): ?bool
30+
{
31+
return $this->forkIfPossible;
32+
}
2233
}

src/Framework/Attributes/RunTestsInSeparateProcesses.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,15 @@
1919
#[Attribute(Attribute::TARGET_CLASS)]
2020
final readonly class RunTestsInSeparateProcesses
2121
{
22+
private ?bool $forkIfPossible;
23+
24+
public function __construct(?bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
}
28+
29+
public function forkIfPossible(): ?bool
30+
{
31+
return $this->forkIfPossible;
32+
}
2233
}

src/Metadata/Metadata.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -390,19 +390,19 @@ public static function requiresSettingOnMethod(string $setting, string $value):
390390
return new RequiresSetting(self::METHOD_LEVEL, $setting, $value);
391391
}
392392

393-
public static function runClassInSeparateProcess(): RunClassInSeparateProcess
393+
public static function runClassInSeparateProcess(?bool $forkIfPossible = null): RunClassInSeparateProcess
394394
{
395-
return new RunClassInSeparateProcess(self::CLASS_LEVEL);
395+
return new RunClassInSeparateProcess(self::CLASS_LEVEL, $forkIfPossible);
396396
}
397397

398-
public static function runTestsInSeparateProcesses(): RunTestsInSeparateProcesses
398+
public static function runTestsInSeparateProcesses(?bool $forkIfPossible = null): RunTestsInSeparateProcesses
399399
{
400-
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL);
400+
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL, $forkIfPossible);
401401
}
402402

403-
public static function runInSeparateProcess(): RunInSeparateProcess
403+
public static function runInSeparateProcess(?bool $forkIfPossible = null): RunInSeparateProcess
404404
{
405-
return new RunInSeparateProcess(self::METHOD_LEVEL);
405+
return new RunInSeparateProcess(self::METHOD_LEVEL, $forkIfPossible);
406406
}
407407

408408
public static function test(): Test

src/Metadata/Parser/AttributeParser.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,20 @@ public function forClass(string $className): MetadataCollection
297297
break;
298298

299299
case RunClassInSeparateProcess::class:
300-
$result[] = Metadata::runClassInSeparateProcess();
300+
assert($attributeInstance instanceof RunClassInSeparateProcess);
301+
302+
$result[] = Metadata::runClassInSeparateProcess(
303+
$attributeInstance->forkIfPossible(),
304+
);
301305

302306
break;
303307

304308
case RunTestsInSeparateProcesses::class:
305-
$result[] = Metadata::runTestsInSeparateProcesses();
309+
assert($attributeInstance instanceof RunTestsInSeparateProcesses);
310+
311+
$result[] = Metadata::runTestsInSeparateProcesses(
312+
$attributeInstance->forkIfPossible(),
313+
);
306314

307315
break;
308316

@@ -638,7 +646,11 @@ public function forMethod(string $className, string $methodName): MetadataCollec
638646
break;
639647

640648
case RunInSeparateProcess::class:
641-
$result[] = Metadata::runInSeparateProcess();
649+
assert($attributeInstance instanceof RunInSeparateProcess);
650+
651+
$result[] = Metadata::runInSeparateProcess(
652+
$attributeInstance->forkIfPossible(),
653+
);
642654

643655
break;
644656

src/Metadata/RunClassInSeparateProcess.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@
1616
*/
1717
final readonly class RunClassInSeparateProcess extends Metadata
1818
{
19+
private ?bool $forkIfPossible;
20+
21+
/**
22+
* @psalm-param 0|1 $level
23+
*/
24+
protected function __construct(int $level, ?bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
28+
parent::__construct($level);
29+
}
30+
31+
public function forkIfPossible(): ?bool
32+
{
33+
return $this->forkIfPossible;
34+
}
35+
1936
/**
2037
* @psalm-assert-if-true RunClassInSeparateProcess $this
2138
*/

src/Metadata/RunInSeparateProcess.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@
1616
*/
1717
final readonly class RunInSeparateProcess extends Metadata
1818
{
19+
private ?bool $forkIfPossible;
20+
21+
/**
22+
* @psalm-param 0|1 $level
23+
*/
24+
protected function __construct(int $level, ?bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
28+
parent::__construct($level);
29+
}
30+
31+
public function forkIfPossible(): ?bool
32+
{
33+
return $this->forkIfPossible;
34+
}
35+
1936
/**
2037
* @psalm-assert-if-true RunInSeparateProcess $this
2138
*/

src/Metadata/RunTestsInSeparateProcesses.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@
1616
*/
1717
final readonly class RunTestsInSeparateProcesses extends Metadata
1818
{
19+
private ?bool $forkIfPossible;
20+
21+
/**
22+
* @psalm-param 0|1 $level
23+
*/
24+
protected function __construct(int $level, ?bool $forkIfPossible = null)
25+
{
26+
$this->forkIfPossible = $forkIfPossible;
27+
28+
parent::__construct($level);
29+
}
30+
31+
public function forkIfPossible(): ?bool
32+
{
33+
return $this->forkIfPossible;
34+
}
35+
1936
/**
2037
* @psalm-assert-if-true RunTestsInSeparateProcesses $this
2138
*/

0 commit comments

Comments
 (0)