Skip to content

Commit

Permalink
added fork-if-possible annotation support
Browse files Browse the repository at this point in the history
  • Loading branch information
staabm committed Mar 29, 2024
1 parent c09829b commit f3fb3f2
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 9 deletions.
11 changes: 11 additions & 0 deletions src/Framework/Attributes/RunClassInSeparateProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,15 @@
#[Attribute(Attribute::TARGET_CLASS)]
final readonly class RunClassInSeparateProcess
{
private ?bool $forkIfPossible;

public function __construct(bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}
}
11 changes: 11 additions & 0 deletions src/Framework/Attributes/RunInSeparateProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,15 @@
#[Attribute(Attribute::TARGET_METHOD)]
final readonly class RunInSeparateProcess
{
private ?bool $forkIfPossible;

public function __construct(?bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}
}
11 changes: 11 additions & 0 deletions src/Framework/Attributes/RunTestsInSeparateProcesses.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,15 @@
#[Attribute(Attribute::TARGET_CLASS)]
final readonly class RunTestsInSeparateProcesses
{
private ?bool $forkIfPossible;

public function __construct(?bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}
}
12 changes: 6 additions & 6 deletions src/Metadata/Metadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -382,19 +382,19 @@ public static function requiresSettingOnMethod(string $setting, string $value):
return new RequiresSetting(self::METHOD_LEVEL, $setting, $value);
}

public static function runClassInSeparateProcess(): RunClassInSeparateProcess
public static function runClassInSeparateProcess(?bool $forkIfPossible = null): RunClassInSeparateProcess
{
return new RunClassInSeparateProcess(self::CLASS_LEVEL);
return new RunClassInSeparateProcess(self::CLASS_LEVEL, $forkIfPossible);
}

public static function runTestsInSeparateProcesses(): RunTestsInSeparateProcesses
public static function runTestsInSeparateProcesses(?bool $forkIfPossible = null): RunTestsInSeparateProcesses
{
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL);
return new RunTestsInSeparateProcesses(self::CLASS_LEVEL, $forkIfPossible);
}

public static function runInSeparateProcess(): RunInSeparateProcess
public static function runInSeparateProcess(?bool $forkIfPossible = null): RunInSeparateProcess
{
return new RunInSeparateProcess(self::METHOD_LEVEL);
return new RunInSeparateProcess(self::METHOD_LEVEL, $forkIfPossible);
}

public static function test(): Test
Expand Down
18 changes: 15 additions & 3 deletions src/Metadata/Parser/AttributeParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -288,12 +288,20 @@ public function forClass(string $className): MetadataCollection
break;

case RunClassInSeparateProcess::class:
$result[] = Metadata::runClassInSeparateProcess();
assert($attributeInstance instanceof RunClassInSeparateProcess);

$result[] = Metadata::runClassInSeparateProcess(
$attributeInstance->forkIfPossible(),
);

break;

case RunTestsInSeparateProcesses::class:
$result[] = Metadata::runTestsInSeparateProcesses();
assert($attributeInstance instanceof RunTestsInSeparateProcesses);

$result[] = Metadata::runTestsInSeparateProcesses(
$attributeInstance->forkIfPossible(),
);

break;

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

case RunInSeparateProcess::class:
$result[] = Metadata::runInSeparateProcess();
assert($attributeInstance instanceof RunInSeparateProcess);

$result[] = Metadata::runInSeparateProcess(
$attributeInstance->forkIfPossible(),
);

break;

Expand Down
17 changes: 17 additions & 0 deletions src/Metadata/RunClassInSeparateProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,23 @@
*/
final readonly class RunClassInSeparateProcess extends Metadata
{
private ?bool $forkIfPossible;

/**
* @psalm-param 0|1 $level
*/
protected function __construct(int $level, ?bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;

parent::__construct($level);
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}

/**
* @psalm-assert-if-true RunClassInSeparateProcess $this
*/
Expand Down
17 changes: 17 additions & 0 deletions src/Metadata/RunInSeparateProcess.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,23 @@
*/
final readonly class RunInSeparateProcess extends Metadata
{
private ?bool $forkIfPossible;

/**
* @psalm-param 0|1 $level
*/
protected function __construct(int $level, ?bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;

parent::__construct($level);
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}

/**
* @psalm-assert-if-true RunInSeparateProcess $this
*/
Expand Down
17 changes: 17 additions & 0 deletions src/Metadata/RunTestsInSeparateProcesses.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,23 @@
*/
final readonly class RunTestsInSeparateProcesses extends Metadata
{
private ?bool $forkIfPossible;

/**
* @psalm-param 0|1 $level
*/
protected function __construct(int $level, ?bool $forkIfPossible = null)
{
$this->forkIfPossible = $forkIfPossible;

parent::__construct($level);
}

public function forkIfPossible(): ?bool
{
return $this->forkIfPossible;
}

/**
* @psalm-assert-if-true RunTestsInSeparateProcesses $this
*/
Expand Down

0 comments on commit f3fb3f2

Please sign in to comment.