Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass reporter options to istanbul reporters #815

Closed
wants to merge 4 commits into from
Closed
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
1 change: 1 addition & 0 deletions intern.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"_tests/tests/unit/lib/reporters/Runner.js",
"_tests/tests/unit/lib/reporters/Simple.js",
"_tests/tests/unit/lib/reporters/TeamCity.js",
"_tests/tests/unit/lib/reporters/TextCoverage.js",
"_tests/tests/unit/tasks/intern.js"
],
"plugins": [
Expand Down
30 changes: 28 additions & 2 deletions src/lib/reporters/Cobertura.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
import Coverage, { ReportType } from './Coverage';
import Coverage, { ReportType, CoverageProperties } from './Coverage';
import Node from '../executors/Node';

export default class Cobertura extends Coverage
implements CoberturaCoverageProperties {

export default class Cobertura extends Coverage {
readonly reportType: ReportType = 'cobertura';
projectRoot: string;

constructor(executor: Node, options: CoberturaCoverageOptions = {}) {
super(executor, options);

if (options.projectRoot) {
this.projectRoot = options.projectRoot;
}
}

getReporterOptions(): { [key: string]: any; } {
const options = super.getReporterOptions();

options.projectRoot = this.projectRoot;

return options;
}
}

export interface CoberturaCoverageProperties extends CoverageProperties {
projectRoot?: string;
}

export type CoberturaCoverageOptions = Partial<CoberturaCoverageProperties>;
19 changes: 17 additions & 2 deletions src/lib/reporters/Coverage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ const eventHandler = createEventHandler<Events>();

export default abstract class Coverage extends Reporter
implements CoverageProperties {
readonly reportType: ReportType = 'text';

abstract readonly reportType: ReportType;

executor: Node;
filename: string;
directory: string;
watermarks: Watermarks;

constructor(executor: Node, options: CoverageOptions = {}) {
Expand All @@ -26,11 +28,20 @@ export default abstract class Coverage extends Reporter
if (options.filename) {
this.filename = options.filename;
}
if (options.directory) {
this.directory = options.directory;
}
if (options.watermarks) {
this.watermarks = options.watermarks;
}
}

getReporterOptions(): { [key: string]: any; } {
return {
file: this.filename
};
}

createCoverageReport(
type: ReportType,
data: CoverageMapData | CoverageMap
Expand All @@ -46,11 +57,12 @@ export default abstract class Coverage extends Reporter
const transformed = this.executor.sourceMapStore.transformCoverage(map);

const context = createContext({
dir: this.directory,
sourceFinder: transformed.sourceFinder,
watermarks: this.watermarks
});
const tree = summarizers.pkg(transformed.map);
const report = create(type, { file: this.filename });
const report = create(type, this.getReporterOptions());
tree.visit(report, context);
}

Expand All @@ -67,6 +79,9 @@ export interface CoverageProperties extends ReporterProperties {
/** A filename to write coverage data to */
filename?: string;

/** A direcotry to write coverage data to */
directory?: string;

/** Watermarks used to check coverage */
watermarks?: Watermarks;
}
Expand Down
30 changes: 28 additions & 2 deletions src/lib/reporters/HtmlCoverage.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
import Coverage, { ReportType } from './Coverage';
import Coverage, { ReportType, CoverageProperties } from './Coverage';
import Node from '../executors/Node';

export default class HtmlCoverage extends Coverage
implements HtmlCoverageProperties {

export default class HtmlCoverage extends Coverage {
readonly reportType: ReportType = 'html';
verbose: boolean;

constructor(executor: Node, options: HtmlCoverageOptions = {}) {
super(executor, options);

if ('verbose' in options) {
this.verbose = options.verbose!;
}
}

getReporterOptions(): { [key: string]: any; } {
const options = super.getReporterOptions();

options.verbose = this.verbose;

return options;
}
}

export interface HtmlCoverageProperties extends CoverageProperties {
verbose: boolean;
}

export type HtmlCoverageOptions = Partial<HtmlCoverageProperties>;
6 changes: 3 additions & 3 deletions src/lib/reporters/Pretty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Suite from '../Suite';
import Test from '../Test';
import RemoteSuite from '../RemoteSuite';
import { createEventHandler } from './Reporter';
import Coverage, { CoverageProperties } from './Coverage';
import TextCoverage, { TextCoverageProperties } from './TextCoverage';
import { CoverageMessage, DeprecationMessage } from '../executors/Executor';
import { Events, TunnelMessage } from '../executors/Node';

Expand All @@ -19,7 +19,7 @@ const eventHandler = createEventHandler<Events>();
/**
* Handles presentation of runner results to the user
*/
export default class Pretty extends Coverage implements PrettyProperties {
export default class Pretty extends TextCoverage implements PrettyProperties {
colorReplacement: { [key: string]: string };
dimensions: any;
titleWidth: number;
Expand Down Expand Up @@ -437,7 +437,7 @@ export default class Pretty extends Coverage implements PrettyProperties {
}
}

export interface PrettyProperties extends CoverageProperties {
export interface PrettyProperties extends TextCoverageProperties {
colorReplacement: { [key: string]: string };
dimensions: any;
maxProgressBarWidth: number;
Expand Down
6 changes: 3 additions & 3 deletions src/lib/reporters/Runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Writable } from 'stream';
import Test from '../Test';
import Suite from '../Suite';
import { createEventHandler } from './Reporter';
import Coverage, { CoverageProperties } from './Coverage';
import TextCoverage, { TextCoverageProperties } from './TextCoverage';
import Server from '../Server';
import { CoverageMessage, DeprecationMessage } from '../executors/Executor';
import Node, { Events, TunnelMessage } from '../executors/Node';
Expand All @@ -15,7 +15,7 @@ export type Charm = charm.CharmInstance;

const eventHandler = createEventHandler<Events>();

export default class Runner extends Coverage implements RunnerProperties {
export default class Runner extends TextCoverage implements RunnerProperties {
sessions: {
[sessionId: string]: {
coverage?: CoverageMap;
Expand Down Expand Up @@ -318,7 +318,7 @@ export default class Runner extends Coverage implements RunnerProperties {
}
}

export interface RunnerProperties extends CoverageProperties {
export interface RunnerProperties extends TextCoverageProperties {
hidePassed: boolean;
hideSkipped: boolean;
}
4 changes: 2 additions & 2 deletions src/lib/reporters/Simple.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import Suite from '../Suite';
import Test from '../Test';
import Coverage from './Coverage';
import TextCoverage from './TextCoverage';
import { eventHandler } from './Reporter';

/**
* The Simple reporter outputs to the terminal console.
*/
export default class Simple extends Coverage {
export default class Simple extends TextCoverage {
@eventHandler()
error(error: Error) {
this.console.error(this.formatError(error));
Expand Down
32 changes: 32 additions & 0 deletions src/lib/reporters/TextCoverage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Coverage, { ReportType, CoverageProperties } from './Coverage';
import Node from '../executors/Node';

export default class TextCoverage extends Coverage
implements TextCoverageProperties {

readonly reportType: ReportType = 'text';
maxColumns: number;

constructor(executor: Node, options: TextCoverageOptions = {}) {
super(executor, options);

if (options.maxColumns) {
this.maxColumns = options.maxColumns;
}
}

getReporterOptions(): { [key: string]: any; } {
const options = super.getReporterOptions();

options.maxColumns = this.maxColumns;

return options;
}
}

export interface TextCoverageProperties extends CoverageProperties {
/** Maximum number of columns */
maxColumns: number;
}

export type TextCoverageOptions = Partial<TextCoverageProperties>;
1 change: 1 addition & 0 deletions tests/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"./unit/lib/reporters/Runner.ts",
"./unit/lib/reporters/Simple.ts",
"./unit/lib/reporters/TeamCity.ts",
"./unit/lib/reporters/TextCoverage.ts",
"./unit/lib/*.ts",
"./unit/loaders/*.ts",
"./unit/tasks/*.ts",
Expand Down
17 changes: 17 additions & 0 deletions tests/unit/lib/reporters/Cobertura.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,22 @@ registerSuite('lib/reporters/Cobertura', {
construct() {
const reporter = new Cobertura(<any>{ on() {} });
assert.equal(reporter.reportType, 'cobertura');
},

'#getReporterOptions': {
'projectRoot included'() {
const reporter = new Cobertura(<any>{ on() {} }, {
projectRoot: '/foo/bar/baz'
});
assert.equal(
reporter.getReporterOptions().projectRoot,
'/foo/bar/baz'
);
},

'projectRoot not included'() {
const reporter = new Cobertura(<any>{ on() {} }, {});
assert.equal(reporter.getReporterOptions().projectRoot, undefined);
}
}
});
26 changes: 23 additions & 3 deletions tests/unit/lib/reporters/Coverage.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { CoverageMap } from 'istanbul-lib-coverage';
import { spy, stub } from 'sinon';
import _Coverage, { CoverageProperties } from 'src/lib/reporters/Coverage';
import _Coverage, { CoverageOptions } from 'src/lib/reporters/Coverage';

const { registerSuite } = intern.getPlugin('interface.object');
const { assert } = intern.getPlugin('chai');
const mockRequire = intern.getPlugin<mocking.MockRequire>('mockRequire');

interface FullCoverage extends _Coverage {
new (executor: Node, options: CoverageProperties): _Coverage;
new (executor: Node, options: CoverageOptions): _Coverage;
}

registerSuite('lib/reporters/Coverage', function() {
Expand Down Expand Up @@ -79,6 +79,7 @@ registerSuite('lib/reporters/Coverage', function() {

'#createCoverageReport': {
'without data'() {
mockExecutor.coverageMap = { files: () => [] };
const reporter = new Coverage(mockExecutor, <any>{});
reporter.createCoverageReport('text', {});
assert.equal(mockVisit.callCount, 1);
Expand All @@ -92,6 +93,7 @@ registerSuite('lib/reporters/Coverage', function() {
},

'with data'() {
mockExecutor.coverageMap = { files: () => [] };
const reporter = new Coverage(mockExecutor, <any>{});
reporter.createCoverageReport('json', <CoverageMap>{
files() {}
Expand All @@ -107,6 +109,24 @@ registerSuite('lib/reporters/Coverage', function() {
}
},

'#getReporterOptions': {
'filename included'() {
const reporter = new Coverage(<any>{ on() {} }, {
filename: 'foo'
});
assert.deepEqual(reporter.getReporterOptions(), {
file: 'foo'
});
},

'filename not included'() {
const reporter = new Coverage(<any>{ on() {} }, {});
assert.deepEqual(reporter.getReporterOptions(), {
file: undefined
});
}
},

'#runEnd': {
'without data'() {
const reporter = new Coverage(mockExecutor, <any>{});
Expand All @@ -123,7 +143,7 @@ registerSuite('lib/reporters/Coverage', function() {
mockExecutor.coverageMap = { files: () => ['foo.js'] };
reporter.runEnd();
assert.equal(create.callCount, 1);
assert.equal(create.getCall(0).args[0], 'text');
assert.equal(create.getCall(0).args[0], undefined);
assert.equal(
create.getCall(0).args[1],
mockExecutor.coverageMap
Expand Down
12 changes: 12 additions & 0 deletions tests/unit/lib/reporters/HtmlCoverage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,17 @@ registerSuite('lib/reporters/HtmlCoverage', {
construct() {
const reporter = new HtmlCoverage(<any>{ on() {} });
assert.equal(reporter.reportType, 'html');
},

'#getReporterOptions': {
'verbose included'() {
const reporter = new HtmlCoverage(<any>{ on() {} }, { verbose: true });
assert.equal(reporter.getReporterOptions().verbose, true);
},

'verbose not included'() {
const reporter = new HtmlCoverage(<any>{ on() {} }, {});
assert.equal(reporter.getReporterOptions().verbose, undefined);
}
}
});
23 changes: 23 additions & 0 deletions tests/unit/lib/reporters/TextCoverage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import TextCoverage from 'src/lib/reporters/TextCoverage';

const { registerSuite } = intern.getPlugin('interface.object');
const { assert } = intern.getPlugin('chai');

registerSuite('lib/reporters/TextCoverage', {
construct() {
const reporter = new TextCoverage(<any>{ on() {} });
assert.equal(reporter.reportType, 'text');
},

'#getReporterOptions': {
'maxColumns included'() {
const reporter = new TextCoverage(<any>{ on() {} }, { maxColumns: 80 });
assert.equal(reporter.getReporterOptions().maxColumns, 80);
},

'maxColumns not included'() {
const reporter = new TextCoverage(<any>{ on() {} }, {});
assert.equal(reporter.getReporterOptions().maxColumns, undefined);
}
}
});