mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
feat: adds skipOnPHP
This commit is contained in:
@ -208,12 +208,37 @@ final class TestCall
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skips the current test on the given PHP version.
|
||||||
|
*/
|
||||||
|
public function skipOnPhp(string $version): self
|
||||||
|
{
|
||||||
|
if (mb_strlen($version) < 2) {
|
||||||
|
throw new InvalidArgumentException('The version must start with [<] or [>].');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str_starts_with($version, '>=') || str_starts_with($version, '<=')) {
|
||||||
|
$operator = substr($version, 0, 2);
|
||||||
|
$version = substr($version, 2);
|
||||||
|
} elseif (str_starts_with($version, '>') || str_starts_with($version, '<')) {
|
||||||
|
$operator = $version[0];
|
||||||
|
$version = substr($version, 1);
|
||||||
|
// ensure starts with number:
|
||||||
|
} elseif (is_numeric($version[0])) {
|
||||||
|
$operator = '==';
|
||||||
|
} else {
|
||||||
|
throw new InvalidArgumentException('The version must start with [<, >, <=, >=] or a number.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->skip(version_compare(PHP_VERSION, $version, $operator), sprintf('This test is skipped on PHP [%s%s].', $operator, $version));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skips the current test if the given test is running on Windows.
|
* Skips the current test if the given test is running on Windows.
|
||||||
*/
|
*/
|
||||||
public function skipOnWindows(): self
|
public function skipOnWindows(): self
|
||||||
{
|
{
|
||||||
return $this->skipOn('Windows', 'This test is skipped on [Windows].');
|
return $this->skipOnOs('Windows', 'This test is skipped on [Windows].');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -221,7 +246,7 @@ final class TestCall
|
|||||||
*/
|
*/
|
||||||
public function skipOnMac(): self
|
public function skipOnMac(): self
|
||||||
{
|
{
|
||||||
return $this->skipOn('Darwin', 'This test is skipped on [Mac].');
|
return $this->skipOnOs('Darwin', 'This test is skipped on [Mac].');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -229,13 +254,13 @@ final class TestCall
|
|||||||
*/
|
*/
|
||||||
public function skipOnLinux(): self
|
public function skipOnLinux(): self
|
||||||
{
|
{
|
||||||
return $this->skipOn('Linux', 'This test is skipped on [Linux].');
|
return $this->skipOnOs('Linux', 'This test is skipped on [Linux].');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skips the current test if the given test is running on the given operating systems.
|
* Skips the current test if the given test is running on the given operating systems.
|
||||||
*/
|
*/
|
||||||
private function skipOn(string $osFamily, string $message): self
|
private function skipOnOs(string $osFamily, string $message): self
|
||||||
{
|
{
|
||||||
return $osFamily === PHP_OS_FAMILY
|
return $osFamily === PHP_OS_FAMILY
|
||||||
? $this->skip($message)
|
? $this->skip($message)
|
||||||
|
|||||||
17
tests/Features/SkipOnPhp.php
Normal file
17
tests/Features/SkipOnPhp.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
it('can run on php version')
|
||||||
|
->skipOnPhp('<=7.4.0')
|
||||||
|
->assertTrue(true);
|
||||||
|
|
||||||
|
it('can skip on specific php version')
|
||||||
|
->skipOnPhp(PHP_VERSION)
|
||||||
|
->assertTrue(false);
|
||||||
|
|
||||||
|
it('can run on specific php version')
|
||||||
|
->skipOnPhp('7.4.0')
|
||||||
|
->assertTrue(true);
|
||||||
|
|
||||||
|
it('can skip on php versions depending on constraint')
|
||||||
|
->skipOnPhp('>=7.4.0')
|
||||||
|
->assertTrue(false);
|
||||||
Reference in New Issue
Block a user