From 49b7413af2d94c510ae43a6e314e3cd2770f90f0 Mon Sep 17 00:00:00 2001
From: Mykhailo Miroshnikov <mmiroshnikov@ebay.com>
Date: Sat, 21 Mar 2015 19:28:35 +0200
Subject: [PATCH] MAGETWO-35118: JavaScript Unit Test Framework supports theme
 feature

 - Improved JavaScript tests' file structure and execution mechanism
---
 .../js/jasmine/assets/text/external.html      |   6 -
 dev/tests/js/jasmine/assets/text/local.html   |   6 -
 .../Magento/Ui/adminhtml/datepicker.js        |  51 -----
 .../old/integration/config/adminhtml.js       |  10 -
 .../old/integration/config/frontend.js        |  10 -
 .../jasmine/old/integration/config/global.js  |  27 ---
 dev/tests/js/jasmine/old/require.config.js    |  16 --
 dev/tests/js/jasmine/old/shim.js              |  46 ----
 dev/tests/js/jasmine/old/spec_runner.js       | 200 ------------------
 dev/tests/js/jasmine/old/tools.js             |  74 -------
 dev/tests/js/jasmine/require.conf.js          |  30 +++
 .../Magento/Msrp/frontend/js/msrp.test.js}    |   0
 .../PageCache/frontend/js/page-cache.test.js} |   0
 .../Magento/Ui/base/js}/lib/events.test.js    |   0
 .../base/js}/lib/ko/bind/datepicker.test.js   |   0
 .../apply.js => tests/lib/mage/apply.test.js} |   0
 .../mage/requirejs/static-jsbuild.test.js}    |   0
 .../lib/mage/requirejs/static-text.test.js}   |   0
 .../lib}/mage/requirejs/statistician.test.js  |   0
 .../lib/mage/scripts.test.js}                 |   0
 .../lib}/mage/template.test.js                |   0
 .../Magento/backend/require.config.js         |  24 ---
 dev/tools/grunt/configs/connect.js            |   6 +-
 dev/tools/grunt/configs/jasmine.js            |  23 +-
 24 files changed, 53 insertions(+), 476 deletions(-)
 delete mode 100644 dev/tests/js/jasmine/old/integration/Magento/Ui/adminhtml/datepicker.js
 delete mode 100644 dev/tests/js/jasmine/old/integration/config/adminhtml.js
 delete mode 100644 dev/tests/js/jasmine/old/integration/config/frontend.js
 delete mode 100644 dev/tests/js/jasmine/old/integration/config/global.js
 delete mode 100644 dev/tests/js/jasmine/old/require.config.js
 delete mode 100644 dev/tests/js/jasmine/old/shim.js
 delete mode 100644 dev/tests/js/jasmine/old/spec_runner.js
 delete mode 100644 dev/tests/js/jasmine/old/tools.js
 create mode 100644 dev/tests/js/jasmine/require.conf.js
 rename dev/tests/js/jasmine/{old/integration/Magento/Msrp/frontend/js/msrp.js => tests/app/code/Magento/Msrp/frontend/js/msrp.test.js} (100%)
 rename dev/tests/js/jasmine/{old/integration/Magento/PageCache/frontend/js/pageCache.js => tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js} (100%)
 rename dev/tests/js/jasmine/{testsuite/adminhtml/Magento/backend/Magento_Ui => tests/app/code/Magento/Ui/base/js}/lib/events.test.js (100%)
 rename dev/tests/js/jasmine/{testsuite/adminhtml/Magento/backend/Magento_Ui => tests/app/code/Magento/Ui/base/js}/lib/ko/bind/datepicker.test.js (100%)
 rename dev/tests/js/jasmine/{old/integration/lib/mage/apply.js => tests/lib/mage/apply.test.js} (100%)
 rename dev/tests/js/jasmine/{old/integration/lib/mage/requirejs/static-jsbuild.js => tests/lib/mage/requirejs/static-jsbuild.test.js} (100%)
 rename dev/tests/js/jasmine/{old/integration/lib/mage/requirejs/static-text.js => tests/lib/mage/requirejs/static-text.test.js} (100%)
 rename dev/tests/js/jasmine/{testsuite/adminhtml/Magento/backend => tests/lib}/mage/requirejs/statistician.test.js (100%)
 rename dev/tests/js/jasmine/{old/integration/lib/mage/scripts.js => tests/lib/mage/scripts.test.js} (100%)
 rename dev/tests/js/jasmine/{testsuite/adminhtml/Magento/backend => tests/lib}/mage/template.test.js (100%)
 delete mode 100644 dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/require.config.js

diff --git a/dev/tests/js/jasmine/assets/text/external.html b/dev/tests/js/jasmine/assets/text/external.html
index 647a01feb12..af798c9ddb3 100644
--- a/dev/tests/js/jasmine/assets/text/external.html
+++ b/dev/tests/js/jasmine/assets/text/external.html
@@ -1,7 +1 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
 <span>External Template</span>
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/assets/text/local.html b/dev/tests/js/jasmine/assets/text/local.html
index 52a288253f0..510f099bb72 100644
--- a/dev/tests/js/jasmine/assets/text/local.html
+++ b/dev/tests/js/jasmine/assets/text/local.html
@@ -1,7 +1 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
 <span>Local Template</span>
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/old/integration/Magento/Ui/adminhtml/datepicker.js b/dev/tests/js/jasmine/old/integration/Magento/Ui/adminhtml/datepicker.js
deleted file mode 100644
index 48c728fcf2e..00000000000
--- a/dev/tests/js/jasmine/old/integration/Magento/Ui/adminhtml/datepicker.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'jquery',
-    'moment',
-    'Magento_Ui/js/lib/ko/bind/datepicker'
-], function (ko, $, moment) {
-    'use strict';
-
-    describe('Datepicker binding', function () {
-        var observable,
-            element;
-
-        beforeEach(function () {
-            element    = $('<input />');
-            observable = ko.observable();
-
-            $(document.body).append(element);
-
-            ko.applyBindingsToNode(element[0], { datepicker: observable });
-        });
-
-        afterEach(function () {
-            element.remove();
-        });
-
-        it('writes picked date\'s value to assigned observable', function () {
-            var openBtn,
-                todayBtn,
-                todayDate,
-                dateFormat,
-                result;
-
-            dateFormat  = element.datepicker('option', 'dateFormat');
-            todayDate   = moment().format(dateFormat);
-
-            openBtn  = $('img.ui-datepicker-trigger');
-            todayBtn = $('[data-handler="today"]');
-
-            openBtn.click();
-            todayBtn.click();
-
-            result = moment(observable()).format(dateFormat);
-
-            expect(todayDate).toEqual(result);
-        });
-    });
-});
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/old/integration/config/adminhtml.js b/dev/tests/js/jasmine/old/integration/config/adminhtml.js
deleted file mode 100644
index a9a60a43aca..00000000000
--- a/dev/tests/js/jasmine/old/integration/config/adminhtml.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui-1.9.2'
-    }
-});
diff --git a/dev/tests/js/jasmine/old/integration/config/frontend.js b/dev/tests/js/jasmine/old/integration/config/frontend.js
deleted file mode 100644
index 8791f57a90c..00000000000
--- a/dev/tests/js/jasmine/old/integration/config/frontend.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui'    
-    }
-})
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/old/integration/config/global.js b/dev/tests/js/jasmine/old/integration/config/global.js
deleted file mode 100644
index 0f9ac6f5749..00000000000
--- a/dev/tests/js/jasmine/old/integration/config/global.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require.config({
-    bundles: {
-        'mage/requirejs/static': [
-            'jsbuild',
-            'text',
-            'buildTools'
-        ]
-    },
-    config: {
-        jsbuild: {
-            'dev/tests/js/spec/assets/jsbuild/local.js': 'define([], function () {\'use strict\'; return \'internal module\'; });'
-        },
-        text: {
-            'dev/tests/js/spec/assets/text/local.html': '<span>Local Template</span>'
-        }
-    },
-    deps: [
-        'mage/requirejs/static'
-    ],
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui'
-    }
-});
diff --git a/dev/tests/js/jasmine/old/require.config.js b/dev/tests/js/jasmine/old/require.config.js
deleted file mode 100644
index 2df785bb996..00000000000
--- a/dev/tests/js/jasmine/old/require.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require.config({
-    paths: {
-        'ko': 'ko/ko',
-        'domReady': 'requirejs/domReady',
-        'text': 'requirejs/text',
-        'tests': 'dev/tests/js/spec'
-    },
-    shim: {
-        'jquery/ui': ['jquery']
-    }
-});
diff --git a/dev/tests/js/jasmine/old/shim.js b/dev/tests/js/jasmine/old/shim.js
deleted file mode 100644
index 0cbe7edb109..00000000000
--- a/dev/tests/js/jasmine/old/shim.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-(function () {
-    'use strict';
-
-    var Ap = Array.prototype,
-        slice = Ap.slice,
-        Fp = Function.prototype;
-
-    if (!Fp.bind) {
-        /**
-         * PhantomJS doesn't support Function.prototype.bind natively, so
-         * polyfill it whenever this module is required.
-         *
-         * @param  {*} context
-         * @return {Function}
-         */
-        Fp.bind = function (context) {
-            var func = this,
-                args = slice.call(arguments, 1);
-                
-            function bound() {
-                var invokedAsConstructor = func.prototype && (this instanceof func);
-
-                return func.apply(
-                    // Ignore the context parameter when invoking the bound function
-                    // as a constructor. Note that this includes not only constructor
-                    // invocations using the new keyword but also calls to base class
-                    // constructors such as BaseClass.call(this, ...) or super(...).
-                    !invokedAsConstructor && context || this,
-                    args.concat(slice.call(arguments))
-                );
-            }
-
-            // The bound function must share the .prototype of the unbound
-            // function so that any object created by one constructor will count
-            // as an instance of both constructors.
-            bound.prototype = func.prototype;
-
-            return bound;
-        };
-    }
-
-})();
diff --git a/dev/tests/js/jasmine/old/spec_runner.js b/dev/tests/js/jasmine/old/spec_runner.js
deleted file mode 100644
index 733cad2f7c4..00000000000
--- a/dev/tests/js/jasmine/old/spec_runner.js
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/**
- * Creates jasmine configuration object
- *
- * @param  {String} type - type of tests
- * @param  {String} dir - area dir
- * @param  {Number} port - port to run on
- * @return {Object}
- */
-function buildConfig(type, dir, port) {
-    'use strict';
-
-    var isLib           = dir === 'lib',
-        requireConfigs  = [
-            '<%= path.spec %>/require.config.js',
-            '<%= path.spec %>/' + type + '/config/global.js'
-        ],
-        specsRoot       = '<%= path.spec %>/' + type,
-        specs           =  specsRoot + (isLib ? '/lib/**/*.js' : '/**/' + dir + '/**/*.js');
-    
-    if (!isLib) {
-        requireConfigs.push('<%= path.spec %>/' + type + '/config/' + dir + '.js');
-    }
-
-    return {
-        src: '<%= path.spec %>/shim.js',
-        options: {
-            host: 'http://localhost:' + port,
-            specs: specs,
-            templateOptions: {
-                requireConfigFile: requireConfigs
-            }
-        }
-    };
-}
-
-module.exports = function (grunt) {
-    'use strict';
-
-    var connect     = require('connect'),
-        logger      = require('morgan'),
-        serveStatic = require('serve-static'),
-        fs          = require('fs'),
-        root;
-
-    root = __dirname
-        .replace('/dev/tests/js/framework', '')
-        .replace('\\dev\\tests\\js\\framework', '');
-
-    grunt.registerMultiTask('specRunner', function () {
-        var app = connect(),
-            options,
-            area,
-            theme,
-            share,
-            middlewares;
-
-        options = this.options({
-            port: 3000,
-            theme: null,
-            areaDir: null,
-            shareDir: null,
-            enableLogs: false,
-            middleware: null
-        });
-
-        area    = options.areaDir;
-        share   = options.shareDir;
-        theme   = options.theme;
-
-        if (options.enableLogs) {
-            app.use(logger('dev'));
-        }
-
-        app.use(function (req, res, next) {
-            var url     = req.url,
-                match   = url.match(/^\/([A-Z][^\/]+)_(\w+)\/(.+)$/),
-                vendor,
-                module,
-                path,
-                getModuleUrl,
-                getThemeUrl;
-
-            /**
-             * Returns path to theme root folder
-             *
-             * @return {String}
-             */
-            function themeRoot() {
-                return [
-                    '/app/design',
-                    area,
-                    vendor,
-                    theme
-                ].join('/');
-            }
-
-            /**
-             * Based on 'thematic' parameter, returnes either path to theme's lib,
-             *     or 'lib/web'.
-             *
-             * @param  {Boolean} thematic
-             * @return {String}
-             */
-            function lib(thematic) {
-                return thematic ? themeRoot() + '/web' : '/lib/web';
-            }
-
-            if (match !== null) {
-                vendor  = match[1];
-                module  = match[2];
-                path    = match[3];
-
-                /**
-                 * Assembles modular path. If 'shared' flag provided and is truthy,
-                 *     will use share dir instead of area one.
-                 *
-                 * @param  {Boolean} shared
-                 * @return {String}
-                 */
-                getModuleUrl = function (shared) {
-                    return [
-                        '/app/code',
-                        vendor,
-                        module,
-                        'view',
-                        !!shared ? share : area,
-                        'web',
-                        path
-                    ].join('/');
-                };
-
-                /**
-                 * Assembles theme modular path.
-                 *
-                 * @return {String}
-                 */
-                getThemeUrl = function () {
-                    return [
-                        themeRoot(),
-                        vendor + '_' + module,
-                        'web',
-                        path
-                    ].join('/');
-                };
-
-                url = exists(url = getThemeUrl()) ?
-                    url :
-                    exists(url = getModuleUrl()) ?
-                        url : getModuleUrl(true);
-
-            } else if (canModify(url)) {
-                url = (exists(url = lib(true)) ? url : lib()) + req.url;
-            }
-
-            req.url = url;
-
-            next();
-        });
-
-        if (options.middleware && typeof options.middleware === 'function') {
-            middlewares = options.middleware(connect, options);
-
-            if (Array.isArray(middlewares)) {
-                middlewares.forEach(function (middleware) {
-                    app.use(middleware);
-                });
-            }
-        }
-
-        app.use(serveStatic(root));
-
-        app.listen(options.port);
-    });
-
-    /**
-     * Defines if passed file path exists
-     *
-     * @param  {String} path
-     * @return {Boolean}
-     */
-    function exists(path) {
-        return fs.existsSync(root + path);
-    }
-
-    /**
-     * Restricts url's which lead to '/_SpecRunner.html', '/dev/tests' or '.grunt' folders from being modified
-     *
-     * @param  {String} url
-     * @return {Boolean}
-     */
-    function canModify(url) {
-        return url.match(/^\/(\.grunt)|(dev\/tests)|(dev\\tests)|(_SpecRunner\.html)/) === null;
-    }
-
-    return { configure: buildConfig };
-};
diff --git a/dev/tests/js/jasmine/old/tools.js b/dev/tests/js/jasmine/old/tools.js
deleted file mode 100644
index 72aacf9bcd7..00000000000
--- a/dev/tests/js/jasmine/old/tools.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Copyright © 2015 Magento. 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);
-            }
-        }
-    };
-});
diff --git a/dev/tests/js/jasmine/require.conf.js b/dev/tests/js/jasmine/require.conf.js
new file mode 100644
index 00000000000..2a96ba34260
--- /dev/null
+++ b/dev/tests/js/jasmine/require.conf.js
@@ -0,0 +1,30 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require.config({
+    baseUrl: './',
+    bundles: {
+        'mage/requirejs/static': [
+            'buildTools',
+            'jsbuild',
+            'statistician',
+            'text'
+        ]
+    },
+    paths: {
+        'tests': 'dev/tests/js/jasmine'
+    },
+    config: {
+        jsbuild: {
+            'dev/tests/js/jasmine/assets/jsbuild/local.js': 'define([], function () {\'use strict\'; return \'internal module\'; });'
+        },
+        text: {
+            'dev/tests/js/jasmine/assets/text/local.html': '<span>Local Template</span>'
+        }
+    },
+    deps: [
+        'mage/requirejs/static'
+    ]
+});
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/old/integration/Magento/Msrp/frontend/js/msrp.js b/dev/tests/js/jasmine/tests/app/code/Magento/Msrp/frontend/js/msrp.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/Magento/Msrp/frontend/js/msrp.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Msrp/frontend/js/msrp.test.js
diff --git a/dev/tests/js/jasmine/old/integration/Magento/PageCache/frontend/js/pageCache.js b/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/Magento/PageCache/frontend/js/pageCache.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js
diff --git a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/Magento_Ui/lib/events.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
similarity index 100%
rename from dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/Magento_Ui/lib/events.test.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
diff --git a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/Magento_Ui/lib/ko/bind/datepicker.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js
similarity index 100%
rename from dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/Magento_Ui/lib/ko/bind/datepicker.test.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js
diff --git a/dev/tests/js/jasmine/old/integration/lib/mage/apply.js b/dev/tests/js/jasmine/tests/lib/mage/apply.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/lib/mage/apply.js
rename to dev/tests/js/jasmine/tests/lib/mage/apply.test.js
diff --git a/dev/tests/js/jasmine/old/integration/lib/mage/requirejs/static-jsbuild.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/static-jsbuild.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/lib/mage/requirejs/static-jsbuild.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/static-jsbuild.test.js
diff --git a/dev/tests/js/jasmine/old/integration/lib/mage/requirejs/static-text.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/static-text.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/lib/mage/requirejs/static-text.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/static-text.test.js
diff --git a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/mage/requirejs/statistician.test.js b/dev/tests/js/jasmine/tests/lib/mage/requirejs/statistician.test.js
similarity index 100%
rename from dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/mage/requirejs/statistician.test.js
rename to dev/tests/js/jasmine/tests/lib/mage/requirejs/statistician.test.js
diff --git a/dev/tests/js/jasmine/old/integration/lib/mage/scripts.js b/dev/tests/js/jasmine/tests/lib/mage/scripts.test.js
similarity index 100%
rename from dev/tests/js/jasmine/old/integration/lib/mage/scripts.js
rename to dev/tests/js/jasmine/tests/lib/mage/scripts.test.js
diff --git a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/mage/template.test.js b/dev/tests/js/jasmine/tests/lib/mage/template.test.js
similarity index 100%
rename from dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/mage/template.test.js
rename to dev/tests/js/jasmine/tests/lib/mage/template.test.js
diff --git a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/require.config.js b/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/require.config.js
deleted file mode 100644
index 8a9ec3cc79d..00000000000
--- a/dev/tests/js/jasmine/testsuite/adminhtml/Magento/backend/require.config.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-'use strict';
-
-require.config({
-    paths: {
-        'jquery/ui': 'jquery/jquery-ui-1.9.2',
-        'ko': 'ko/ko'
-    },
-    shim: {
-        'jquery/ui': ['jquery']
-    },
-    bundles: {
-        'mage/requirejs/static': [
-            'buildTools'
-        ]
-    },
-    deps: [
-        'mage/requirejs/static'
-    ]
-});
\ No newline at end of file
diff --git a/dev/tools/grunt/configs/connect.js b/dev/tools/grunt/configs/connect.js
index 361bb58ffd4..62007a5bec9 100644
--- a/dev/tools/grunt/configs/connect.js
+++ b/dev/tools/grunt/configs/connect.js
@@ -16,7 +16,8 @@ var serveStatic = require('serve-static'),
 ignoredPaths = [
     /^\/_SpecRunner.html/,
     /^\/dev\/tests/,
-    /^\/.grunt/
+    /^\/.grunt/,
+    /^\/pub\/static/
 ];
 
 function serveAsIs(path) {
@@ -47,6 +48,9 @@ tasks = {};
 _.each(themes, function (config, theme) {
     tasks[theme] = {
         options: {
+            /**
+             * To debug in browser, add "keepalive" option and launch "http://localhost:%PORT%/_SpecRunner.html"
+             */
             base: 'pub/static/' + config.area + '/' + config.name + '/' + config.locale,
             port: port++,
             middleware: middleware
diff --git a/dev/tools/grunt/configs/jasmine.js b/dev/tools/grunt/configs/jasmine.js
index c6960b631c9..b4d6e6f6b5c 100644
--- a/dev/tools/grunt/configs/jasmine.js
+++ b/dev/tools/grunt/configs/jasmine.js
@@ -23,16 +23,29 @@ themes = require('./themes');
 tasks = {};
 
 _.each(themes, function (config, theme) {
-    var requireJsConfig = root + '/testsuite/' + config.area + '/' + config.name + '/require.config.js',
-        specs;
+    var requireJsConfigs,
+        specs,
+        area = config.area,
+        vendorThemePath = config.name;
+
+    requireJsConfigs = [
+        'pub/static/_requirejs/' + area + '/' + vendorThemePath + '/' + config.locale + '/requirejs-config.js',
+        root + '/require.conf.js',
+        root + '/tests/lib/**/*.conf.js',
+        root + '/tests/app/code/**/base/**/*.conf.js',
+        root + '/tests/app/code/**/' + area + '/**/*.conf.js',
+        root + '/tests/app/design/' + area + '/' + vendorThemePath + '/**/*.conf.js'
+    ];
 
     specs = [
-        root + '/testsuite/' + config.area + '/' + config.name + '/**/*.test.js',
-        '!' + requireJsConfig
+        root + '/tests/lib/**/*.test.js',
+        root + '/tests/app/code/**/base/**/*.test.js',
+        root + '/tests/app/code/**/' + area + '/**/*.test.js',
+        root + '/tests/app/design/' + area + '/' + vendorThemePath + '/' + theme + '/**/*.test.js'
     ];
 
     tasks[theme] = {
-        src: requireJsConfig,
+        src: requireJsConfigs,
         options: {
             host: host + ':' + port++,
             template: root + '/spec_runner.html',
-- 
GitLab