diff --git a/src/Concerns/Testable.php b/src/Concerns/Testable.php index 9a618560..27db6631 100644 --- a/src/Concerns/Testable.php +++ b/src/Concerns/Testable.php @@ -262,8 +262,9 @@ trait Testable { $method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name()); - if ($method->repetitions > 1 && $method->datasets !== []) { - array_shift($arguments); + if ($method->repetitions > 1) { + $firstArgument = array_shift($arguments); + $arguments[] = $firstArgument; } $underlyingTest = Reflection::getFunctionVariable($this->__test, 'closure'); diff --git a/tests/Features/Repeat.php b/tests/Features/Repeat.php index 614c666b..811c1185 100644 --- a/tests/Features/Repeat.php +++ b/tests/Features/Repeat.php @@ -17,6 +17,29 @@ test('multiple times with multiple dataset', function (int $numberA, int $number ->and([4, 5, 6])->toContain($numberB); })->repeat(times: 7)->with(['a' => 1, 'b' => 2, 'c' => 3], [4, 5, 6]); -test('multiple times with iterator as argument', function (int $iteration) { - expect($iteration)->toBeGreaterThan(0); -})->repeat(times: 8); +test('multiple times with iterator', function (int $iteration) { + expect($iteration) + ->toBeNumeric() + ->toBeGreaterThan(0); +})->repeat(times: 2); + +test('multiple times with repeat iterator with single dataset', function (string $letter, int $iteration) { + expect($letter) + ->toBeString() + ->toBeIn(['a', 'b', 'c']) + ->and($iteration) + ->toBeNumeric() + ->toBeGreaterThan(0); +})->repeat(times: 2)->with(['a', 'b', 'c']); + +test('multiple times with repeat iterator with multiple dataset', function (string $letterA, string $letterB, int $iteration) { + expect($letterA) + ->toBeString() + ->toBeIn(['a', 'b', 'c']) + ->and($letterB) + ->toBeString() + ->toBeIn(['d', 'e', 'f']) + ->and($iteration) + ->toBeNumeric() + ->toBeGreaterThan(0); +})->repeat(times: 2)->with(['a', 'b', 'c'], ['d', 'e', 'f']);