96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
var tasks = {},
 | 
						|
    _ = require('underscore');
 | 
						|
 | 
						|
function init(config) {
 | 
						|
    var grunt  = require('grunt'),
 | 
						|
        expand = grunt.file.expand.bind(grunt.file),
 | 
						|
        staticMode = 'quick',
 | 
						|
        themes, root, staticDir, baseUrl, mapFile, host, port, files, requireJs;
 | 
						|
 | 
						|
    root         = config.root;
 | 
						|
    staticDir    = config.static;
 | 
						|
    port         = config.port;
 | 
						|
    files        = config.files;
 | 
						|
    themes       = config.themes;
 | 
						|
 | 
						|
    _.each(themes, function (themeData, themeName) {
 | 
						|
        var specs,
 | 
						|
            configs,
 | 
						|
            render;
 | 
						|
 | 
						|
        _.extend(themeData, {
 | 
						|
            root: root,
 | 
						|
            static: staticDir
 | 
						|
        });
 | 
						|
 | 
						|
        host    = _.template(config.host)({
 | 
						|
            port: port++
 | 
						|
        });
 | 
						|
        render  = renderTemplate.bind(null, themeData);
 | 
						|
        mapFile = renderTemplate(themeData, files.compactMap);
 | 
						|
        baseUrl = renderTemplate(themeData, files.requireBaseUrl);
 | 
						|
 | 
						|
        if (grunt.file.exists(mapFile)) {
 | 
						|
            staticMode = 'compact';
 | 
						|
        }
 | 
						|
 | 
						|
        if (config.singleTest) {
 | 
						|
            files.specs = [config.singleTest];
 | 
						|
        }
 | 
						|
 | 
						|
        specs   = files.specs.map(render);
 | 
						|
        specs   = expand(specs).map(cutJsExtension);
 | 
						|
        configs = files.requirejsConfigs[staticMode].map(render);
 | 
						|
        requireJs = renderTemplate(themeData, files.requireJs[staticMode]);
 | 
						|
 | 
						|
        tasks[themeName] = {
 | 
						|
            src: configs,
 | 
						|
            options: {
 | 
						|
                host: host,
 | 
						|
                template: render(files.template),
 | 
						|
                templateOptions: {
 | 
						|
                    baseUrl: baseUrl
 | 
						|
                },
 | 
						|
                vendor: requireJs,
 | 
						|
                junit: {
 | 
						|
                    path: "var/log/js-unit/",
 | 
						|
                    consolidate: true
 | 
						|
                },
 | 
						|
 | 
						|
                /**
 | 
						|
                 * @todo rename "helpers" to "specs" (implies overriding grunt-contrib-jasmine code)
 | 
						|
                 */
 | 
						|
                helpers: specs,
 | 
						|
                sandboxArgs: {
 | 
						|
                    args: ['--no-sandbox', '--disable-setuid-sandbox'],
 | 
						|
                    defaultViewport: {width: 400, height: 400, hasTouch: true}
 | 
						|
                }
 | 
						|
            }
 | 
						|
        };
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function renderTemplate(data, template) {
 | 
						|
    return _.template(template)(data);
 | 
						|
}
 | 
						|
 | 
						|
function cutJsExtension(path) {
 | 
						|
    return path.replace(/\.js$/, '');
 | 
						|
}
 | 
						|
 | 
						|
function getTasks() {
 | 
						|
    return tasks;
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {
 | 
						|
    init: init,
 | 
						|
    getTasks: getTasks
 | 
						|
};
 |