mirror of https://gitee.com/bigwinds/arangodb
83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
var Benchmark = require('benchmark');
|
|
var jsdom = require('jsdom');
|
|
var cheerio = require('..');
|
|
|
|
var documentDir = path.join(__dirname, 'documents');
|
|
var jQuerySrc = path.join(__dirname, 'jquery-2.0.3.js');
|
|
var filterRe = /./;
|
|
|
|
var Suites = module.exports = function() {};
|
|
|
|
Suites.prototype.filter = function(str) {
|
|
filterRe = new RegExp(str, 'i');
|
|
};
|
|
|
|
Suites.prototype.add = function(name, fileName, options) {
|
|
var markup, suite, testFn;
|
|
if (!filterRe.test(name)) {
|
|
return;
|
|
}
|
|
markup = fs.readFileSync(path.join(documentDir, fileName));
|
|
suite = new Benchmark.Suite(name);
|
|
testFn = options.test;
|
|
|
|
suite.on('start', function(event) {
|
|
console.log('Test: ' + name + ' (file: ' + fileName + ')');
|
|
});
|
|
suite.on('cycle', function(event) {
|
|
if (event.target.error) {
|
|
return;
|
|
}
|
|
console.log('\t' + String(event.target));
|
|
});
|
|
suite.on('error', function(event) {
|
|
console.log('*** Error in ' + event.target.name + ': ***');
|
|
console.log('\t' + event.target.error);
|
|
console.log('*** Test invalidated. ***');
|
|
});
|
|
suite.on('complete', function(event) {
|
|
if (event.target.error) {
|
|
console.log();
|
|
return;
|
|
}
|
|
console.log('\tFastest: ' + this.filter('fastest').pluck('name') + '\n');
|
|
});
|
|
|
|
this._benchCheerio(suite, markup, options);
|
|
this._benchJsDom(suite, markup, options);
|
|
};
|
|
|
|
Suites.prototype._benchJsDom = function(suite, markup, options) {
|
|
var testFn = options.test;
|
|
|
|
jsdom.env({
|
|
html: markup,
|
|
scripts: jQuerySrc,
|
|
done: function(err, window) {
|
|
var setupData;
|
|
if (options.setup) {
|
|
setupData = options.setup.call(null, window.$);
|
|
}
|
|
suite.add('jsdom', function() {
|
|
testFn.call(null, window.$, setupData);
|
|
});
|
|
suite.run();
|
|
}
|
|
});
|
|
};
|
|
|
|
Suites.prototype._benchCheerio = function(suite, markup, options) {
|
|
var $ = cheerio.load(markup);
|
|
var testFn = options.test;
|
|
var setupData;
|
|
if (options.setup) {
|
|
setupData = options.setup.call(null, $);
|
|
}
|
|
suite.add('cheerio', function() {
|
|
testFn.call(null, $, setupData);
|
|
});
|
|
};
|