Skip to content
This repository has been archived by the owner on Feb 26, 2021. It is now read-only.

Commit

Permalink
Merge pull request #3 from technote-space/release/v0.4.2
Browse files Browse the repository at this point in the history
Release/v0.4.2
  • Loading branch information
technote-space committed Sep 27, 2019
2 parents 27da6f4 + 3dea295 commit 4097631
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 18 deletions.
5 changes: 0 additions & 5 deletions .npmignore

This file was deleted.

7 changes: 5 additions & 2 deletions README.md
Expand Up @@ -19,8 +19,11 @@ Parse [clover](https://www.atlassian.com/software/clover) report files, and retu

## Usage
1. Install
`npm i @technote-space/clover-json`
1.
* npm
`npm i @technote-space/clover-json`
* yarn
`yarn add @technote-space/clover-json`
1. Use
```typescript
import { parseFile, parseContent } from "@technote-space/clover-json";

Expand Down
4 changes: 2 additions & 2 deletions __tests__/assets/clover-empty.xml
Expand Up @@ -2,7 +2,7 @@
<coverage generated="1320170507">
<project timestamp="1320170507">
<package name="hello.world">
<file name="/app/Models/Scenario.php">
<file name="app/Models/Scenario.php">
<class name="App\Models\Scenario" namespace="App\Models">
<metrics complexity="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</class>
Expand All @@ -11,4 +11,4 @@
<metrics files="1" loc="0" ncloc="0" classes="1" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</package>
</project>
</coverage>
</coverage>
19 changes: 19 additions & 0 deletions __tests__/assets/clover-without-class.xml
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1569520458999" clover="3.2.0">
<project timestamp="1569520458999" name="All files">
<metrics statements="10" coveredstatements="10" conditionals="11" coveredconditionals="11" methods="5" coveredmethods="5" elements="26" coveredelements="26" complexity="0" loc="10" ncloc="10" packages="1" files="1" classes="1"/>
<file name="index.ts" path="/var/www/html/index.ts">
<metrics statements="10" coveredstatements="10" conditionals="11" coveredconditionals="11" methods="5" coveredmethods="5"/>
<line num="3" count="11" type="stmt"/>
<line num="6" count="1" type="cond" truecount="1" falsecount="0"/>
<line num="7" count="28" type="cond" truecount="2" falsecount="0"/>
<line num="8" count="12" type="cond" truecount="2" falsecount="0"/>
<line num="9" count="13" type="stmt"/>
<line num="11" count="5" type="stmt"/>
<line num="13" count="16" type="cond" truecount="2" falsecount="0"/>
<line num="14" count="6" type="stmt"/>
<line num="16" count="10" type="cond" truecount="2" falsecount="0"/>
<line num="24" count="11" type="cond" truecount="2" falsecount="0"/>
</file>
</project>
</coverage>
8 changes: 4 additions & 4 deletions __tests__/assets/clover-without-package.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1548524277">
<project timestamp="1548524277">
<file name="R:\src\mattermost\src/config.php">
<file name="config.php">
<line num="4" type="stmt" count="17"/>
<metrics loc="7" ncloc="7" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="1" coveredstatements="1" elements="1" coveredelements="1"/>
</file>
<file name="R:\src\mattermost\src/jira.php">
<file name="jira.php">
<class name="Jira" namespace="global">
<metrics complexity="4" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="11" coveredelements="11"/>
</class>
Expand All @@ -22,7 +22,7 @@
<line num="27" type="stmt" count="3"/>
<metrics loc="31" ncloc="27" classes="1" methods="2" coveredmethods="2" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" elements="11" coveredelements="11"/>
</file>
<file name="R:\src\mattermost\src/mattermost.php">
<file name="mattermost.php">
<class name="Mattermost" namespace="global">
<metrics complexity="12" methods="5" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="24" elements="30" coveredelements="28"/>
</class>
Expand Down Expand Up @@ -58,7 +58,7 @@
<line num="65" type="stmt" count="0"/>
<metrics loc="68" ncloc="64" classes="1" methods="5" coveredmethods="4" conditionals="0" coveredconditionals="0" statements="25" coveredstatements="24" elements="30" coveredelements="28"/>
</file>
<file name="R:\src\mattermost\src/translate.php">
<file name="translate.php">
<class name="Translate" namespace="global">
<metrics complexity="10" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="30" coveredstatements="30" elements="33" coveredelements="33"/>
</class>
Expand Down
4 changes: 2 additions & 2 deletions __tests__/assets/clover2.xml
Expand Up @@ -2,7 +2,7 @@
<coverage generated="1320170507">
<project timestamp="1320170507">
<package name="hello.world">
<file name="/src/HelloWorld.php">
<file name="src/HelloWorld.php">
<class name="HelloWorld" namespace="global">
<metrics methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="1" elements="6" coveredelements="2"/>
</class>
Expand All @@ -17,4 +17,4 @@
<metrics files="1" loc="26" ncloc="19" classes="1" methods="2" coveredmethods="1" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="1" elements="6" coveredelements="2"/>
</package>
</project>
</coverage>
</coverage>
17 changes: 16 additions & 1 deletion __tests__/index.test.ts
Expand Up @@ -7,7 +7,6 @@ describe('Check if it can parse a clover file', () => {

it('should parse a normal file', async() => {
const result = await parseFile(getFilePath('clover1.xml'));

expect(result.length).toBe(3);
expect(result[0].file).toBe('coveralls/lib/client.js');
expect(result[1].file).toBe('coveralls/lib/configuration.js');
Expand All @@ -24,6 +23,7 @@ describe('Check if it can parse a clover file', () => {

it('should parse a second file', async() => {
const result = await parseFile(getFilePath('clover2.xml'));
expect(result[0].file).toBe('hello.world/src/HelloWorld.php');
expect(result.length).toBe(1);
expect(result[0].functions.found).toBe(2);
expect(result[0].functions.hit).toBe(1);
Expand All @@ -34,6 +34,7 @@ describe('Check if it can parse a clover file', () => {
it('should parse a file with an empty class', async() => {
const result = await parseFile(getFilePath('clover-empty.xml'));
expect(result.length).toBe(1);
expect(result[0].file).toBe('hello.world/app/Models/Scenario.php');
expect(result[0].functions.found).toBe(0);
expect(result[0].functions.hit).toBe(0);
expect(result[0].lines.found).toBe(0);
Expand All @@ -43,12 +44,26 @@ describe('Check if it can parse a clover file', () => {
it('should parse a file without a package property', async() => {
const result = await parseFile(getFilePath('clover-without-package.xml'));
expect(result.length).toBe(4);
expect(result[0].file).toBe('config.php');
expect(result[1].file).toBe('jira.php');
expect(result[2].file).toBe('mattermost.php');
expect(result[3].file).toBe('translate.php');
expect(result[0].functions.found).toBe(0);
expect(result[0].functions.hit).toBe(0);
expect(result[0].lines.found).toBe(1);
expect(result[0].lines.hit).toBe(1);
});

it('should parse a file without a class property', async() => {
const result = await parseFile(getFilePath('clover-without-class.xml'));
expect(result.length).toBe(1);
expect(result[0].file).toBe('index.ts');
expect(result[0].functions.found).toBe(0);
expect(result[0].functions.hit).toBe(0);
expect(result[0].lines.found).toBe(10);
expect(result[0].lines.hit).toBe(10);
});

it('should throw error if file not exists', async() => {
await expect(parseFile(getFilePath('test'))).rejects.toThrow('no such file or directory');
});
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "@technote-space/clover-json",
"version": "0.4.1",
"version": "0.4.2",
"description": "Parse clover XML coverage reports to JSON, using the same format as lcov-parse",
"author": "TobiLG",
"contributors": [
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Expand Up @@ -3,7 +3,7 @@ import { promisify } from 'util';
import { parseString } from 'xml2js';

type coverageData = { file: { $; line }[] }
const getCoverageData = (projectObj): coverageData[] => Object.prototype.hasOwnProperty.call(projectObj, 'package') ? projectObj.package : [Object.assign({}, projectObj, {name: undefined})];
const getCoverageData = (projectObj): coverageData[] => Object.prototype.hasOwnProperty.call(projectObj, 'package') ? projectObj.package : [Object.assign({}, projectObj, {$: Object.assign({}, projectObj.$, {name: undefined})})];
const getPackageName = (data): string => Object.prototype.hasOwnProperty.call(data, '$') && Object.prototype.hasOwnProperty.call(data.$, 'name') && data.$.name ? data.$.name + '/' : '';

type classDetail = { name?: string; fileName: string; lines?: { $: { type; name; num; count } }[] }
Expand Down

0 comments on commit 4097631

Please sign in to comment.