Skip to content

Commit 27a808f

Browse files
committed
fix: remover exclusão padrão de src/Exception no phpunit.xml.dist gerado
- ProjectDetector.php: coverageExclude default alterado de ['src/Exception'] para [] Projetos que queiram excluir devem declarar explicitamente via coverage_exclude no devkit.php A exclusão automática causava PHPUnit Warnings em testes que usam #[CoversClass] em Exception - PhpUnitConfigGenerator.php: bloco <exclude> agora é condicional via renderExcludeBlock() Omite totalmente o bloco quando coverageExclude está vazio → output mais limpo e correto - PhpUnitConfigGeneratorTest.php: testes atualizados para validar novo comportamento: generateOmitsExcludeBlockWhenCoverageExcludeIsEmpty (novo) generateContainsCoverageExcludesWhenConfigured (renomeado com contexto explícito) Quality: cs-fixer ✓ phpstan ✓ psalm ✓ phpunit ✓
1 parent 285936f commit 27a808f

3 files changed

Lines changed: 42 additions & 7 deletions

File tree

src/Configuration/PhpUnitConfigGenerator.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function generate(ProjectContext $context): string
3535
{
3636
$suites = $this->renderSuites($context);
3737
$sourceIncludes = $this->renderDirList($context->relativeSourceDirs(), 12);
38-
$coverageExcludes = $this->renderDirList($context->coverageExclude, 12);
38+
$coverageExcludes = $this->renderExcludeBlock($context->coverageExclude);
3939

4040
return <<<XML
4141
<?xml version="1.0" encoding="UTF-8"?>
@@ -65,9 +65,7 @@ public function generate(ProjectContext $context): string
6565
<source restrictDeprecations="true" restrictNotices="true" restrictWarnings="true">
6666
<include>
6767
{$sourceIncludes} </include>
68-
<exclude>
69-
{$coverageExcludes} </exclude>
70-
</source>
68+
{$coverageExcludes} </source>
7169
7270
<coverage includeUncoveredFiles="true"
7371
pathCoverage="false"
@@ -101,6 +99,18 @@ private function renderSuites(ProjectContext $context): string
10199
return $xml;
102100
}
103101

102+
/** @param list<string> $dirs */
103+
private function renderExcludeBlock(array $dirs): string
104+
{
105+
if ([] === $dirs) {
106+
return '';
107+
}
108+
109+
$listing = $this->renderDirList($dirs, 12);
110+
111+
return " <exclude>\n{$listing} </exclude>\n";
112+
}
113+
104114
/** @param list<string> $dirs */
105115
private function renderDirList(array $dirs, int $indent): string
106116
{

src/Core/ProjectDetector.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function detect(string $workingDirectory): ProjectContext
7575
testDirs: $testDirs,
7676
excludeDirs: $config->get('exclude_dirs', ['src/Contract']),
7777
testSuites: $config->get('test_suites', $this->detectTestSuites($workingDirectory, $testDirs)),
78-
coverageExclude: $config->get('coverage_exclude', ['src/Exception']),
78+
coverageExclude: $config->get('coverage_exclude', []),
7979
csFixerRules: array_merge(self::DEFAULT_CS_RULES, $config->get('cs_fixer_rules', [])),
8080
rectorSets: $config->get('rector_sets', self::DEFAULT_RECTOR_SETS),
8181
toolVersions: $config->toolVersions(),

tests/Unit/Configuration/PhpUnitConfigGeneratorTest.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ protected function setUp(): void
3232
testDirs: ['/project/tests'],
3333
excludeDirs: [],
3434
testSuites: ['Unit' => 'tests/Unit', 'Integration' => 'tests/Integration'],
35-
coverageExclude: ['src/Exception'],
35+
coverageExclude: [],
3636
csFixerRules: [],
3737
rectorSets: [],
3838
toolVersions: [],
@@ -74,9 +74,34 @@ public function generateContainsSourceDirectory(): void
7474
}
7575

7676
#[Test]
77-
public function generateContainsCoverageExcludes(): void
77+
public function generateOmitsExcludeBlockWhenCoverageExcludeIsEmpty(): void
7878
{
7979
$output = $this->generator->generate($this->context);
80+
$this->assertStringNotContainsString('<exclude>', $output);
81+
}
82+
83+
#[Test]
84+
public function generateContainsCoverageExcludesWhenConfigured(): void
85+
{
86+
$context = new ProjectContext(
87+
projectRoot: '/project',
88+
projectName: 'test/project',
89+
namespace: 'Test\\Project',
90+
phpVersion: '8.4',
91+
phpstanLevel: 9,
92+
psalmLevel: 3,
93+
sourceDirs: ['/project/src'],
94+
testDirs: ['/project/tests'],
95+
excludeDirs: [],
96+
testSuites: [],
97+
coverageExclude: ['src/Exception'],
98+
csFixerRules: [],
99+
rectorSets: [],
100+
toolVersions: [],
101+
);
102+
103+
$output = $this->generator->generate($context);
104+
$this->assertStringContainsString('<exclude>', $output);
80105
$this->assertStringContainsString('../src/Exception', $output);
81106
}
82107

0 commit comments

Comments
 (0)