torchjs
Version:
test framework to light up the world
115 lines (99 loc) • 2.29 kB
JavaScript
const {
resolve,
dirname
} = require('path');
const mocha = require('mocha');
const {
writeFileSync
} = require('fs');
const {
mkdir
} = require('macaca-utils');
const {
ipcRenderer
} = require('electron');
require('electron-cookies-alt');
const notify = require('../lib/notify');
const Coverage = require('../lib/Coverage');
const runMocha = require('../lib/runMocha');
let opts = {};
if (window.location.hash) {
const hash = window.location.hash.slice(1);
opts = JSON.parse(decodeURIComponent(hash));
}
if (opts.interactive) {
const pkg = require('../package');
console.log(`${pkg.name}(${pkg.version}) run with protocol '${window.location.protocol}'`);
} else {
require('./console');
}
let coverage;
if (opts.coverage) {
coverage = new Coverage(opts.root, opts.sourcePattern);
}
// Expose mocha
window.mocha = mocha;
function reportError ({
message,
stack
}) {
if (opts.interactive) {
console.error(message);
console.error(stack);
} else {
ipcRenderer.send('mocha-error', {
message,
stack
});
}
}
// TODO compile
if (opts.compile) {
require('../lib/requireHook')(opts.compileOpts);
}
ipcRenderer.on('mocha-start', () => {
try {
runMocha(opts, count => {
if (count && opts.notifyOnFail) {
notify(count);
}
if (coverage) {
coverage.report();
}
ipcRenderer.send('mocha-done', count);
});
} catch (error) {
reportError(error);
}
});
// Request re-run on reload in --interactive mode
ipcRenderer.send('mocha-ready-to-run');
// Expose Macaca inject utils
var queue = [];
window.Macaca = {
screenshot: (options, callback) => {
queue.push({
options,
callback
});
ipcRenderer.send('screenshot-start', options);
}
};
if (opts.interactive) {
console.log('global utils', window.Macaca);
}
ipcRenderer.on('screenshot-end', (e, data) => {
var target = queue.shift();
if (target) {
if (target.options && target.options.directory) {
var directory = resolve(target.options.directory);
mkdir(dirname(directory));
console.log(`screenshot was saved to ${directory}`);
writeFileSync(directory, data.base64, 'base64');
}
target.callback({
action: 'screenshot',
data
});
}
});