diff --git a/.eslintrc.js b/.eslintrc.js index db8aa1b063a8..347ca90d1ae8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -64,7 +64,7 @@ module.exports = { }, }, { - files: 'types/**/*', + files: ['types/**/*', 'packages/jest-types/**/*'], rules: { 'import/no-extraneous-dependencies': 0, }, diff --git a/packages/jest-phabricator/src/index.ts b/packages/jest-phabricator/src/index.ts index 7f509ebb3545..f4e6ffbbbe9a 100644 --- a/packages/jest-phabricator/src/index.ts +++ b/packages/jest-phabricator/src/index.ts @@ -7,7 +7,14 @@ import {TestResult} from '@jest/types'; -function summarize(coverageMap: TestResult.CoverageMap) { +type AggregatedResult = TestResult.AggregatedResult; +type CoverageMap = AggregatedResult['coverageMap']; + +function summarize(coverageMap: CoverageMap): CoverageMap { + if (!coverageMap) { + return coverageMap; + } + const summaries = Object.create(null); coverageMap.files().forEach(file => { @@ -15,9 +22,9 @@ function summarize(coverageMap: TestResult.CoverageMap) { const lineCoverage = coverageMap.fileCoverageFor(file).getLineCoverage(); Object.keys(lineCoverage).forEach(lineNumber => { + const number = parseInt(lineNumber, 10); // Line numbers start at one - const number = parseInt(lineNumber, 10) - 1; - covered[number] = lineCoverage[lineNumber] ? 'C' : 'U'; + covered[number - 1] = lineCoverage[number] ? 'C' : 'U'; }); for (let i = 0; i < covered.length; i++) { @@ -32,11 +39,6 @@ function summarize(coverageMap: TestResult.CoverageMap) { return summaries; } -export = function( - results: TestResult.AggregatedResult, -): TestResult.AggregatedResult { - return { - ...results, - coverageMap: results.coverageMap && summarize(results.coverageMap), - }; +export = function(results: AggregatedResult): AggregatedResult { + return {...results, coverageMap: summarize(results.coverageMap)}; }; diff --git a/packages/jest-types/package.json b/packages/jest-types/package.json index 86018bd9b822..7c7cd4c7538d 100644 --- a/packages/jest-types/package.json +++ b/packages/jest-types/package.json @@ -11,5 +11,8 @@ }, "license": "MIT", "main": "build/index.js", - "types": "build/index.d.ts" + "types": "build/index.d.ts", + "dependencies": { + "@types/istanbul-lib-coverage": "^1.1.0" + } } diff --git a/packages/jest-types/src/TestResult.ts b/packages/jest-types/src/TestResult.ts index 857751e6a9f0..c9434eae5a63 100644 --- a/packages/jest-types/src/TestResult.ts +++ b/packages/jest-types/src/TestResult.ts @@ -5,73 +5,9 @@ * LICENSE file in the root directory of this source tree. */ +import {CoverageMap, CoverageMapData} from 'istanbul-lib-coverage'; import {ConsoleBuffer} from './Console'; -export type RawFileCoverage = { - path: string; - s: { - [statementId: number]: number; - }; - b: { - [branchId: number]: number; - }; - f: { - [functionId: number]: number; - }; - l: { - [lineId: number]: number; - }; - fnMap: { - [functionId: number]: any; - }; - statementMap: { - [statementId: number]: any; - }; - branchMap: { - [branchId: number]: any; - }; - inputSourceMap?: Object; -}; - -export type RawCoverage = { - [filePath: string]: RawFileCoverage; -}; -type FileCoverageTotal = { - total: number; - covered: number; - skipped: number; - pct: number; -}; - -export type CoverageSummary = { - lines: FileCoverageTotal; - statements: FileCoverageTotal; - branches: FileCoverageTotal; - functions: FileCoverageTotal; - merge: (other: CoverageSummary) => undefined; -}; - -export type FileCoverage = { - getLineCoverage: () => {[line: string]: string}; - getUncoveredLines: () => Array; - getBranchCoverageByLine: () => {[line: string]: string}; - toJSON: () => {[line: string]: string}; - merge: (other: Object) => undefined; - computeSimpleTotals: (property: string) => FileCoverageTotal; - computeBranchTotals: () => FileCoverageTotal; - resetHits: () => undefined; - toSummary: () => CoverageSummary; -}; - -export type CoverageMap = { - merge: (data: Object) => undefined; - getCoverageSummary: () => FileCoverage; - data: RawCoverage; - addFileCoverage: (fileCoverage: RawFileCoverage) => undefined; - files: () => Array; - fileCoverageFor: (file: string) => FileCoverage; -}; - export type SerializableError = { code?: unknown; message: string; @@ -162,7 +98,7 @@ export type Suite = { export type TestResult = { console?: ConsoleBuffer | null; - coverage?: RawCoverage; + coverage?: CoverageMapData; displayName?: string | null; failureMessage?: string | null; leaks: boolean; @@ -226,7 +162,7 @@ export type FormattedTestResults = { export type CodeCoverageReporter = any; export type CodeCoverageFormatter = ( - coverage: RawCoverage | null | undefined, + coverage: CoverageMapData | null | undefined, reporter: CodeCoverageReporter, ) => Object | null | undefined;