diff --git a/src/Datasets.php b/src/Datasets.php index e2009c86..26dc9cbc 100644 --- a/src/Datasets.php +++ b/src/Datasets.php @@ -74,12 +74,30 @@ final class Datasets $data = iterator_to_array($data); } - $namedData = []; + $dataSetDescriptions = []; + $dataSetValues = []; + foreach ($data as $values) { $values = is_array($values) ? $values : [$values]; - $name = $description . self::getDataSetDescription($values); - $namedData[$name] = $values; + $dataSetDescriptions[] = $description . self::getDataSetDescription($values); + $dataSetValues[] = $values; + } + + foreach (array_count_values($dataSetDescriptions) as $descriptionToCheck => $count) { + if ($count > 1) { + $index = 1; + foreach ($dataSetDescriptions as $i => $dataSetDescription) { + if ($dataSetDescription === $descriptionToCheck) { + $dataSetDescriptions[$i] .= sprintf(' #%d', $index++); + } + } + } + } + + $namedData = []; + foreach ($dataSetDescriptions as $i => $dataSetDescription) { + $namedData[$dataSetDescription] = $dataSetValues[$i]; } return $namedData; diff --git a/tests/.snapshots/success.txt b/tests/.snapshots/success.txt index 3f9845ae..eae1f6cc 100644 --- a/tests/.snapshots/success.txt +++ b/tests/.snapshots/success.txt @@ -41,6 +41,13 @@ ✓ eager wrapped registered datasets with (2) ✓ eager registered wrapped datasets did the job right ✓ lazy named datasets with (Bar Object (...)) + ✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #1 + ✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #2 + ✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), false) + ✓ it creates unique test case names with ('Name 2', Pest\Plugin Object (), false) + ✓ it creates unique test case names with ('Name 2', Pest\Plugin Object (), true) + ✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #3 + ✓ it creates unique test case names - count WARN Tests\Features\Depends ✓ first @@ -156,3 +163,4 @@ Tests: 1 warnings, 7 skipped, 85 passed Time: 2.65s + diff --git a/tests/Features/Datasets.php b/tests/Features/Datasets.php index 688616c0..35764433 100644 --- a/tests/Features/Datasets.php +++ b/tests/Features/Datasets.php @@ -3,6 +3,7 @@ use Pest\Datasets; use Pest\Exceptions\DatasetAlreadyExist; use Pest\Exceptions\DatasetDoesNotExist; +use Pest\Plugin; it('throws exception if dataset does not exist', function () { $this->expectException(DatasetDoesNotExist::class); @@ -106,3 +107,21 @@ $namedDatasets = [ test('lazy named datasets', function ($text) use ($state, $datasets) { assertTrue(true); })->with($namedDatasets); + +$counter = 0; + +it('creates unique test case names', function (string $name, Plugin $plugin, bool $bool) use (&$counter) { + assertTrue(true); + $counter++; +})->with([ + ['Name 1', new Plugin(), true], + ['Name 1', new Plugin(), true], + ['Name 1', new Plugin(), false], + ['Name 2', new Plugin(), false], + ['Name 2', new Plugin(), true], + ['Name 1', new Plugin(), true], +]); + +it('creates unique test case names - count', function () use (&$counter) { + assertEquals(6, $counter); +});