Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/CloverParser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import { CloverParser } from './CloverParser';
describe('CloverParser test', () => {
it('parseClover', async () => {
const cf = await CloverParser.parseClover('src/PHPUnit/__tests__/fixtures/test1.clover.xml');
expect(cf.length).toEqual(2);
const dc = cf[0].generateDetailedCoverage();
expect(cf.length).toEqual(3);
const dc = cf[1].generateDetailedCoverage();
expect(dc.length).toEqual(6);
expect(dc[0].executed).toEqual(2);
if (dc[0].location instanceof Position) {
Expand Down
60 changes: 60 additions & 0 deletions src/PHPUnit/Element.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { Element } from './Element';

describe('Element Test', () => {
it('querySelectorAll should traverse arrays', () => {
const data = {
coverage: {
project: {
package: [
{ file: { '@_name': 'file1.php' } },
{ file: { '@_name': 'file2.php' } }
]
}
}
};

const element = new Element(data);
const files = element.querySelectorAll('coverage project package file');

expect(files.length).toEqual(2);
expect(files[0].getAttribute('name')).toEqual('file1.php');
expect(files[1].getAttribute('name')).toEqual('file2.php');
});

it('querySelectorAll should handle objects mixed with arrays', () => {
const data = {
coverage: {
project: [
{ file: { '@_name': 'file.php' } },
{
package: [
{ file: { '@_name': 'file1.php' } },
]
},
{
package: [
{ file: { '@_name': 'file2.php' } }
]
}
]
}
};

const element = new Element(data);

const files1 = element.querySelectorAll('coverage project package file');
expect(files1.length).toEqual(2);
expect(files1[0].getAttribute('name')).toEqual('file1.php');
expect(files1[1].getAttribute('name')).toEqual('file2.php');

const files2 = element.querySelectorAll('coverage project file');
expect(files2.length).toEqual(1);
expect(files2[0].getAttribute('name')).toEqual('file.php');
});

it('getAttribute should retrieve values', () => {
const data = { '@_version': '1.0' };
const element = new Element(data);
expect(element.getAttribute('version')).toEqual('1.0');
});
});
6 changes: 5 additions & 1 deletion src/PHPUnit/Element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@ export class Element {
let current = this.node;
while (segments.length > 0) {
const segment = segments.shift()!;
current = current[segment] ?? undefined;
if (Array.isArray(current)) {
current = current.flatMap((node) => node[segment] ?? undefined).filter((node) => node !== undefined);
} else {
current = current[segment] ?? undefined;
}

if (current === undefined) {
return [];
Expand Down
3 changes: 3 additions & 0 deletions src/PHPUnit/__tests__/fixtures/test1.clover.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
<metrics loc="19" ncloc="19" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="2" coveredstatements="2" elements="4" coveredelements="4"/>
</file>
</package>
<file name="C:\local_disk\zobo\Projects\vscode-php-debug\vscode-phpunit\src\PHPUnit\__tests__\fixtures\phpunit-stub\src\Common.php">
<metrics loc="16" ncloc="3" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</file>
<metrics files="2" loc="43" ncloc="43" classes="2" methods="5" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="4" elements="10" coveredelements="8"/>
</project>
</coverage>