diff options
Diffstat (limited to 'tools/node_modules/expresso/deps/jscoverage/report.js')
-rw-r--r-- | tools/node_modules/expresso/deps/jscoverage/report.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/node_modules/expresso/deps/jscoverage/report.js b/tools/node_modules/expresso/deps/jscoverage/report.js new file mode 100644 index 0000000..13ce04a --- /dev/null +++ b/tools/node_modules/expresso/deps/jscoverage/report.js @@ -0,0 +1,76 @@ +if (! window.jscoverage_report) { + window.jscoverage_report = function jscoverage_report(dir) { + var createRequest = function () { + if (window.XMLHttpRequest) { + return new XMLHttpRequest(); + } + else if (window.ActiveXObject) { + return new ActiveXObject("Microsoft.XMLHTTP"); + } + }; + + var pad = function (s) { + return '0000'.substr(s.length) + s; + }; + + var quote = function (s) { + return '"' + s.replace(/[\u0000-\u001f"\\\u007f-\uffff]/g, function (c) { + switch (c) { + case '\b': + return '\\b'; + case '\f': + return '\\f'; + case '\n': + return '\\n'; + case '\r': + return '\\r'; + case '\t': + return '\\t'; + // IE doesn't support this + /* + case '\v': + return '\\v'; + */ + case '"': + return '\\"'; + case '\\': + return '\\\\'; + default: + return '\\u' + pad(c.charCodeAt(0).toString(16)); + } + }) + '"'; + }; + + var json = []; + for (var file in top._$jscoverage) { + var coverage = top._$jscoverage[file]; + var array = []; + var length = coverage.length; + for (var line = 0; line < length; line++) { + var value = coverage[line]; + if (value === undefined || value === null) { + value = 'null'; + } + array.push(value); + } + json.push(quote(file) + ':[' + array.join(',') + ']'); + } + json = '{' + json.join(',') + '}'; + + var request = createRequest(); + var url = '/jscoverage-store'; + if (dir) { + url += '/' + encodeURIComponent(dir); + } + request.open('POST', url, false); + request.setRequestHeader('Content-Type', 'application/json'); + request.setRequestHeader('Content-Length', json.length.toString()); + request.send(json); + if (request.status === 200 || request.status === 201 || request.status === 204) { + return request.responseText; + } + else { + throw request.status; + } + }; +} |