tools.js 1.84 KB
Newer Older
Ketan's avatar
Ketan committed
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
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
define([
    'underscore'
], function (_) {
    'use strict';

    return {
        /**
         * Processes configuration for a testsuite.
         *
         * @param {(Object|String)} config - Suite configuration.
         * @param {Object} tmplMap - Template map for test cases.
         */
        init: function (config, tmplMap) {
            var preset;

            if (_.isString(config)) {
                preset = JSON.parse(config);
            }

            this.applyBase(preset);

            if (tmplMap) {
                this.applyTmpls(preset, tmplMap);
            }

            return preset;
        },

        /**
         * Extends first levell properties of provided object
         * with a default configuration.
         *
         * @param {Object} data - Object to be modified.
         */
        applyBase: function (data) {
            var base = data.base = data.base || {};

            _.each(data, function (item) {
                _.defaults(item, base);
            });
        },

        /**
         * Renderes template based on template map and a source data.
         *
         * @param {Object} source - Data for a lookup.
         * @param {Object} map - Template map.
         */
        applyTmpls: function (source, map) {
            _.each(map, function (tmpl, suite) {
                suite = source[suite];

                suite.tmpl = _.template(tmpl)(suite);
            });
        },

        /**
         * Removes element by provided id.
         *
         * @param {String} id - Id of the element.
         */
        removeContainer: function (id) {
            var node = document.getElementById(id);

            if (node) {
                node.parentNode.removeChild(node);
            }
        }
    };
});