psalm-plugin-phpunit/tests/_support/Helper/Acceptance.php

49 lines
1.5 KiB
PHP
Raw Normal View History

<?php
namespace Psalm\PhpUnitPlugin\Tests\Helper;
2019-02-10 07:19:06 +01:00
use Codeception\Exception\Skip;
use Codeception\Exception\TestRuntimeException;
use Composer\Semver\Comparator;
use Composer\Semver\VersionParser;
use Muglug\PackageVersions\Versions;
// here you can define custom actions
// all public methods declared in helper class will be available in $I
class Acceptance extends \Codeception\Module
{
2019-02-10 07:19:06 +01:00
/** @var array<string,string */
const VERSION_OPERATORS = [
'newer than' => '>',
'older than' => '<',
];
/**
* @Given /I have PHPUnit (newer than|older than) "([0-9.]+)" \(because of "([^"]+)"\)/
2019-02-13 22:03:21 +01:00
*
* @return void
2019-02-10 07:19:06 +01:00
*/
2019-02-13 22:03:21 +01:00
public function havePHPUnitOfACertainVersionRangeBecauseOf(string $operator, string $version, string $reason)
2019-02-10 07:19:06 +01:00
{
if (!isset(self::VERSION_OPERATORS[$operator])) {
throw new TestRuntimeException("Unknown operator: $operator");
}
$op = (string) self::VERSION_OPERATORS[$operator];
$currentVersion = (string) Versions::getShortVersion('phpunit/phpunit');
$this->debug(sprintf("Current version: %s", $currentVersion));
$parser = new VersionParser();
$currentVersion = $parser->normalize($currentVersion);
$version = $parser->normalize($version);
2019-02-10 07:19:06 +01:00
$result = Comparator::compare($currentVersion, $op, $version);
$this->debug("Comparing $currentVersion $op $version => $result");
if (!$result) {
throw new Skip("This scenario requires PHPUnit $op $version because of $reason");
}
}
}