From a496e855c82d1c21fa58b367a2abce07ae4941c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20H=C5=AFla?= Date: Tue, 24 Aug 2021 15:56:19 +0200 Subject: [PATCH] TestCase:prepareTestData(): check that every data provider item is array [Closes #431] --- src/Framework/TestCase.php | 5 +++++ tests/Framework/TestCase.invalidProvider.phpt | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Framework/TestCase.php b/src/Framework/TestCase.php index 273b44fa..1ffaddd7 100644 --- a/src/Framework/TestCase.php +++ b/src/Framework/TestCase.php @@ -245,6 +245,11 @@ private function prepareTestData(\ReflectionMethod $method, array $dataprovider) } foreach ($res as $k => $set) { + if (!is_array($set)) { + $type = is_object($set) ? get_class($set) : gettype($set); + throw new TestCaseException("Data provider $provider() item '$k' must be an array, $type given."); + } + $data["$i-$k"] = is_string(key($set)) ? array_merge($defaultParams, $set) : $set; diff --git a/tests/Framework/TestCase.invalidProvider.phpt b/tests/Framework/TestCase.invalidProvider.phpt index ee92a7a6..067fd3ae 100644 --- a/tests/Framework/TestCase.invalidProvider.phpt +++ b/tests/Framework/TestCase.invalidProvider.phpt @@ -23,6 +23,18 @@ class InvalidProviderTest extends Tester\TestCase public function testMissingDataProvider($a) { } + + + public function invalidDataProviderItem() + { + return ['non-array-item']; + } + + + /** @dataProvider invalidDataProviderItem */ + public function testInvalidDataProviderItem() + { + } } @@ -35,3 +47,8 @@ Assert::exception(function () { $test = new InvalidProviderTest; $test->runTest('testMissingDataProvider'); }, Tester\TestCaseException::class, 'Method testMissingDataProvider() has arguments, but @dataProvider is missing.'); + +Assert::exception(function () { + $test = new InvalidProviderTest; + $test->runTest('testInvalidDataProviderItem'); +}, Tester\TestCaseException::class, "Data provider invalidDataProviderItem() item '0' must be an array, string given.");