All files steps.js

100% Statements 38/38
100% Branches 15/15
100% Functions 2/2
100% Lines 38/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                1x 1x 1x 1x   1x 1x   1x                                                   5x 1x 1x     4x 4x 4x 4x 4x   4x 4x   4x 1x 1x 1x     4x           4x 4x   4x 4x   4x                           2x 1x 1x     1x 1x   1x 1x   1x 1x   1x     1x  
"use strict";
/**
 * Steps for virtual display.
 *
 * @mixin XvfbSteps
 * @prop {Xvfb} xvfb - Xvfb instance.
 */
 
var U = require("glace-utils");
var LOG = U.logger;
var resolution = require("screen-resolution");
var Xvfb = require("xvfb");
 
require("./fixtures");
var CONF = require("./config");
 
var XvfbSteps = {
    /* modules */
    __resolution: resolution,
    __Xvfb: Xvfb,
 
    startXvfb: async function (opts) {
        /**
         * Step to start virtual display. Step recall will be skipped if virtual
         *  display wasn't stopped before.
         *
         * @async
         * @memberOf XvfbSteps
         * @method startXvfb
         * @instance
         * @arg {object} [opts] - Step options.
         * @arg {number} [opts.width] - Virtual display width. Default is active
         *  display width.
         * @arg {number} [opts.height] - Virtual display height. Default is active
         *  display height.
         * @arg {number} [opts.depth=24] - Virtual display color depth.
         * @arg {number} [opts.timeout=1] - Time to wait for virtual display
         *  will be started, sec.
         * @return {Promise<boolean>} - `true` if step was executed, `false` if
         *  was skipped.
         */
 
        if (this._isXvfbStarted) {
            LOG.warn("Step to start Xvfb was passed already");
            return false;
        };
 
        opts = U.defVal(opts, {});
        var width = U.defVal(opts.width, CONF.xvfb.width);
        var height = U.defVal(opts.height, CONF.xvfb.height);
        var depth = U.defVal(opts.depth, 24);
        var timeout = U.defVal(opts.timeout, 1) * 1000;
 
        allure.step("Start Xvfb");
        LOG.info("Starting Xvfb...");
 
        if (!((width && height) || this.xvfb)) {
            var screen = await this.__resolution.get();
            width = width || screen.width;
            height = height || screen.height;
        };
 
        this.xvfb = this.xvfb || new this.__Xvfb(
            { timeout: timeout,
                xvfb_args: [ "-screen", 0,
                    `${width}x${height}x${depth}`,
                    "-noreset", "-ac"] });
 
        this.xvfb.startSync();
        this._isXvfbStarted = true;
 
        LOG.info("Xvfb is started");
        allure.pass();
 
        return true;
    },
 
    stopXvfb: function () {
        /**
         * Step to stop virtual display. Step call will be skipped if virtual
         *  display wasn't started before.
         *
         * @memberOf XvfbSteps
         * @method stopXvfb
         * @instance
         * @return {boolean} - `true` if step was executed, `false` if was skipped.
         */
 
        if (!this._isXvfbStarted) {
            LOG.warn("Step to start Xvfb wasn't passed yet");
            return false;
        };
 
        allure.step("Stop Xvfb");
        LOG.info("Stopping Xvfb...");
 
        this.xvfb.stopSync();
        this._isXvfbStarted = false;
 
        LOG.info("Xvfb is stopped");
        allure.pass();
 
        return true;
    },
};
module.exports = XvfbSteps;