From a4e9c557ff57626ea678e99c5ea2fa2e05853982 Mon Sep 17 00:00:00 2001 From: Wannes Van Regenmortel Date: Tue, 27 Dec 2016 15:30:09 +0100 Subject: [PATCH] feat(print-report-url): Print report location * Print location of HTML report file when done (#10) --- packages/stryker-html-reporter/package.json | 4 ++- .../stryker-html-reporter/src/HtmlReporter.ts | 25 +++++++++++-------- .../test/helpers/log4jsMock.ts | 1 - .../test/integration/HtmlReporterSpec.ts | 9 ++++--- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/stryker-html-reporter/package.json b/packages/stryker-html-reporter/package.json index 8ff92bfec4..4feaba306c 100644 --- a/packages/stryker-html-reporter/package.json +++ b/packages/stryker-html-reporter/package.json @@ -26,6 +26,7 @@ }, "homepage": "https://github.com/stryker-mutator/stryker-html-reporter#readme", "dependencies": { + "file-url": "^2.0.0", "handlebars": "^4.0.5", "lodash": "^4.13.1", "log4js": "^1.0.1", @@ -38,6 +39,7 @@ "devDependencies": { "@types/chai": "^3.4.32", "@types/chai-as-promised": "0.0.29", + "@types/file-url": "^1.0.28", "@types/handlebars": "^4.0.30", "@types/lodash": "^4.14.34", "@types/log4js": "0.0.31", @@ -81,4 +83,4 @@ "Nico Jansen ", "Simon de Lang " ] -} +} \ No newline at end of file diff --git a/packages/stryker-html-reporter/src/HtmlReporter.ts b/packages/stryker-html-reporter/src/HtmlReporter.ts index 3eea91c7e8..1569f5c88a 100644 --- a/packages/stryker-html-reporter/src/HtmlReporter.ts +++ b/packages/stryker-html-reporter/src/HtmlReporter.ts @@ -3,9 +3,11 @@ import { StrykerOptions } from 'stryker-api/core'; import SourceFileTreeNode from './SourceFileTreeNode'; import * as fs from 'fs'; import * as path from 'path'; +import * as url from 'url'; import * as log4js from 'log4js'; import * as handlebars from 'handlebars'; import * as util from './util'; +import fileUrl = require('file-url'); const log = log4js.getLogger('HtmlReporter'); const DEFAULT_BASE_FOLDER = 'reports/mutation/html'; @@ -13,7 +15,7 @@ const DEFAULT_BASE_FOLDER = 'reports/mutation/html'; export default class HtmlReporter implements Reporter { private rootNode: SourceFileTreeNode; - private _baseFolder: string; + private _baseDir: string; private templates: { node: HandlebarsTemplateDelegate, header: HandlebarsTemplateDelegate, footer: HandlebarsTemplateDelegate }; private mainPromise: Promise; @@ -40,12 +42,12 @@ export default class HtmlReporter implements Reporter { private writeBootstrapAndHighlightResources() { let resourcesDir = path.join(__dirname, '..', 'resources'); - return util.copyFolder(resourcesDir, this.baseFolder); + return util.copyFolder(resourcesDir, this.baseDir); } private writeStrykerResources() { let resourcesDir = path.join(__dirname, 'resources', 'stryker'); - return util.copyFolder(resourcesDir, this.baseFolder); + return util.copyFolder(resourcesDir, this.baseDir); } private writeCommonResources() { @@ -54,25 +56,26 @@ export default class HtmlReporter implements Reporter { private writeReport() { this.rootNode.calculateModel(''); - this.rootNode.writeReportNodeRecursive(this.baseFolder); + this.rootNode.writeReportNodeRecursive(this.baseDir); + log.info(`Your report can be found at: ${fileUrl(path.resolve(this.baseDir, 'index.html'))}`); } - private get baseFolder() { - if (!this._baseFolder) { + private get baseDir() { + if (!this._baseDir) { if (this.options['htmlReporter'] && this.options['htmlReporter']['baseDir']) { - this._baseFolder = this.options['htmlReporter']['baseDir']; - log.debug(`Using configured output folder ${this._baseFolder}`); + this._baseDir = this.options['htmlReporter']['baseDir']; + log.debug(`Using configured output folder ${this._baseDir}`); } else { log.debug(`No base folder configuration found (using configuration: htmlReporter: { baseDir: 'output/folder' }), using default ${DEFAULT_BASE_FOLDER}`); - this._baseFolder = DEFAULT_BASE_FOLDER; + this._baseDir = DEFAULT_BASE_FOLDER; } } - return this._baseFolder; + return this._baseDir; } private cleanBaseFolder(): Promise { - return util.deleteDir(this.baseFolder).then(() => util.mkdirRecursive(this.baseFolder)); + return util.deleteDir(this.baseDir).then(() => util.mkdirRecursive(this.baseDir)); } wrapUp() { diff --git a/packages/stryker-html-reporter/test/helpers/log4jsMock.ts b/packages/stryker-html-reporter/test/helpers/log4jsMock.ts index 0692d51315..dabc9f146a 100644 --- a/packages/stryker-html-reporter/test/helpers/log4jsMock.ts +++ b/packages/stryker-html-reporter/test/helpers/log4jsMock.ts @@ -1,7 +1,6 @@ import * as log4js from 'log4js'; import * as sinon from 'sinon'; -const l = log4js.getLogger(); let logger = { isTraceEnabled: sinon.stub(), trace: sinon.stub(), diff --git a/packages/stryker-html-reporter/test/integration/HtmlReporterSpec.ts b/packages/stryker-html-reporter/test/integration/HtmlReporterSpec.ts index d06269515f..b27a0cd949 100644 --- a/packages/stryker-html-reporter/test/integration/HtmlReporterSpec.ts +++ b/packages/stryker-html-reporter/test/integration/HtmlReporterSpec.ts @@ -1,7 +1,9 @@ import HtmlReporter from '../../src/HtmlReporter'; import * as fs from 'fs'; import * as path from 'path'; -import {expect} from 'chai'; +import { expect } from 'chai'; +import logger from '../helpers/log4jsMock'; +import fileUrl = require('file-url'); const exampleMutations = require('./exampleMutations.json'); const exampleSourceFiles = require('./exampleSourceFiles.json'); @@ -37,6 +39,9 @@ describe('HtmlReporter with example project', () => { expectFileExists(`${baseDir}/Add.js.html`, true); }); + it('should output a log message with a link to the HTML report', () => { + expect(logger.info).to.have.been.calledWith(`Your report can be found at: ${fileUrl(baseDir + '/index.html')}`); + }); }); describe('when initiated a second time with empty events', () => { @@ -56,7 +61,5 @@ describe('HtmlReporter with example project', () => { }); }); - - });