probe.gl
Version:
JavaScript Console Instrumentation and Benchmarking for Browser and Node
219 lines (185 loc) • 6.64 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _browserDriver = _interopRequireDefault(require("./browser-driver"));
var _color = require("../../lib/utils/color");
var _diffImages = _interopRequireDefault(require("../image-utils/diff-images"));
var MAX_CONSOLE_MESSAGE_LENGTH = 500;
var BrowserTestDriver = function (_BrowserDriver) {
(0, _inherits2.default)(BrowserTestDriver, _BrowserDriver);
function BrowserTestDriver() {
(0, _classCallCheck2.default)(this, BrowserTestDriver);
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BrowserTestDriver).apply(this, arguments));
}
(0, _createClass2.default)(BrowserTestDriver, [{
key: "run",
value: function run() {
var _this = this;
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _config$title = config.title,
title = _config$title === void 0 ? 'Browser Test' : _config$title,
_config$headless = config.headless,
headless = _config$headless === void 0 ? false : _config$headless;
this.title = title;
this.headless = headless;
this.time = Date.now();
this.failures = 0;
this.logger.log({
message: "".concat(title),
color: _color.COLOR.BRIGHT_YELLOW
})();
return this._startServer(config.server || config).then(function (url) {
return _this._openPage(url, config);
}).then(function (result) {
return _this._onFinish(result);
}).catch(function (error) {
_this._fail(error.message || error);
});
}
}, {
key: "_openPage",
value: function _openPage(url) {
var _this2 = this;
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var browserConfig = Object.assign({}, config.browser, {
headless: this.headless
});
return this.startBrowser(browserConfig).then(function (_) {
return new Promise(function (resolve, reject) {
var exposeFunctions = Object.assign({}, config.exposeFunctions, {
browserTestDriver_fail: function browserTestDriver_fail() {
return _this2.failures++;
},
browserTestDriver_finish: function browserTestDriver_finish(message) {
return resolve(message);
},
browserTestDriver_captureAndDiffScreen: function browserTestDriver_captureAndDiffScreen(opts) {
return _this2._captureAndDiff(opts);
},
onerror: reject
});
if (config.exposeFunction) {
_this2.logger.removed('exposeFunction', 'browserTestDriver_sendMessage');
}
_this2.logger.log({
message: 'Loading page in browser...',
color: _color.COLOR.BRIGHT_YELLOW
})();
_this2.openPage({
url: config.url || url,
exposeFunctions: exposeFunctions,
onConsole: function onConsole(event) {
return _this2._onConsole(event);
},
onError: reject
});
});
});
}
}, {
key: "_startServer",
value: function _startServer() {
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!config) {
return null;
}
if (typeof config === 'function') {
return config();
}
return this.startServer(config);
}
}, {
key: "_onConsole",
value: function _onConsole(event) {
if (!this.headless) {
return;
}
var text = event.text().slice(0, MAX_CONSOLE_MESSAGE_LENGTH);
switch (event.type()) {
case 'log':
console.log(text);
break;
case 'warning':
console.log((0, _color.addColor)(text, _color.COLOR.YELLOW));
break;
case 'error':
console.log((0, _color.addColor)(text, _color.COLOR.RED));
break;
default:
}
}
}, {
key: "_onFinish",
value: function _onFinish(message) {
var elapsed = ((Date.now() - this.time) / 1000).toFixed(1);
this.logger.log({
message: "".concat(this.title, " completed in ").concat(elapsed, "s."),
color: _color.COLOR.BRIGHT_YELLOW
})();
if (this.failures) {
this._fail(message || "".concat(this.failures, " test").concat(this.failures > 1 ? 's' : '', " failed"));
} else {
this._pass(message || 'All tests passed');
}
}
}, {
key: "_pass",
value: function _pass(message) {
this.logger.log({
message: "".concat(this.title, " successful: ").concat(message),
color: _color.COLOR.BRIGHT_GREEN
})();
if (this.headless) {
this.exit(0);
}
}
}, {
key: "_fail",
value: function _fail(message) {
this.logger.log({
message: "".concat(this.title, " failed: ").concat(message),
color: _color.COLOR.BRIGHT_RED
})();
if (this.headless) {
this.exit(1);
}
}
}, {
key: "_captureAndDiff",
value: function _captureAndDiff(opts) {
if (!opts.goldenImage) {
return Promise.reject(new Error('Must supply golden image for image diff'));
}
var screenshotOptions = {
type: 'png',
omitBackground: true,
encoding: 'binary'
};
if (opts.region) {
screenshotOptions.clip = opts.region;
} else {
screenshotOptions.fullPage = true;
}
return this.page.screenshot(screenshotOptions).then(function (image) {
return (0, _diffImages.default)(image, opts.goldenImage, opts);
}).catch(function (error) {
return {
success: false,
match: 0,
error: error.message
};
});
}
}]);
return BrowserTestDriver;
}(_browserDriver.default);
exports.default = BrowserTestDriver;
//# sourceMappingURL=browser-test-driver.js.map