Compare commits

...

21 Commits

Author SHA1 Message Date
b126e8e6e4 release: v2.23.2 2023-10-10 16:40:34 +01:00
677129d23d chore: uses paratest 7.3.0 2023-10-10 16:39:04 +01:00
cef5c36885 release: v2.23.1 2023-10-10 15:57:14 +01:00
a343ba4a29 chore: adds PHPUnit 10.4.1 support 2023-10-10 15:57:07 +01:00
21b30b22a7 release: v2.23.0 2023-10-10 15:41:56 +01:00
449c4b6c5e chore: adds collision v8 support 2023-10-10 15:37:25 +01:00
6513ad6ced release: v2.22.1 2023-10-10 14:59:16 +01:00
12421c846e chore: adds termwind v2 support 2023-10-10 14:55:43 +01:00
a312cecede release: v2.22.0 2023-10-10 08:45:41 +01:00
4be97ed314 Merge pull request #977 from JonPurvis/to-be-url-expectation
[2.x] Adds `toBeUrl()` Expectation
2023-10-09 20:06:52 +01:00
5101b9dce3 add to be url expectation 2023-10-09 20:02:11 +01:00
2ffafd445d release: v2.21.0 2023-10-06 13:33:39 +01:00
6068ef6150 feat: adds support for PHPUnit 10.4 2023-10-06 13:33:31 +01:00
8c0b933fcd chore: bumps dependencies 2023-10-05 18:32:07 +01:00
991e02649a chore: bumps paratest 2023-10-05 09:42:56 +01:00
a8b785f69e release: v2.20.0 2023-09-29 19:05:52 +01:00
56610d886d Merge pull request #968 from JonPurvis/add-to-be-between-expectation
[2.x] Add `toBeBetween` expectation
2023-09-29 19:01:05 +01:00
be0d9e964b add toBeBetween() expectation 2023-09-22 01:55:06 +01:00
6bc9da3fe1 chore: bumps collision 2023-09-19 11:48:16 +01:00
6f54462070 fix: sync wrapper runner with paratest 2023-09-19 11:27:09 +01:00
876629b744 release: v2.19.1 2023-09-19 11:01:29 +01:00
12 changed files with 152 additions and 20 deletions

View File

@ -18,16 +18,17 @@
],
"require": {
"php": "^8.1.0",
"brianium/paratest": "^7.2.6",
"nunomaduro/collision": "^7.8.1",
"nunomaduro/termwind": "^1.15.1",
"brianium/paratest": "^7.3.0",
"nunomaduro/collision": "^7.9.0|^8.0.0",
"nunomaduro/termwind": "^1.15.1|^2.0.0",
"pestphp/pest-plugin": "^2.1.1",
"pestphp/pest-plugin-arch": "^2.3.3",
"phpunit/phpunit": "^10.3.4"
"pestphp/pest-plugin-arch": "^2.4.0",
"phpunit/phpunit": "^10.4.1"
},
"conflict": {
"webmozart/assert": "<1.11.0",
"phpunit/phpunit": ">10.3.4"
"phpunit/phpunit": ">10.4.1",
"sebastian/exporter": "<5.1.0",
"webmozart/assert": "<1.11.0"
},
"autoload": {
"psr-4": {
@ -51,7 +52,7 @@
},
"require-dev": {
"pestphp/pest-dev-tools": "^2.16.0",
"pestphp/pest-plugin-type-coverage": "^2.2.0",
"pestphp/pest-plugin-type-coverage": "^2.4.0",
"symfony/process": "^6.3.4"
},
"minimum-stability": "dev",

View File

@ -967,6 +967,7 @@ final class Expectation
}
Assert::assertInstanceOf($exception, $e, $message);
$callback($e);
return $this;
@ -1128,4 +1129,33 @@ final class Expectation
return $this;
}
/**
* Asserts that the value is between 2 specified values
*
* @return self<TValue>
*/
public function toBeBetween(int|float|DateTimeInterface $lowestValue, int|float|DateTimeInterface $highestValue, string $message = ''): self
{
Assert::assertGreaterThanOrEqual($lowestValue, $this->value, $message);
Assert::assertLessThanOrEqual($highestValue, $this->value, $message);
return $this;
}
/**
* Asserts that the value is a url
*
* @return self<TValue>
*/
public function toBeUrl(string $message = ''): self
{
if ($message === '') {
$message = "Failed asserting that {$this->value} is a url.";
}
Assert::assertTrue(Str::isUrl((string) $this->value), $message);
return $this;
}
}

View File

@ -6,7 +6,7 @@ namespace Pest;
function version(): string
{
return '2.19.0';
return '2.23.2';
}
function testDirectory(string $file = ''): string

View File

@ -254,11 +254,11 @@ final class WrapperRunner implements RunnerInterface
private function destroyWorker(int $token): void
{
// Mutation Testing tells us that the following `unset()` already destroys
// the `WrapperWorker`, which destroys the Symfony's `Process`, which
// automatically calls `Process::stop` within `Process::__destruct()`.
// But we prefer to have an explicit stops.
$this->workers[$token]->stop();
// We need to wait for ApplicationForWrapperWorker::end to end
while ($this->workers[$token]->isRunning()) {
usleep(self::CYCLE_SLEEP);
}
unset($this->workers[$token]);
}
@ -297,6 +297,7 @@ final class WrapperRunner implements RunnerInterface
array_merge_recursive($testResultSum->phpDeprecations(), $testResult->phpDeprecations()),
array_merge_recursive($testResultSum->phpNotices(), $testResult->phpNotices()),
array_merge_recursive($testResultSum->phpWarnings(), $testResult->phpWarnings()),
$testResultSum->numberOfIssuesIgnoredByBaseline() + $testResult->numberOfIssuesIgnoredByBaseline(),
);
}
@ -325,6 +326,8 @@ final class WrapperRunner implements RunnerInterface
$testResultSum->phpDeprecations(),
$testResultSum->phpNotices(),
$testResultSum->phpWarnings(),
$testResultSum->numberOfIssuesIgnoredByBaseline(),
);
$this->printer->printResults(

View File

@ -108,4 +108,12 @@ final class Str
{
return sprintf('`%s` → %s', $describeDescription, $testDescription);
}
/**
* Determine if a given value is a valid URL.
*/
public static function isUrl(string $value): bool
{
return (bool) filter_var($value, FILTER_VALIDATE_URL);
}
}

View File

@ -1,5 +1,5 @@
Pest Testing Framework 2.19.0.
Pest Testing Framework 2.23.2.
USAGE: pest <file> [options]
@ -14,6 +14,9 @@
--cache-directory [dir] ............................ Specify cache directory
--generate-configuration Generate configuration file with suggested settings
--migrate-configuration ....... Migrate configuration file to current format
--generate-baseline [file] .................... Generate baseline for issues
--use-baseline [file] ........................ Use baseline to ignore issues
--ignore-baseline ..................... Do not use baseline to ignore issues
SELECTION OPTIONS:
--bail ........................... Stop execution upon first not-passed test
@ -89,7 +92,7 @@
--testdox-html [file] .. Write test results in TestDox format (HTML) to file
--testdox-text [file] Write test results in TestDox format (plain text) to file
--log-events-text [file] ............... Stream events as plain text to file
--log-events-verbose-text [file] Stream events as plain text (with telemetry information) to file
--log-events-verbose-text [file] Stream events as plain text with extended information to file
--no-logging ....... Ignore logging configured in the XML configuration file
CODE COVERAGE OPTIONS:

View File

@ -1,3 +1,3 @@
Pest Testing Framework 2.19.0.
Pest Testing Framework 2.23.2.

View File

@ -332,6 +332,18 @@
✓ pass
✓ failures
✓ failures with custom message
✓ not failures
PASS Tests\Features\Expect\toBeBetween
✓ passes with int
✓ passes with float
✓ passes with float and int
✓ passes with DateTime
✓ failure with int
✓ failure with float
✓ failure with float and int
✓ failure with DateTime
✓ failures with custom message
✓ not failures
PASS Tests\Features\Expect\toBeBool
@ -578,6 +590,13 @@
✓ pass
✓ failures
✓ failures with custom message
✓ not failures
PASS Tests\Features\Expect\toBeUrl
✓ pass
✓ failures
✓ failures with custom message
✓ failures with default message
✓ not failures
PASS Tests\Features\Expect\toBeUuid
@ -1333,4 +1352,4 @@
WARN Tests\Visual\Version
- visual snapshot of help command output
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 943 passed (2224 assertions)
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 958 passed (2281 assertions)

View File

@ -0,0 +1,43 @@
<?php
use PHPUnit\Framework\ExpectationFailedException;
test('passes with int', function () {
expect(2)->toBeBetween(1, 3);
});
test('passes with float', function () {
expect(1.5)->toBeBetween(1.25, 1.75);
});
test('passes with float and int', function () {
expect(1.5)->toBeBetween(1, 2);
});
test('passes with DateTime', function () {
expect(new DateTime('2023-09-22'))->toBeBetween(new DateTime('2023-09-21'), new DateTime('2023-09-23'));
});
test('failure with int', function () {
expect(4)->toBeBetween(1, 3);
})->throws(ExpectationFailedException::class);
test('failure with float', function () {
expect(2)->toBeBetween(1.5, 1.75);
})->throws(ExpectationFailedException::class);
test('failure with float and int', function () {
expect(2.1)->toBeBetween(1, 2);
})->throws(ExpectationFailedException::class);
test('failure with DateTime', function () {
expect(new DateTime('2023-09-20'))->toBeBetween(new DateTime('2023-09-21'), new DateTime('2023-09-23'));
})->throws(ExpectationFailedException::class);
test('failures with custom message', function () {
expect(4)->toBeBetween(1, 3, 'oh no!');
})->throws(ExpectationFailedException::class, 'oh no!');
test('not failures', function () {
expect(2)->not->toBeBetween(1, 3);
})->throws(ExpectationFailedException::class);

View File

@ -0,0 +1,24 @@
<?php
use PHPUnit\Framework\ExpectationFailedException;
test('pass', function () {
expect('https://pestphp.com')->toBeUrl()
->and('pestphp.com')->not->toBeUrl();
});
test('failures', function () {
expect('pestphp.com')->toBeUrl();
})->throws(ExpectationFailedException::class);
test('failures with custom message', function () {
expect('pestphp.com')->toBeUrl('oh no!');
})->throws(ExpectationFailedException::class, 'oh no!');
test('failures with default message', function () {
expect('pestphp.com')->toBeUrl();
})->throws(ExpectationFailedException::class, 'Failed asserting that pestphp.com is a url.');
test('not failures', function () {
expect('https://pestphp.com')->not->toBeUrl();
})->throws(ExpectationFailedException::class);

View File

@ -57,8 +57,9 @@ test('failures 3', function () {
expect(function () {
throw new Exception();
})->toThrow(function (RuntimeException $e) {
//
});
})->throws(ExpectationFailedException::class, 'Failed asserting that Exception Object');
})->throws(ExpectationFailedException::class, 'Failed asserting that an object is an instance of class RuntimeException.');
test('failures 4', function () {
expect(function () {
@ -73,7 +74,7 @@ test('failures 5', function () {
expect(function () {
throw new Exception('actual message');
})->toThrow('expected message');
})->throws(ExpectationFailedException::class, 'Failed asserting that \'actual message\' contains "expected message".');
})->throws(ExpectationFailedException::class, 'Failed asserting that \'actual message\' [ASCII](length: 14) contains "expected message" [ASCII](length: 16).');
test('failures 6', function () {
expect(function () {

View File

@ -16,7 +16,7 @@ $run = function () {
test('parallel', function () use ($run) {
expect($run('--exclude-group=integration'))
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 932 passed (2209 assertions)')
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 947 passed (2266 assertions)')
->toContain('Parallel: 3 processes');
})->skipOnWindows();