aboutsummaryrefslogtreecommitdiffstats
path: root/tools/node_modules/expresso/deps/jscoverage/report.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/expresso/deps/jscoverage/report.js')
-rw-r--r--tools/node_modules/expresso/deps/jscoverage/report.js76
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;
+ }
+ };
+}