mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
Add helper to get last element of array
This commit is contained in:
@ -6,6 +6,7 @@ namespace Pest\PendingCalls;
|
|||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use Pest\PendingCalls\Concerns\Describable;
|
use Pest\PendingCalls\Concerns\Describable;
|
||||||
|
use Pest\Support\Arr;
|
||||||
use Pest\Support\Backtrace;
|
use Pest\Support\Backtrace;
|
||||||
use Pest\Support\ChainableClosure;
|
use Pest\Support\ChainableClosure;
|
||||||
use Pest\Support\HigherOrderMessageCollection;
|
use Pest\Support\HigherOrderMessageCollection;
|
||||||
@ -54,7 +55,7 @@ final class AfterEachCall
|
|||||||
$proxies = $this->proxies;
|
$proxies = $this->proxies;
|
||||||
|
|
||||||
$afterEachTestCase = ChainableClosure::boundWhen(
|
$afterEachTestCase = ChainableClosure::boundWhen(
|
||||||
fn (): bool => $describing === [] || in_array(end($describing), $this->__describing, true),
|
fn (): bool => $describing === [] || in_array(Arr::last($describing), $this->__describing, true),
|
||||||
ChainableClosure::bound(fn () => $proxies->chain($this), $this->closure)->bindTo($this, self::class), // @phpstan-ignore-line
|
ChainableClosure::bound(fn () => $proxies->chain($this), $this->closure)->bindTo($this, self::class), // @phpstan-ignore-line
|
||||||
)->bindTo($this, self::class);
|
)->bindTo($this, self::class);
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ namespace Pest\PendingCalls;
|
|||||||
use Closure;
|
use Closure;
|
||||||
use Pest\Exceptions\AfterBeforeTestFunction;
|
use Pest\Exceptions\AfterBeforeTestFunction;
|
||||||
use Pest\PendingCalls\Concerns\Describable;
|
use Pest\PendingCalls\Concerns\Describable;
|
||||||
|
use Pest\Support\Arr;
|
||||||
use Pest\Support\Backtrace;
|
use Pest\Support\Backtrace;
|
||||||
use Pest\Support\ChainableClosure;
|
use Pest\Support\ChainableClosure;
|
||||||
use Pest\Support\HigherOrderMessageCollection;
|
use Pest\Support\HigherOrderMessageCollection;
|
||||||
@ -64,11 +65,11 @@ final class BeforeEachCall
|
|||||||
$beforeEachTestCall = function (TestCall $testCall) use ($describing): void {
|
$beforeEachTestCall = function (TestCall $testCall) use ($describing): void {
|
||||||
|
|
||||||
if ($this->describing !== []) {
|
if ($this->describing !== []) {
|
||||||
if (end($describing) !== end($this->describing)) {
|
if (Arr::last($describing) !== Arr::last($this->describing)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! in_array(end($describing), $testCall->describing, true)) {
|
if (! in_array(Arr::last($describing), $testCall->describing, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,7 +78,7 @@ final class BeforeEachCall
|
|||||||
};
|
};
|
||||||
|
|
||||||
$beforeEachTestCase = ChainableClosure::boundWhen(
|
$beforeEachTestCase = ChainableClosure::boundWhen(
|
||||||
fn (): bool => $describing === [] || in_array(end($describing), $this->__describing, true),
|
fn (): bool => $describing === [] || in_array(Arr::last($describing), $this->__describing, true),
|
||||||
ChainableClosure::bound(fn () => $testCaseProxies->chain($this), $this->closure)->bindTo($this, self::class), // @phpstan-ignore-line
|
ChainableClosure::bound(fn () => $testCaseProxies->chain($this), $this->closure)->bindTo($this, self::class), // @phpstan-ignore-line
|
||||||
)->bindTo($this, self::class);
|
)->bindTo($this, self::class);
|
||||||
|
|
||||||
|
|||||||
@ -81,4 +81,14 @@ final class Arr
|
|||||||
|
|
||||||
return $results;
|
return $results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of the last element or false for empty array
|
||||||
|
*
|
||||||
|
* @param array<array-key, mixed> $array
|
||||||
|
*/
|
||||||
|
public static function last(array $array): mixed
|
||||||
|
{
|
||||||
|
return end($array);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1491,6 +1491,13 @@
|
|||||||
✓ preset invalid name
|
✓ preset invalid name
|
||||||
✓ preset → myFramework
|
✓ preset → myFramework
|
||||||
|
|
||||||
|
PASS Tests\Unit\Support\Arr
|
||||||
|
✓ last → it should return false for an empty arary
|
||||||
|
✓ last → it should return the last element for an array with a single element
|
||||||
|
✓ last → it should return the last element for an array without changing the internal pointer
|
||||||
|
✓ last → it should return the last element for an associative array without changing the internal pointer
|
||||||
|
✓ last → it should return the last element for an mixed key array without changing the internal pointer
|
||||||
|
|
||||||
PASS Tests\Unit\Support\Backtrace
|
PASS Tests\Unit\Support\Backtrace
|
||||||
✓ it gets file name from called file
|
✓ it gets file name from called file
|
||||||
|
|
||||||
@ -1642,4 +1649,4 @@
|
|||||||
WARN Tests\Visual\Version
|
WARN Tests\Visual\Version
|
||||||
- visual snapshot of help command output
|
- visual snapshot of help command output
|
||||||
|
|
||||||
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 21 todos, 32 skipped, 1133 passed (2702 assertions)
|
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 21 todos, 32 skipped, 1138 passed (2719 assertions)
|
||||||
49
tests/Unit/Support/Arr.php
Normal file
49
tests/Unit/Support/Arr.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Pest\Support\Arr;
|
||||||
|
|
||||||
|
describe('last', function () {
|
||||||
|
it('should return false for an empty arary', function () {
|
||||||
|
expect(Arr::last([]))->toBeFalse();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the last element for an array with a single element', function () {
|
||||||
|
expect(Arr::last([1]))->toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the last element for an array without changing the internal pointer', function () {
|
||||||
|
$array = [1, 2, 3];
|
||||||
|
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(1);
|
||||||
|
|
||||||
|
next($array);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the last element for an associative array without changing the internal pointer', function () {
|
||||||
|
$array = ['first' => 1, 'second' => 2, 'third' => 3];
|
||||||
|
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(1);
|
||||||
|
|
||||||
|
next($array);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the last element for an mixed key array without changing the internal pointer', function () {
|
||||||
|
$array = ['first' => 1, 2, 'third' => 3];
|
||||||
|
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(1);
|
||||||
|
|
||||||
|
next($array);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
expect(Arr::last($array))->toBe(3);
|
||||||
|
expect(current($array))->toBe(2);
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -16,7 +16,7 @@ $run = function () {
|
|||||||
|
|
||||||
test('parallel', function () use ($run) {
|
test('parallel', function () use ($run) {
|
||||||
expect($run('--exclude-group=integration'))
|
expect($run('--exclude-group=integration'))
|
||||||
->toContain('Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 21 todos, 23 skipped, 1123 passed (2678 assertions)')
|
->toContain('Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 21 todos, 23 skipped, 1128 passed (2695 assertions)')
|
||||||
->toContain('Parallel: 3 processes');
|
->toContain('Parallel: 3 processes');
|
||||||
})->skipOnWindows();
|
})->skipOnWindows();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user