| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
							- /*
 
-  Copyright 2012-2015, Yahoo Inc.
 
-  Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
 
-  */
 
- 'use strict';
 
- const percent = require('./percent');
 
- const dataProperties = require('./data-properties');
 
- function blankSummary() {
 
-     const empty = () => ({
 
-         total: 0,
 
-         covered: 0,
 
-         skipped: 0,
 
-         pct: 'Unknown'
 
-     });
 
-     return {
 
-         lines: empty(),
 
-         statements: empty(),
 
-         functions: empty(),
 
-         branches: empty(),
 
-         branchesTrue: empty()
 
-     };
 
- }
 
- // asserts that a data object "looks like" a summary coverage object
 
- function assertValidSummary(obj) {
 
-     const valid =
 
-         obj && obj.lines && obj.statements && obj.functions && obj.branches;
 
-     if (!valid) {
 
-         throw new Error(
 
-             'Invalid summary coverage object, missing keys, found:' +
 
-                 Object.keys(obj).join(',')
 
-         );
 
-     }
 
- }
 
- /**
 
-  * CoverageSummary provides a summary of code coverage . It exposes 4 properties,
 
-  * `lines`, `statements`, `branches`, and `functions`. Each of these properties
 
-  * is an object that has 4 keys `total`, `covered`, `skipped` and `pct`.
 
-  * `pct` is a percentage number (0-100).
 
-  */
 
- class CoverageSummary {
 
-     /**
 
-      * @constructor
 
-      * @param {Object|CoverageSummary} [obj=undefined] an optional data object or
 
-      * another coverage summary to initialize this object with.
 
-      */
 
-     constructor(obj) {
 
-         if (!obj) {
 
-             this.data = blankSummary();
 
-         } else if (obj instanceof CoverageSummary) {
 
-             this.data = obj.data;
 
-         } else {
 
-             this.data = obj;
 
-         }
 
-         assertValidSummary(this.data);
 
-     }
 
-     /**
 
-      * merges a second summary coverage object into this one
 
-      * @param {CoverageSummary} obj - another coverage summary object
 
-      */
 
-     merge(obj) {
 
-         const keys = [
 
-             'lines',
 
-             'statements',
 
-             'branches',
 
-             'functions',
 
-             'branchesTrue'
 
-         ];
 
-         keys.forEach(key => {
 
-             if (obj[key]) {
 
-                 this[key].total += obj[key].total;
 
-                 this[key].covered += obj[key].covered;
 
-                 this[key].skipped += obj[key].skipped;
 
-                 this[key].pct = percent(this[key].covered, this[key].total);
 
-             }
 
-         });
 
-         return this;
 
-     }
 
-     /**
 
-      * returns a POJO that is JSON serializable. May be used to get the raw
 
-      * summary object.
 
-      */
 
-     toJSON() {
 
-         return this.data;
 
-     }
 
-     /**
 
-      * return true if summary has no lines of code
 
-      */
 
-     isEmpty() {
 
-         return this.lines.total === 0;
 
-     }
 
- }
 
- dataProperties(CoverageSummary, [
 
-     'lines',
 
-     'statements',
 
-     'functions',
 
-     'branches',
 
-     'branchesTrue'
 
- ]);
 
- module.exports = {
 
-     CoverageSummary
 
- };
 
 
  |