Skip to content

Commit 4bf5467

Browse files
committed
added fork-if-possible annotation support
1 parent 894236a commit 4bf5467

8 files changed

+105
-9
lines changed

src/Framework/Attributes/RunClassInSeparateProcess.php

+11
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

+11
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

+11
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

+6-6
Original file line numberDiff line numberDiff line change
@@ -382,19 +382,19 @@ public static function requiresSettingOnMethod(string $setting, string $value):
382382
return new RequiresSetting(self::METHOD_LEVEL, $setting, $value);
383383
}
384384

385-
public static function runClassInSeparateProcess(): RunClassInSeparateProcess
385+
public static function runClassInSeparateProcess(?bool $forkIfPossible = null): RunClassInSeparateProcess
386386
{
387-
return new RunClassInSeparateProcess(self::CLASS_LEVEL);
387+
return new RunClassInSeparateProcess(self::CLASS_LEVEL, $forkIfPossible);
388388
}
389389

390-
public static function runTestsInSeparateProcesses(): RunTestsInSeparateProcesses
390+
public static function runTestsInSeparateProcesses(?bool $forkIfPossible = null): RunTestsInSeparateProcesses
391391
{
392-
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL);
392+
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL, $forkIfPossible);
393393
}
394394

395-
public static function runInSeparateProcess(): RunInSeparateProcess
395+
public static function runInSeparateProcess(?bool $forkIfPossible = null): RunInSeparateProcess
396396
{
397-
return new RunInSeparateProcess(self::METHOD_LEVEL);
397+
return new RunInSeparateProcess(self::METHOD_LEVEL, $forkIfPossible);
398398
}
399399

400400
public static function test(): Test

src/Metadata/Parser/AttributeParser.php

+15-3
Original file line numberDiff line numberDiff line change
@@ -288,12 +288,20 @@ public function forClass(string $className): MetadataCollection
288288
break;
289289

290290
case RunClassInSeparateProcess::class:
291-
$result[] = Metadata::runClassInSeparateProcess();
291+
assert($attributeInstance instanceof RunClassInSeparateProcess);
292+
293+
$result[] = Metadata::runClassInSeparateProcess(
294+
$attributeInstance->forkIfPossible(),
295+
);
292296

293297
break;
294298

295299
case RunTestsInSeparateProcesses::class:
296-
$result[] = Metadata::runTestsInSeparateProcesses();
300+
assert($attributeInstance instanceof RunTestsInSeparateProcesses);
301+
302+
$result[] = Metadata::runTestsInSeparateProcesses(
303+
$attributeInstance->forkIfPossible(),
304+
);
297305

298306
break;
299307

@@ -622,7 +630,11 @@ public function forMethod(string $className, string $methodName): MetadataCollec
622630
break;
623631

624632
case RunInSeparateProcess::class:
625-
$result[] = Metadata::runInSeparateProcess();
633+
assert($attributeInstance instanceof RunInSeparateProcess);
634+
635+
$result[] = Metadata::runInSeparateProcess(
636+
$attributeInstance->forkIfPossible(),
637+
);
626638

627639
break;
628640

src/Metadata/RunClassInSeparateProcess.php

+17
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

+17
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

+17
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)