This repository has been archived by the owner on Sep 21, 2022. It is now read-only.
/
state-processor.js
50 lines (43 loc) 路 1.8 KB
/
state-processor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
'use strict';
const _ = require('lodash');
const Promise = require('bluebird');
const workerFarm = require('worker-farm');
const {temp} = require('gemini-core');
const Events = require('../constants/events');
const errorUtils = require('../errors/utils');
module.exports = class StateProcessor {
constructor(captureProcessorType, maxConcurrentWorkers) {
this._captureProcessorType = captureProcessorType;
this._maxConcurrentWorkers = maxConcurrentWorkers;
}
prepare(emitter) {
const workerFarmConfig = {
maxConcurrentWorkers: this._maxConcurrentWorkers
};
this._workers = workerFarm(workerFarmConfig, require.resolve('./job'));
emitter.on(Events.END, () => workerFarm.end(this._workers));
}
exec(state, browserSession, page) {
const browserConfig = browserSession.browser.config;
const coverage = page.coverage;
const tolerance = _.isNumber(state.tolerance)
? state.tolerance
: browserConfig.tolerance;
const jobArgs = {
captureProcessorType: this._captureProcessorType,
browserSession: browserSession.serialize(),
page: _.omit(page, 'coverage'),
execOpts: {
refImg: {path: browserConfig.getScreenshotPath(state.suite, state.name), size: null},
pixelRatio: page.pixelRatio,
antialiasingTolerance: browserConfig.antialiasingTolerance,
tolerance,
compareOpts: browserConfig.compareOpts
},
temp: temp.serialize()
};
return Promise.fromCallback((cb) => this._workers(jobArgs, cb))
.catch(err => Promise.reject(errorUtils.fromPlainObject(err)))
.then(result => _.extend(result, {coverage, tolerance}));
}
};