mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
feat: only registers globals if necessary
This commit is contained in:
2
bin/pest
2
bin/pest
@ -11,6 +11,8 @@ use Symfony\Component\Console\Output\ConsoleOutput;
|
|||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
(static function () {
|
(static function () {
|
||||||
|
$_SERVER['__PEST__'] = true;
|
||||||
|
|
||||||
// Ensures Collision's Printer is registered.
|
// Ensures Collision's Printer is registered.
|
||||||
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter';
|
$_SERVER['COLLISION_PRINTER'] = 'DefaultPrinter';
|
||||||
|
|
||||||
|
|||||||
@ -14,149 +14,151 @@ use Pest\Support\HigherOrderTapProxy;
|
|||||||
use Pest\TestSuite;
|
use Pest\TestSuite;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
if (! function_exists('expect')) {
|
if (array_key_exists('__PEST__', $_SERVER)) {
|
||||||
/**
|
if (! function_exists('expect')) {
|
||||||
* Creates a new expectation.
|
/**
|
||||||
*
|
* Creates a new expectation.
|
||||||
* @template TValue
|
*
|
||||||
*
|
* @template TValue
|
||||||
* @param TValue|null $value
|
*
|
||||||
* @return Expectation<TValue|null>
|
* @param TValue|null $value
|
||||||
*/
|
* @return Expectation<TValue|null>
|
||||||
function expect(mixed $value = null): Expectation
|
*/
|
||||||
{
|
function expect(mixed $value = null): Expectation
|
||||||
return new Expectation($value);
|
{
|
||||||
}
|
return new Expectation($value);
|
||||||
}
|
|
||||||
|
|
||||||
if (! function_exists('beforeAll')) {
|
|
||||||
/**
|
|
||||||
* Runs the given closure before all tests in the current file.
|
|
||||||
*/
|
|
||||||
function beforeAll(Closure $closure): void
|
|
||||||
{
|
|
||||||
TestSuite::getInstance()->beforeAll->set($closure);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! function_exists('beforeEach')) {
|
|
||||||
/**
|
|
||||||
* Runs the given closure before each test in the current file.
|
|
||||||
*
|
|
||||||
* @return BeforeEachCall|TestCase|mixed
|
|
||||||
*/
|
|
||||||
function beforeEach(Closure $closure = null): BeforeEachCall
|
|
||||||
{
|
|
||||||
$filename = Backtrace::file();
|
|
||||||
|
|
||||||
return new BeforeEachCall(TestSuite::getInstance(), $filename, $closure);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! function_exists('dataset')) {
|
|
||||||
/**
|
|
||||||
* Registers the given dataset.
|
|
||||||
*
|
|
||||||
* @param Closure|iterable<int|string, mixed> $dataset
|
|
||||||
*/
|
|
||||||
function dataset(string $name, Closure|iterable $dataset): void
|
|
||||||
{
|
|
||||||
$scope = DatasetInfo::scope(Backtrace::datasetsFile());
|
|
||||||
DatasetsRepository::set($name, $dataset, $scope);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! function_exists('uses')) {
|
|
||||||
/**
|
|
||||||
* The uses function binds the given
|
|
||||||
* arguments to test closures.
|
|
||||||
*
|
|
||||||
* @param class-string ...$classAndTraits
|
|
||||||
*/
|
|
||||||
function uses(string ...$classAndTraits): UsesCall
|
|
||||||
{
|
|
||||||
$filename = Backtrace::file();
|
|
||||||
|
|
||||||
return new UsesCall($filename, array_values($classAndTraits));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! function_exists('test')) {
|
|
||||||
/**
|
|
||||||
* Adds the given closure as a test. The first argument
|
|
||||||
* is the test description; the second argument is
|
|
||||||
* a closure that contains the test expectations.
|
|
||||||
*
|
|
||||||
* @return TestCall|TestCase|mixed
|
|
||||||
*/
|
|
||||||
function test(string $description = null, Closure $closure = null)
|
|
||||||
{
|
|
||||||
if ($description === null && TestSuite::getInstance()->test !== null) {
|
|
||||||
return new HigherOrderTapProxy(TestSuite::getInstance()->test);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$filename = Backtrace::testFile();
|
if (! function_exists('beforeAll')) {
|
||||||
|
/**
|
||||||
|
* Runs the given closure before all tests in the current file.
|
||||||
|
*/
|
||||||
|
function beforeAll(Closure $closure): void
|
||||||
|
{
|
||||||
|
TestSuite::getInstance()->beforeAll->set($closure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new TestCall(TestSuite::getInstance(), $filename, $description, $closure);
|
if (! function_exists('beforeEach')) {
|
||||||
}
|
/**
|
||||||
}
|
* Runs the given closure before each test in the current file.
|
||||||
|
*
|
||||||
if (! function_exists('it')) {
|
* @return BeforeEachCall|TestCase|mixed
|
||||||
/**
|
*/
|
||||||
* Adds the given closure as a test. The first argument
|
function beforeEach(Closure $closure = null): BeforeEachCall
|
||||||
* is the test description; the second argument is
|
{
|
||||||
* a closure that contains the test expectations.
|
$filename = Backtrace::file();
|
||||||
*
|
|
||||||
* @return TestCall|TestCase|mixed
|
return new BeforeEachCall(TestSuite::getInstance(), $filename, $closure);
|
||||||
*/
|
}
|
||||||
function it(string $description, Closure $closure = null): TestCall
|
}
|
||||||
{
|
|
||||||
$description = sprintf('it %s', $description);
|
if (! function_exists('dataset')) {
|
||||||
|
/**
|
||||||
/** @var TestCall $test */
|
* Registers the given dataset.
|
||||||
$test = test($description, $closure);
|
*
|
||||||
|
* @param Closure|iterable<int|string, mixed> $dataset
|
||||||
return $test;
|
*/
|
||||||
}
|
function dataset(string $name, Closure|iterable $dataset): void
|
||||||
}
|
{
|
||||||
|
$scope = DatasetInfo::scope(Backtrace::datasetsFile());
|
||||||
if (! function_exists('todo')) {
|
DatasetsRepository::set($name, $dataset, $scope);
|
||||||
/**
|
}
|
||||||
* Adds the given todo test. Internally, this test
|
}
|
||||||
* is marked as incomplete. Yet, Collision, Pest's
|
|
||||||
* printer, will display it as a "todo" test.
|
if (! function_exists('uses')) {
|
||||||
*
|
/**
|
||||||
* @return TestCall|TestCase|mixed
|
* The uses function binds the given
|
||||||
*/
|
* arguments to test closures.
|
||||||
function todo(string $description): TestCall
|
*
|
||||||
{
|
* @param class-string ...$classAndTraits
|
||||||
/* @phpstan-ignore-next-line */
|
*/
|
||||||
return test($description, fn () => self::markTestSkipped(
|
function uses(string ...$classAndTraits): UsesCall
|
||||||
'__TODO__',
|
{
|
||||||
));
|
$filename = Backtrace::file();
|
||||||
}
|
|
||||||
}
|
return new UsesCall($filename, array_values($classAndTraits));
|
||||||
|
}
|
||||||
if (! function_exists('afterEach')) {
|
}
|
||||||
/**
|
|
||||||
* Runs the given closure after each test in the current file.
|
if (! function_exists('test')) {
|
||||||
*
|
/**
|
||||||
* @return AfterEachCall|TestCase|mixed
|
* Adds the given closure as a test. The first argument
|
||||||
*/
|
* is the test description; the second argument is
|
||||||
function afterEach(Closure $closure = null): AfterEachCall
|
* a closure that contains the test expectations.
|
||||||
{
|
*
|
||||||
$filename = Backtrace::file();
|
* @return TestCall|TestCase|mixed
|
||||||
|
*/
|
||||||
return new AfterEachCall(TestSuite::getInstance(), $filename, $closure);
|
function test(string $description = null, Closure $closure = null)
|
||||||
}
|
{
|
||||||
}
|
if ($description === null && TestSuite::getInstance()->test !== null) {
|
||||||
|
return new HigherOrderTapProxy(TestSuite::getInstance()->test);
|
||||||
if (! function_exists('afterAll')) {
|
}
|
||||||
/**
|
|
||||||
* Runs the given closure after all tests in the current file.
|
$filename = Backtrace::testFile();
|
||||||
*/
|
|
||||||
function afterAll(Closure $closure): void
|
return new TestCall(TestSuite::getInstance(), $filename, $description, $closure);
|
||||||
{
|
}
|
||||||
TestSuite::getInstance()->afterAll->set($closure);
|
}
|
||||||
|
|
||||||
|
if (! function_exists('it')) {
|
||||||
|
/**
|
||||||
|
* Adds the given closure as a test. The first argument
|
||||||
|
* is the test description; the second argument is
|
||||||
|
* a closure that contains the test expectations.
|
||||||
|
*
|
||||||
|
* @return TestCall|TestCase|mixed
|
||||||
|
*/
|
||||||
|
function it(string $description, Closure $closure = null): TestCall
|
||||||
|
{
|
||||||
|
$description = sprintf('it %s', $description);
|
||||||
|
|
||||||
|
/** @var TestCall $test */
|
||||||
|
$test = test($description, $closure);
|
||||||
|
|
||||||
|
return $test;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! function_exists('todo')) {
|
||||||
|
/**
|
||||||
|
* Adds the given todo test. Internally, this test
|
||||||
|
* is marked as incomplete. Yet, Collision, Pest's
|
||||||
|
* printer, will display it as a "todo" test.
|
||||||
|
*
|
||||||
|
* @return TestCall|TestCase|mixed
|
||||||
|
*/
|
||||||
|
function todo(string $description): TestCall
|
||||||
|
{
|
||||||
|
/* @phpstan-ignore-next-line */
|
||||||
|
return test($description, fn () => self::markTestSkipped(
|
||||||
|
'__TODO__',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! function_exists('afterEach')) {
|
||||||
|
/**
|
||||||
|
* Runs the given closure after each test in the current file.
|
||||||
|
*
|
||||||
|
* @return AfterEachCall|TestCase|mixed
|
||||||
|
*/
|
||||||
|
function afterEach(Closure $closure = null): AfterEachCall
|
||||||
|
{
|
||||||
|
$filename = Backtrace::file();
|
||||||
|
|
||||||
|
return new AfterEachCall(TestSuite::getInstance(), $filename, $closure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! function_exists('afterAll')) {
|
||||||
|
/**
|
||||||
|
* Runs the given closure after all tests in the current file.
|
||||||
|
*/
|
||||||
|
function afterAll(Closure $closure): void
|
||||||
|
{
|
||||||
|
TestSuite::getInstance()->afterAll->set($closure);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user