Skip to content

Commit c81e395

Browse files
authored
Fix memory consumption in DataProviderDataRule
1 parent 61860a6 commit c81e395

File tree

2 files changed

+48
-9
lines changed

2 files changed

+48
-9
lines changed

src/Rules/PHPUnit/DataProviderDataRule.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,23 +84,28 @@ public function processNode(Node $node, Scope $scope): array
8484
return [];
8585
}
8686

87-
$maxNumberOfParameters = $testsWithProvider[0]->getNumberOfParameters();
88-
if (count($testsWithProvider) > 1) {
89-
foreach ($testsWithProvider as $testMethod) {
90-
if ($testMethod->isVariadic()) {
91-
$maxNumberOfParameters = PHP_INT_MAX;
92-
break;
93-
}
87+
$maxNumberOfParameters = null;
88+
foreach ($testsWithProvider as $testMethod) {
89+
$num = $testMethod->getNumberOfParameters();
90+
if ($testMethod->isVariadic()) {
91+
$num = PHP_INT_MAX;
92+
}
93+
if ($maxNumberOfParameters === null) {
94+
$maxNumberOfParameters = $num;
95+
continue;
96+
}
9497

95-
$maxNumberOfParameters = max($maxNumberOfParameters, $testMethod->getNumberOfParameters());
98+
$maxNumberOfParameters = max($maxNumberOfParameters, $num);
99+
if ($num === PHP_INT_MAX) {
100+
break;
96101
}
97102
}
98103

99104
foreach ($testsWithProvider as $testMethod) {
100105
$numberOfParameters = $testMethod->getNumberOfParameters();
101106

102107
foreach ($arraysTypes as [$startLine, $arraysType]) {
103-
$args = $this->arrayItemsToArgs($arraysType, $maxNumberOfParameters);
108+
$args = $this->arrayItemsToArgs($arraysType, $numberOfParameters);
104109
if ($args === null) {
105110
continue;
106111
}

tests/Rules/PHPUnit/data/data-provider-trimming-args.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,37 @@ public function testProvide2(int $i): void
3030
}
3131

3232
}
33+
34+
class BarTest extends TestCase
35+
{
36+
37+
/**
38+
* @return array<array<string>>
39+
*/
40+
public function getData(): array
41+
{
42+
return [];
43+
}
44+
45+
public function dataProvide(): array
46+
{
47+
return $this->getData();
48+
}
49+
50+
/**
51+
* @dataProvider dataProvide
52+
*/
53+
public function testProvide(string ...$arg): void
54+
{
55+
56+
}
57+
58+
/**
59+
* @dataProvider dataProvide
60+
*/
61+
public function testProvide2(string $arg): void
62+
{
63+
64+
}
65+
66+
}

0 commit comments

Comments
 (0)