All files / istanbul-lib-report/src/reports/teamcity index.ts

0% Statements 0/19
0% Branches 0/6
0% Functions 0/3
0% Lines 0/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61                                                                                                                         
/*
 Copyright 2012-2015, Yahoo Inc.
 Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
 */
import type { Context, ReportNode } from "../../index";
import ReportBase from "../../report-base";
 
/** options accepted by {@link TeamcityReport} */
export interface TeamcityOptions {
  /** the file to write the report to, defaults to the console */
  file?: string | null;
  /** the teamcity block name to wrap the output in, defaults to `Code Coverage Summary` */
  blockName?: string;
}
 
class TeamcityReport extends ReportBase {
  declare file: string | null;
  declare blockName: string;
 
  constructor(opts?: TeamcityOptions) {
    super();
 
    opts = opts || {};
    this.file = opts.file || null;
    this.blockName = opts.blockName || "Code Coverage Summary";
  }
 
  onStart(node: ReportNode, context: Context): void {
    const metrics = node.getCoverageSummary()!;
    const cw = context.writer.writeFile(this.file);
 
    cw.println("");
    cw.println("##teamcity[blockOpened name='" + this.blockName + "']");
 
    //Statements Covered
    cw.println(lineForKey(metrics.statements.covered, "CodeCoverageAbsBCovered"));
    cw.println(lineForKey(metrics.statements.total, "CodeCoverageAbsBTotal"));
 
    //Branches Covered
    cw.println(lineForKey(metrics.branches.covered, "CodeCoverageAbsRCovered"));
    cw.println(lineForKey(metrics.branches.total, "CodeCoverageAbsRTotal"));
 
    //Functions Covered
    cw.println(lineForKey(metrics.functions.covered, "CodeCoverageAbsMCovered"));
    cw.println(lineForKey(metrics.functions.total, "CodeCoverageAbsMTotal"));
 
    //Lines Covered
    cw.println(lineForKey(metrics.lines.covered, "CodeCoverageAbsLCovered"));
    cw.println(lineForKey(metrics.lines.total, "CodeCoverageAbsLTotal"));
 
    cw.println("##teamcity[blockClosed name='" + this.blockName + "']");
    cw.close();
  }
}
 
function lineForKey(value: number, teamcityVar: string): string {
  return "##teamcity[buildStatisticValue key='" + teamcityVar + "' value='" + value + "']";
}
 
export default TeamcityReport;