mirror of
https://github.com/pestphp/pest.git
synced 2026-03-12 10:47:25 +01:00
Merge pull request #103 from nuernbergerA/feature/depends
Add support for PHPUnit's @depends
This commit is contained in:
@ -129,16 +129,25 @@ trait TestCase
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs the test.
|
* Runs the test.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \Throwable
|
||||||
*/
|
*/
|
||||||
public function __test(): void
|
public function __test()
|
||||||
{
|
{
|
||||||
$this->__callClosure($this->__test, func_get_args());
|
return $this->__callClosure($this->__test, func_get_args());
|
||||||
}
|
}
|
||||||
|
|
||||||
private function __callClosure(Closure $closure, array $arguments): void
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \Throwable
|
||||||
|
*/
|
||||||
|
private function __callClosure(Closure $closure, array $arguments)
|
||||||
{
|
{
|
||||||
ExceptionTrace::ensure(function () use ($closure, $arguments) {
|
return ExceptionTrace::ensure(function () use ($closure, $arguments) {
|
||||||
call_user_func_array(Closure::bind($closure, $this, get_class($this)), $arguments);
|
return call_user_func_array(Closure::bind($closure, $this, get_class($this)), $arguments);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -132,10 +132,14 @@ final class TestCaseFactory
|
|||||||
$proxies = $this->proxies;
|
$proxies = $this->proxies;
|
||||||
$factoryTest = $this->test;
|
$factoryTest = $this->test;
|
||||||
|
|
||||||
$test = function () use ($chains, $proxies, $factoryTest): void {
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
$test = function () use ($chains, $proxies, $factoryTest) {
|
||||||
$proxies->proxy($this);
|
$proxies->proxy($this);
|
||||||
$chains->chain($this);
|
$chains->chain($this);
|
||||||
call_user_func(Closure::bind($factoryTest, $this, get_class($this)), ...func_get_args());
|
|
||||||
|
return call_user_func(Closure::bind($factoryTest, $this, get_class($this)), ...func_get_args());
|
||||||
};
|
};
|
||||||
|
|
||||||
$className = $this->makeClassFromFilename($this->filename);
|
$className = $this->makeClassFromFilename($this->filename);
|
||||||
|
|||||||
@ -84,6 +84,18 @@ final class TestCall
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the test depends.
|
||||||
|
*/
|
||||||
|
public function depends(string ...$tests): TestCall
|
||||||
|
{
|
||||||
|
$this->testCaseFactory
|
||||||
|
->factoryProxies
|
||||||
|
->add(Backtrace::file(), Backtrace::line(), 'setDependencies', [$tests]);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the test suite only this test case.
|
* Makes the test suite only this test case.
|
||||||
*/
|
*/
|
||||||
@ -95,7 +107,7 @@ final class TestCall
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the test groups(s).
|
* Sets the test group(s).
|
||||||
*/
|
*/
|
||||||
public function group(string ...$groups): TestCall
|
public function group(string ...$groups): TestCall
|
||||||
{
|
{
|
||||||
|
|||||||
@ -17,11 +17,15 @@ final class ExceptionTrace
|
|||||||
/**
|
/**
|
||||||
* Ensures the given closure reports
|
* Ensures the given closure reports
|
||||||
* the good execution context.
|
* the good execution context.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws \Throwable
|
||||||
*/
|
*/
|
||||||
public static function ensure(Closure $closure): void
|
public static function ensure(Closure $closure)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$closure();
|
return $closure();
|
||||||
} catch (Throwable $throwable) {
|
} catch (Throwable $throwable) {
|
||||||
if (Str::startsWith($message = $throwable->getMessage(), self::UNDEFINED_METHOD)) {
|
if (Str::startsWith($message = $throwable->getMessage(), self::UNDEFINED_METHOD)) {
|
||||||
$message = str_replace(self::UNDEFINED_METHOD, 'Call to undefined method ', $message);
|
$message = str_replace(self::UNDEFINED_METHOD, 'Call to undefined method ', $message);
|
||||||
|
|||||||
@ -49,6 +49,16 @@
|
|||||||
✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #3
|
✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #3
|
||||||
✓ it creates unique test case names - count
|
✓ it creates unique test case names - count
|
||||||
|
|
||||||
|
WARN Tests\Features\Depends
|
||||||
|
✓ first
|
||||||
|
✓ second
|
||||||
|
✓ depends
|
||||||
|
✓ depends with ...params
|
||||||
|
✓ depends with defined arguments
|
||||||
|
✓ depends run test only once
|
||||||
|
s incomplete → incomplete
|
||||||
|
w depends on incomplete → This test depends on "P\Tests\Features\Depends::incomplete" which does not exist.
|
||||||
|
|
||||||
PASS Tests\Features\Exceptions
|
PASS Tests\Features\Exceptions
|
||||||
✓ it gives access the the underlying expectException
|
✓ it gives access the the underlying expectException
|
||||||
✓ it catch exceptions
|
✓ it catch exceptions
|
||||||
@ -151,5 +161,6 @@
|
|||||||
WARN Tests\Visual\Success
|
WARN Tests\Visual\Success
|
||||||
s visual snapshot of test suite on success
|
s visual snapshot of test suite on success
|
||||||
|
|
||||||
Tests: 6 skipped, 86 passed
|
Tests: 1 warnings, 7 skipped, 85 passed
|
||||||
Time: 3.58s
|
Time: 2.65s
|
||||||
|
|
||||||
|
|||||||
44
tests/Features/Depends.php
Normal file
44
tests/Features/Depends.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$runCounter = 0;
|
||||||
|
|
||||||
|
test('first', function () use (&$runCounter) {
|
||||||
|
assertTrue(true);
|
||||||
|
$runCounter++;
|
||||||
|
|
||||||
|
return 'first';
|
||||||
|
});
|
||||||
|
|
||||||
|
test('second', function () use (&$runCounter) {
|
||||||
|
assertTrue(true);
|
||||||
|
$runCounter++;
|
||||||
|
|
||||||
|
return 'second';
|
||||||
|
});
|
||||||
|
|
||||||
|
test('depends', function () {
|
||||||
|
assertEquals(
|
||||||
|
['first', 'second'],
|
||||||
|
func_get_args()
|
||||||
|
);
|
||||||
|
})->depends('first', 'second');
|
||||||
|
|
||||||
|
test('depends with ...params', function (string ...$params) {
|
||||||
|
assertEquals(
|
||||||
|
['first', 'second'],
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
})->depends('first', 'second');
|
||||||
|
|
||||||
|
test('depends with defined arguments', function (string $first, string $second) {
|
||||||
|
assertEquals('first', $first);
|
||||||
|
assertEquals('second', $second);
|
||||||
|
})->depends('first', 'second');
|
||||||
|
|
||||||
|
test('depends run test only once', function () use (&$runCounter) {
|
||||||
|
assertEquals(2, $runCounter);
|
||||||
|
})->depends('first', 'second');
|
||||||
|
|
||||||
|
test('incomplete')->skip('incomplete');
|
||||||
|
|
||||||
|
test('depends on incomplete')->depends('incomplete')->doesNotPerformAssertions();
|
||||||
Reference in New Issue
Block a user