diff --git a/packages/istanbul-api/lib/file-matcher.js b/packages/istanbul-api/lib/file-matcher.js index c41d98ad..c9c6b330 100644 --- a/packages/istanbul-api/lib/file-matcher.js +++ b/packages/istanbul-api/lib/file-matcher.js @@ -58,7 +58,7 @@ function matcherFor(options, callback) { options.realpath = true; //force real paths (to match Node.js module paths) filesFor(options, function (err, files) { - var fileMap = {}, + var fileMap = Object.create(null), matchFn; /* istanbul ignore if - untestable */ if (err) { return callback(err); } diff --git a/packages/istanbul-lib-coverage/lib/coverage-map.js b/packages/istanbul-lib-coverage/lib/coverage-map.js index ccb3c8a4..27ef6193 100644 --- a/packages/istanbul-lib-coverage/lib/coverage-map.js +++ b/packages/istanbul-lib-coverage/lib/coverage-map.js @@ -8,7 +8,7 @@ var FileCoverage = require('./file').FileCoverage, CoverageSummary = require('./file').CoverageSummary; function loadMap(source) { - var data = {}; + var data = Object.create(null); Object.keys(source).forEach(function (k) { var cov = source[k]; if (cov instanceof FileCoverage) { @@ -27,7 +27,7 @@ function loadMap(source) { */ function CoverageMap(obj) { if (!obj) { - this.data = {}; + this.data = Object.create(null); } else if (obj instanceof CoverageMap) { this.data = obj.data; } else { diff --git a/packages/istanbul-lib-coverage/lib/file.js b/packages/istanbul-lib-coverage/lib/file.js index a85562f1..570b274e 100644 --- a/packages/istanbul-lib-coverage/lib/file.js +++ b/packages/istanbul-lib-coverage/lib/file.js @@ -170,7 +170,7 @@ function FileCoverage(pathOrObj) { FileCoverage.prototype.getLineCoverage = function () { var statementMap = this.data.statementMap, statements = this.data.s, - lineMap = {}; + lineMap = Object.create(null); Object.keys(statements).forEach(function (st) { if (!statementMap[st]) { diff --git a/packages/istanbul-lib-report/lib/summarizer.js b/packages/istanbul-lib-report/lib/summarizer.js index ee353b31..93c431b7 100644 --- a/packages/istanbul-lib-report/lib/summarizer.js +++ b/packages/istanbul-lib-report/lib/summarizer.js @@ -166,7 +166,7 @@ function toInitialList(coverageMap) { } function toDirParents(list) { - var nodeMap = {}, + var nodeMap = Object.create(null), parentNodeList = []; list.forEach(function (o) { var node = new ReportNode(o.path, o.fileCoverage), diff --git a/packages/istanbul-lib-report/test/summarizer.test.js b/packages/istanbul-lib-report/test/summarizer.test.js index cdfbf493..3db964e7 100644 --- a/packages/istanbul-lib-report/test/summarizer.test.js +++ b/packages/istanbul-lib-report/test/summarizer.test.js @@ -30,6 +30,19 @@ function makeCoverage(filePath, numStatements, numCovered) { return fc; } +function protoDirMap(dir) { + var files = ['constructor.js', 'toString.js'], + count = 0, + map = {}; + files.forEach(function (f) { + var filePath = dir ? dir + '/' + f : f, + fc = makeCoverage(filePath, 4, count); + count += 1; + map[filePath] = fc; + }); + return coverage.createCoverageMap(map); +} + function singleDirMap(dir) { var files = ['file3.js', 'file4.js', 'file2.js', 'file1.js'], count = 0, @@ -107,6 +120,13 @@ describe('summarizer', function () { assert.deepEqual(nodes, ['g:', 'f:file1.js', 'f:file2.js', 'f:file3.js', 'f:file4.js']); }); + it('supports a list of files containing Object.prototype names', function () { + var map = protoDirMap(), + tree = fn(map), + nodes = getStructure(tree); + assert.deepEqual(nodes, ['g:', 'f:constructor.js', 'f:toString.js']); + }); + it('supports a list of files at the same nesting level', function () { var map = singleDirMap('/lib/handlers'), tree = fn(map), diff --git a/packages/istanbul-lib-source-maps/lib/map-store.js b/packages/istanbul-lib-source-maps/lib/map-store.js index 8b31d422..f553c834 100644 --- a/packages/istanbul-lib-source-maps/lib/map-store.js +++ b/packages/istanbul-lib-source-maps/lib/map-store.js @@ -29,7 +29,7 @@ function MapStore(opts) { this.baseDir = opts.baseDir || null; this.verbose = opts.verbose || false; this.sourceStore = sourceStore.create(opts.sourceStore, { tmpdir: opts.tmpdir}); - this.data = {}; + this.data = Object.create(null); } /** * registers a source map URL with this store. It makes some input sanity checks diff --git a/packages/istanbul-lib-source-maps/test/map-store.test.js b/packages/istanbul-lib-source-maps/test/map-store.test.js index 200f846f..f2959455 100644 --- a/packages/istanbul-lib-source-maps/test/map-store.test.js +++ b/packages/istanbul-lib-source-maps/test/map-store.test.js @@ -14,6 +14,8 @@ describe('map store', function () { var coverageMap = libCoverage.createCoverageMap(coverageData); var transformed = mapStore.transformCoverage(coverageMap); + assert.isUndefined(transformed.map.data.constructor); + var transformedCoverage = transformed.map.data[path.resolve("./test.ts")].data; assert.deepEqual(transformedCoverage.statementMap, {