Skip to content

Commit f4d30f7

Browse files
committed
Drop DOM dependency
1 parent c1a9f74 commit f4d30f7

File tree

13 files changed

+296
-417
lines changed

13 files changed

+296
-417
lines changed

composer.json

Lines changed: 69 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,73 @@
11
{
2-
"name": "phpunit/php-code-coverage",
3-
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
4-
"type": "library",
5-
"keywords": [
6-
"coverage",
7-
"testing",
8-
"xunit"
9-
],
10-
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
11-
"license": "BSD-3-Clause",
12-
"authors": [
13-
{
14-
"name": "Sebastian Bergmann",
15-
"email": "[email protected]",
16-
"role": "lead"
17-
}
18-
],
19-
"support": {
20-
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
21-
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy"
22-
},
23-
"config": {
24-
"platform": {
25-
"php": "8.3.0"
26-
},
27-
"optimize-autoloader": true,
28-
"sort-packages": true
29-
},
30-
"prefer-stable": true,
31-
"require": {
32-
"php": ">=8.3",
33-
"ext-dom": "*",
34-
"ext-libxml": "*",
35-
"ext-xmlwriter": "*",
36-
"nikic/php-parser": "^5.6.1",
37-
"phpunit/php-file-iterator": "^6.0",
38-
"phpunit/php-text-template": "^5.0",
39-
"sebastian/complexity": "^5.0",
40-
"sebastian/environment": "^8.0.3",
41-
"sebastian/lines-of-code": "^4.0",
42-
"sebastian/version": "^6.0",
43-
"theseer/tokenizer": "^1.2.3"
44-
},
45-
"require-dev": {
46-
"phpunit/phpunit": "^12.3.7"
47-
},
48-
"suggest": {
49-
"ext-pcov": "PHP extension that provides line coverage",
50-
"ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
51-
},
52-
"autoload": {
53-
"classmap": [
54-
"src/"
55-
]
56-
},
57-
"autoload-dev": {
58-
"classmap": [
59-
"tests/"
60-
]
2+
"name": "phpunit/php-code-coverage",
3+
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
4+
"type": "library",
5+
"keywords": [
6+
"coverage",
7+
"testing",
8+
"xunit"
9+
],
10+
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
11+
"license": "BSD-3-Clause",
12+
"authors": [
13+
{
14+
"name": "Sebastian Bergmann",
15+
"email": "[email protected]",
16+
"role": "lead"
17+
}
18+
],
19+
"support": {
20+
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
21+
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy"
22+
},
23+
"config": {
24+
"platform": {
25+
"php": "8.3.0"
6126
},
62-
"extra": {
63-
"branch-alias": {
64-
"dev-main": "12.4.x-dev"
65-
}
27+
"optimize-autoloader": true,
28+
"sort-packages": true
29+
},
30+
"prefer-stable": true,
31+
"require": {
32+
"php": ">=8.3",
33+
"ext-dom": "*",
34+
"ext-libxml": "*",
35+
"ext-xmlwriter": "*",
36+
"nikic/php-parser": "^5.6.1",
37+
"phpunit/php-file-iterator": "^6.0",
38+
"phpunit/php-text-template": "^5.0",
39+
"sebastian/complexity": "^5.0",
40+
"sebastian/environment": "^8.0.3",
41+
"sebastian/lines-of-code": "^4.0",
42+
"sebastian/version": "^6.0",
43+
"theseer/tokenizer": "dev-writer as 1.3-dev"
44+
},
45+
"require-dev": {
46+
"phpunit/phpunit": "^12.3.7"
47+
},
48+
"suggest": {
49+
"ext-pcov": "PHP extension that provides line coverage",
50+
"ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
51+
},
52+
"autoload": {
53+
"classmap": [
54+
"src/"
55+
]
56+
},
57+
"autoload-dev": {
58+
"classmap": [
59+
"tests/"
60+
]
61+
},
62+
"extra": {
63+
"branch-alias": {
64+
"dev-main": "12.4.x-dev"
65+
}
66+
},
67+
"repositories": [
68+
{
69+
"type": "vcs",
70+
"url": "https://github.com/staabm/tokenizer"
6671
}
72+
]
6773
}

src/Report/Xml/BuildInformation.php

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
namespace SebastianBergmann\CodeCoverage\Report\Xml;
1111

12+
use XMLWriter;
1213
use function assert;
1314
use function phpversion;
1415
use DateTimeImmutable;
@@ -20,52 +21,37 @@
2021
*/
2122
final readonly class BuildInformation
2223
{
23-
private DOMElement $contextNode;
24-
2524
public function __construct(
26-
DOMElement $contextNode,
25+
XMLWriter $xmlWriter,
2726
Runtime $runtime,
2827
DateTimeImmutable $buildDate,
2928
string $phpUnitVersion,
3029
string $coverageVersion
3130
) {
32-
$this->contextNode = $contextNode;
33-
34-
$runtimeNode = $this->nodeByName('runtime');
35-
36-
$runtimeNode->setAttribute('name', $runtime->getName());
37-
$runtimeNode->setAttribute('version', $runtime->getVersion());
38-
$runtimeNode->setAttribute('url', $runtime->getVendorUrl());
39-
40-
$driverNode = $this->nodeByName('driver');
41-
31+
$xmlWriter->startElement('build');
32+
$xmlWriter->writeAttribute('time', $buildDate->format('D M j G:i:s T Y'));
33+
$xmlWriter->writeAttribute('phpunit', $phpUnitVersion);
34+
$xmlWriter->writeAttribute('coverage', $coverageVersion);
35+
36+
$xmlWriter->startElement('runtime');
37+
$xmlWriter->writeAttribute('name', $runtime->getName());
38+
$xmlWriter->writeAttribute('version', $runtime->getVersion());
39+
$xmlWriter->writeAttribute('url', $runtime->getVendorUrl());
40+
$xmlWriter->endElement();
41+
42+
$xmlWriter->startElement('driver');
4243
if ($runtime->hasXdebug()) {
43-
$driverNode->setAttribute('name', 'xdebug');
44-
$driverNode->setAttribute('version', phpversion('xdebug'));
44+
$xmlWriter->writeAttribute('name', 'xdebug');
45+
$xmlWriter->writeAttribute('version', phpversion('xdebug'));
4546
}
4647

4748
if ($runtime->hasPCOV()) {
48-
$driverNode->setAttribute('name', 'pcov');
49-
$driverNode->setAttribute('version', phpversion('pcov'));
49+
$xmlWriter->writeAttribute('name', 'pcov');
50+
$xmlWriter->writeAttribute('version', phpversion('pcov'));
5051
}
52+
$xmlWriter->endElement();
5153

52-
$this->contextNode->setAttribute('time', $buildDate->format('D M j G:i:s T Y'));
53-
54-
$this->contextNode->setAttribute('phpunit', $phpUnitVersion);
55-
$this->contextNode->setAttribute('coverage', $coverageVersion);
54+
$xmlWriter->endElement();
5655
}
5756

58-
private function nodeByName(string $name): DOMElement
59-
{
60-
$node = $this->contextNode->appendChild(
61-
$this->contextNode->ownerDocument->createElementNS(
62-
Facade::XML_NAMESPACE,
63-
$name,
64-
),
65-
);
66-
67-
assert($node instanceof DOMElement);
68-
69-
return $node;
70-
}
7157
}

src/Report/Xml/Coverage.php

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,22 @@
1717
*/
1818
final class Coverage
1919
{
20-
private readonly DOMElement $contextNode;
20+
private readonly XMLWriter $xmlWriter;
2121
private readonly string $line;
2222

23-
public function __construct(DOMElement $context, string $line)
23+
public function __construct(
24+
XMLWriter $xmlWriter,
25+
string $line
26+
)
2427
{
25-
$this->contextNode = $context;
28+
$this->xmlWriter = $xmlWriter;
2629
$this->line = $line;
2730
}
2831

2932
public function finalize(array $tests): void
3033
{
31-
$writer = new XMLWriter;
32-
$writer->openMemory();
33-
$writer->startElementNs(null, $this->contextNode->nodeName, Facade::XML_NAMESPACE);
34+
$writer = $this->xmlWriter;
35+
$writer->startElement('line');
3436
$writer->writeAttribute('nr', $this->line);
3537

3638
foreach ($tests as $test) {
@@ -39,13 +41,5 @@ public function finalize(array $tests): void
3941
$writer->endElement();
4042
}
4143
$writer->endElement();
42-
43-
$fragment = $this->contextNode->ownerDocument->createDocumentFragment();
44-
$fragment->appendXML($writer->outputMemory());
45-
46-
$this->contextNode->parentNode->replaceChild(
47-
$fragment,
48-
$this->contextNode,
49-
);
5044
}
5145
}

0 commit comments

Comments
 (0)