/// Copyright (c) 2012 Ecma International. All rights reserved. /// This code is governed by the BSD license found in the LICENSE file. /* A section of the spec. Stores test results and subsections and some rolled up stats on how many tests passed or * failed under that section */ function Section(parentSection, id, name) { this.parentSection = parentSection; this.id = id; this.name = name; this.subsections = {}; this.tests = []; this.totalTests = 0; this.totalPassed = 0; this.totalFailed = 0; this.totalFailedToLoad = 0; var section = this, RED_LIMIT = 50, YELLOW_LIMIT = 75, GREEN_LIMIT = 99.9; /* Get the class for a result cell given the pass percent. */ function rollupCellClass(passPercent) { if(passPercent >= GREEN_LIMIT) { return "reportGreen"; } else if (passPercent >= YELLOW_LIMIT) { return "reportLightGreen"; } else if (passPercent >= RED_LIMIT) { return "reportYellow"; } return "reportRed"; } /* Calculate pass percent */ this.passPercent = function() { if(this.totalTests === 0) { return 0; } return Math.round((this.totalPassed / this.totalTests) * 100); }; /* Add a test result to this section. Pushes the result to the * test array and passes the result to addTestResult to tabulate * pass/fail numbers */ this.addTest = function(test) { this.tests.push(test); this.addTestResult(test); }; /* Increments the various rollup counters for this section and all * parent sections */ this.addTestResult = function(test) { this.totalTests++; if(test.result === "pass") this.totalPassed++; else this.totalFailed++; if (test.error === 'Failed to load test case (probable parse error).') this.totalFailedToLoad++; if(this.parentSection !== null) this.parentSection.addTestResult(test); }; /* Renders this section as HTML. Used for the report page.*/ this.toHTML = function(options) { var defaultOptions = {header: false, renderSubsections: true}; if (typeof options === undefined) { options = defaultOptions; } else { options = $.extend(defaultOptions, options); } var html = '
'; if(options.header) { html += "