blob: 0c70dc87563b0b35b6ba3f9c8684239218bb635d [file] [log] [blame]
'use strict';
var isNode = process && !process.browser;
var UAParser = require('ua-parser-js');
var ua = !isNode && new UAParser(navigator.userAgent);
var marky = require('marky');
var median = require('median');
global.results = {
tests: {}
};
// fix for Firefox max timing entries capped to 150:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1331135
/* global performance */
if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {
performance.setResourceTimingBufferSize(100000);
}
var pre = !isNode && global.document.getElementById('output');
function log(msg) {
if (pre) {
pre.textContent += msg;
} else {
console.log(msg);
}
}
exports.log = log;
exports.startSuite = function (suiteName) {
log('Starting suite: ' + suiteName + '\n\n');
};
exports.start = function (testCase, iter) {
var key = testCase.name;
log('Starting test: ' + key + ' with ' + testCase.assertions +
' assertions and ' + iter + ' iterations... ');
global.results.tests[key] = {
iterations: []
};
};
exports.end = function (testCase) {
var key = testCase.name;
var obj = global.results.tests[key];
obj.median = median(obj.iterations);
obj.numIterations = obj.iterations.length;
delete obj.iterations; // keep it simple when reporting
log('median: ' + obj.median + ' ms\n');
};
exports.startIteration = function (testCase) {
marky.mark(testCase.name);
};
exports.endIteration = function (testCase) {
var entry = marky.stop(testCase.name);
global.results.tests[testCase.name].iterations.push(entry.duration);
};
exports.complete = function (adapter) {
global.results.completed = true;
if (isNode) {
global.results.client = {
node: process.version
};
} else {
global.results.client = {
browser: ua.getBrowser(),
device: ua.getDevice(),
engine: ua.getEngine(),
cpu: ua.getCPU(),
os : ua.getOS(),
userAgent: navigator.userAgent
};
}
global.results.adapter = adapter;
console.log('=>', JSON.stringify(global.results, null, ' '), '<=');
log('\nTests Complete!\n\n');
};