From 2fff734b30e7e310ae2a98f1bf0687b47edf6df4 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com>
Date: Thu, 21 Dec 2017 20:02:17 +0200
Subject: [PATCH] magento/magento2#12342: JSTestDriver removal - Added
 tabs.test.js and removed JsTestDriver equivalent.

---
 .../testsuite/mage/tabs/index.html            |  27 ---
 .../testsuite/mage/tabs/tabs-test.js          | 203 ------------------
 .../JsTestDriver/testsuite/mage/tabs/tabs.js  | 124 -----------
 .../js/jasmine/assets/lib/web/mage/tabs.html  |   8 +
 .../js/jasmine/tests/lib/mage/tabs.test.js    | 119 ++++++++++
 5 files changed, 127 insertions(+), 354 deletions(-)
 delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html
 delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
 delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js
 create mode 100644 dev/tests/js/jasmine/assets/lib/web/mage/tabs.html
 create mode 100644 dev/tests/js/jasmine/tests/lib/mage/tabs.test.js

diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html
deleted file mode 100644
index 30c29e38cc1..00000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-/**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>Tabs Widget: QUnit Tests </title>
-    <base href="../../../"/>
-    <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script type="text/javascript" src="../../../pub/lib/jquery.js"></script>
-    <script type="text/javascript" src="../../../pub/lib/jquery/jquery-ui.js"></script>
-    <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
-    <script type="text/javascript" src="../../../pub/lib/mage/tabs.js"></script>
-    <script type="text/javascript" src="../../../pub/lib/mage/collapsible.js"></script>
-    <script type="text/javascript" src="testsuite/mage/tabs/tabs.js"></script>
-</head>
-<body>
-<div id="qunit"></div>
-<div id="qunit-fixture">
-</div>
-</body>
-</html>
diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
deleted file mode 100644
index 7129357159f..00000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
-TabsTest = TestCase('TabsTest');
-TabsTest.prototype.testInit = function() {
-    /*:DOC += <div id="tabs"></div>*/
-    var tabs = jQuery('#tabs').tabs();
-    assertTrue(tabs.is(':mage-tabs'));
-};
-
-TabsTest.prototype.testCreate = function() {
-    /*:DOC += <div id="tabs"><ul>
-        <li>
-            <a href="#tab1_content" id="tab1"></a>
-            <div id="tab1_content"></div>
-        </li>
-     <li>
-        <a href="#tab2_content" id="tab2"></a>
-        <div id="tab2_content"></div>
-     </li>
-    </ul></div>*/
-    var tabs = jQuery('#tabs').tabs({active: 'tab2'});
-    assertEquals(tabs.tabs('option', 'active'), tabs.data("tabs").anchors.index(jQuery('#tab2')));
-};
-
-TabsTest.prototype.testActiveAnchor = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-            <a href="#tab1_content" id="tab1"></a>
-            <div id="tab1_content"></div>
-         </li>
-         <li>
-            <a href="#tab2_content" id="tab2"></a>
-            <div id="tab2_content"></div>
-         </li>
-     </ul></div>*/
-    var tabs = jQuery('#tabs').tabs({active: 'tab2'});
-    assertTrue(tabs.tabs('activeAnchor').is(tabs.data("tabs").anchors.eq(tabs.tabs('option', 'active'))));
-};
-
-TabsTest.prototype.testGetTabIndex = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="#tab1_content" id="tab1"></a>
-             <div id="tab1_content"></div>
-         </li>
-         <li>
-             <a href="#tab2_content" id="tab2"></a>
-             <div id="tab2_content"></div>
-         </li>
-     </ul></div>*/
-    var tabs = jQuery('#tabs').tabs();
-    assertEquals(0, tabs.data("tabs")._getTabIndex('tab1'));
-    assertEquals(1, tabs.data("tabs")._getTabIndex('tab2'));
-};
-
-TabsTest.prototype.testGetPanelForTab = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="#tab1_content" id="tab1"></a>
-         </li>
-     </ul></div>
-     <div id="destination">
-        <div id="tab1_content"></div>
-     </div>*/
-    var tabs = jQuery('#tabs').tabs({destination: '#destination'});
-    assertTrue(jQuery(tabs.data("tabs")._getPanelForTab(jQuery('#tab1').closest('li'))).is('#tab1_content'));
-};
-
-TabsTest.prototype.testMovePanelsInDestination = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-            <a href="#tab1_content" id="tab1"></a>
-            <div id="tab1_content"></div>
-         </li>
-     </ul></div>
-     <div id="destination">
-     </div>*/
-    var tabs = jQuery('#tabs').tabs({destination: '#destination'});
-    var panel = jQuery('#tab1_content');
-    tabs.append(panel);
-    assertTrue(panel.parents('#tabs').length > 0);
-    assertEquals(panel.parents(tabs.tabs('option', 'destination')).length, 0);
-
-    tabs.data("tabs")._movePanelsInDestination(panel);
-    assertEquals(panel.parents('#tabs').length, 0);
-    assertTrue(panel.parents(tabs.tabs('option', 'destination')).length > 0);
-
-    tabs.tabs('option', 'destination', null);
-    tabs.append(panel);
-    assertTrue(panel.parents('#tabs').length > 0);
-
-    tabs.data("tabs")._movePanelsInDestination(panel);
-    assertTrue(panel.parents('#tabs').length > 0);
-};
-
-TabsTest.prototype.testAjaxLoad = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="www.site.com" id="tab1">Tab 1</a>
-             <div id="tab1_content"></div>
-         </li>
-     </ul></div>
-     */
-    var tabs = jQuery('#tabs').tabs(),
-        ui = {
-            tab: jQuery('#tab1'),
-            panel: jQuery('#tab1_content')
-        };
-    tabs.tabs('option', 'load')({}, ui);
-    assertEquals(jQuery('#tab1').attr('href'), '#tab1_content');
-};
-
-TabsTest.prototype.testOnContentChange = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="www.site.com" id="tab1">Tab 1</a>
-             <div id="tab1_content"></div>
-         </li>
-     </ul></div>
-     */
-    var eventMock = {
-            data: {
-                index: 0
-            }
-        },
-        tabs = jQuery('#tabs').tabs();
-
-    tabs.data("tabs")._onContentChange(eventMock);
-    assertTrue(jQuery('#tab1').hasClass('_changed'));
-};
-
-TabsTest.prototype.testOnFocus = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="#tab1_content" id="tab1"></a>
-             <div id="tab1_content"></div>
-         </li>
-         <li>
-             <a href="#tab2_content" id="tab2"></a>
-             <div id="tab2_content"><input /></div>
-         </li>
-     </ul></div>
-     */
-    var eventMock = {
-            data: {
-                index: 1
-            }
-        },
-        tabs = jQuery('#tabs').tabs();
-
-    assertNotEquals(tabs.tabs('option', '_active'), eventMock.data.index);
-
-    tabs.data("tabs")._onFocus(eventMock);
-    assertEquals(tabs.tabs('option', '_active'), eventMock.data.index);
-};
-
-TabsTest.prototype.testOnBeforeSubmit = function() {
-    /*:DOC += <div id="tabs"><ul>
-         <li>
-             <a href="#tab1_content" id="tab1"></a>
-             <div id="tab1_content"></div>
-         </li>
-     </ul></div>
-     */
-    var tabs = jQuery('#tabs').tabs({active: 'tab1'}),
-        data= {},
-        testData = {
-            action: {
-                args: {
-                    tab: 'tab1'
-                }
-            }
-        },
-        testDataTabArgument = {
-            action: {
-                args: {
-                    testtab: 'tab1'
-                }
-            }
-        },
-        tabPrefix = 'test-',
-        tabIdArgument = 'testtab';
-
-    tabs.data("tabs")._onBeforeSubmit({}, data);
-    assertEquals(data, testData);
-    data = {};
-
-    jQuery('#tab1').prop('id', 'test-tab1');
-    tabs.tabs('option', 'tabsBlockPrefix', tabPrefix);
-    tabs.data("tabs")._onBeforeSubmit({}, data);
-    assertEquals(data, testData);
-    tabs.tabs('option', 'tabsBlockPrefix', null);
-    jQuery('#test-tab1').prop('id', 'tab1');
-    data = {};
-
-    tabs.tabs('option', 'tabIdArgument', tabIdArgument);
-    tabs.data("tabs")._onBeforeSubmit({}, data);
-    assertEquals(data, testDataTabArgument);
-};
-
-
diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js
deleted file mode 100644
index 582c55da344..00000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * @category    mage.js
- * @package     test
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-/*
-
- */
-test( "Initialization", function() {
-    expect(2);
-    var tabs = $("<div></div>");
-    tabs.tabs();
-    ok( tabs.is(':mage-tabs'), "widget instantiated" );
-    tabs.tabs('destroy');
-    ok( !tabs.is(':mage-tabs'), "widget destroyed" );
-});
-
-test( "Collapsible instantiation", function() {
-    expect(2);
-    var tabs = $("<div></div>");
-    var title = $("<div></div>").attr("data-role","collapsible");
-    title.appendTo(tabs);
-    tabs.tabs();
-    ok( title.is(':mage-collapsible'), "widget instantiated" );
-    tabs.tabs('destroy');
-    ok( !title.is(':mage-collapsible'), "widget destroyed" );
-});
-
-test( "Tabs behavior - closing others tabs when one gets activated", function() {
-    expect(4);
-    var tabs = $('<div></div>');
-    var title1 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content1 = $('<div data-role="content"></div>').appendTo(tabs);
-    var title2 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content2 = $('<div data-role="content"></div>').appendTo(tabs);
-    tabs.appendTo("body");
-    tabs.tabs();
-    ok( content1.is(':visible'), "content visible" );
-    ok( content2.is(':hidden'), "content hidden" );
-    title2.trigger('click');
-    ok( content1.is(':hidden'), "content hidden" );
-    ok( content2.is(':visible'), "content visible" );
-    tabs.tabs('destroy');
-});
-
-test( "Testing enable,disable,activate,deactivate options", function() {
-    expect(6);
-    var tabs = $('<div></div>');
-    var title = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content = $('<div data-role="content"></div>').appendTo(tabs);
-    tabs.appendTo("body");
-    tabs.tabs();
-    ok( content.is(':visible'), "content visible" );
-    tabs.tabs("deactivate",0);
-    ok( content.is(':hidden'), "content hidden" );
-    tabs.tabs("activate",0);
-    ok( content.is(':visible'), "content visible" );
-    tabs.tabs("disable",0);
-    ok( content.is(':hidden'), "content hidden" );
-    title.trigger("click");
-    ok( content.is(':hidden'), "content hidden" );
-    tabs.tabs("enable",0);
-    title.trigger("click");
-    ok( content.is(':visible'), "content visible" );
-    tabs.tabs('destroy');
-});
-
-asyncTest( "Keyboard support for tabs view", function() {
-
-    expect( 5 );
-    var tabs = $('<div></div>');
-    var title1 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content1 = $('<div data-role="content"></div>').appendTo(tabs);
-    var title2 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content2 = $('<div data-role="content"></div>').appendTo(tabs);
-    tabs.appendTo("body");
-    tabs.tabs();
-
-    title1.on("focus",function(ev){
-        ok(content1.is(':visible'), "Content is expanded");
-        title1.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.RIGHT } ));
-        ok(content2.is(':visible'), "Content is expanded");
-        ok(content1.is(':hidden'), "Content is collapsed");
-        title2.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.LEFT } ));
-        ok(content1.is(':visible'), "Content is expanded");
-        ok(content2.is(':hidden'), "Content is collapsed");
-        tabs.tabs('destroy');
-        start();
-    } );
-
-    setTimeout(function(){
-        title1.focus();
-    },10);
-});
-
-asyncTest( "Keyboard support for accordion view", function() {
-
-    expect( 5 );
-    var tabs = $('<div></div>');
-    var title1 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content1 = $('<div data-role="content"></div>').appendTo(tabs);
-    var title2 = $('<div data-role="collapsible"></div>').appendTo(tabs);
-    var content2 = $('<div data-role="content"></div>').appendTo(tabs);
-    tabs.appendTo("body");
-    tabs.tabs({openOnFocus:false});
-
-    title1.on("focus",function(ev){
-        ok(content1.is(':visible'), "Content is expanded");
-        title1.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.RIGHT } ));
-        ok(content1.is(':visible'), "Content is expanded");
-        ok(content2.is(':hidden'), "Content is collapsed");
-        title2.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } ));
-        ok(content2.is(':visible'), "Content is expanded");
-        ok(content1.is(':hidden'), "Content is collapsed");
-        tabs.tabs('destroy');
-        start();
-    } );
-
-    setTimeout(function(){
-        title1.focus();
-    },10);
-});
diff --git a/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html b/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html
new file mode 100644
index 00000000000..dd4d665ca18
--- /dev/null
+++ b/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html
@@ -0,0 +1,8 @@
+<div id="tabs">
+    <div id="title1" data-role="collapsible">
+    </div>
+    <div id="content1" data-role="content"></div>
+    <div id="title2" data-role="collapsible">
+    </div>
+    <div id="content2" data-role="content"></div>
+</div>
\ No newline at end of file
diff --git a/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js
new file mode 100644
index 00000000000..061563f8a0e
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js
@@ -0,0 +1,119 @@
+/**
+ * Copyright © Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/* eslint-disable max-nested-callbacks */
+define([
+    'jquery',
+    'jquery/ui',
+    'mage/tabs',
+    'text!tests/assets/lib/web/mage/tabs.html'
+], function ($, ui, tabs, tabsTmpl) {
+    'use strict';
+
+    describe('mage/tabs', function () {
+        var tabsSelector = '#tabs';
+
+        beforeEach(function () {
+            var $tabs = $(tabsTmpl);
+
+            $('body').append($tabs);
+        });
+
+        afterEach(function () {
+            $(tabsSelector).remove();
+            $(tabsSelector).tabs('destroy');
+        });
+
+        it('Check tabs inited', function () {
+            var $tabs = $(tabsSelector).tabs();
+
+            expect($tabs.is(':mage-tabs')).toBe(true);
+        });
+
+        it('Check tabs collapsible inited', function () {
+            var $title1 = $('#title1'),
+                $title2 = $('#title2');
+
+            $(tabsSelector).tabs();
+
+            expect($title1.is(':mage-collapsible')).toBe(true);
+            expect($title2.is(':mage-collapsible')).toBe(true);
+        });
+
+        it('Check tabs active', function () {
+            var $content1 = $('#content1'),
+                $content2 = $('#content2');
+
+            $(tabsSelector).tabs({
+                active: 1
+            });
+
+            expect($content1.is(':hidden')).toBe(true);
+            expect($content2.is(':visible')).toBe(true);
+        });
+
+        it('Check tabs closing others tabs when one gets activated', function () {
+            var $title2 = $('#title2'),
+                $content1 = $('#content1'),
+                $content2 = $('#content2');
+
+            $(tabsSelector).tabs();
+
+            expect($content1.is(':visible')).toBe(true);
+            expect($content2.is(':hidden')).toBe(true);
+
+            $title2.trigger('click');
+
+            expect($content1.is(':hidden')).toBe(true);
+            expect($content2.is(':visible')).toBe(true);
+        });
+
+        it('Check tabs enable,disable,activate,deactivate options', function () {
+            var $title1 = $('#title1'),
+                $content1 = $('#content1'),
+                $tabs = $(tabsSelector).tabs();
+
+            expect($content1.is(':visible')).toBe(true);
+            $tabs.tabs('deactivate', 0);
+            expect($content1.is(':hidden')).toBe(true);
+            $tabs.tabs('activate', 0);
+            expect($content1.is(':visible')).toBe(true);
+            $tabs.tabs('disable', 0);
+            expect($content1.is(':hidden')).toBe(true);
+            $title1.trigger('click');
+            expect($content1.is(':hidden')).toBe(true);
+            $tabs.tabs('enable', 0);
+            expect($content1.is(':visible')).toBe(true);
+            $title1.trigger('click');
+            expect($content1.is(':visible')).toBe(true);
+        });
+
+        it('Check tabs keyboard support', function (done) {
+            var $title1 = $('#title1'),
+                $title2 = $('#title2'),
+                $content1 = $('#content1'),
+                $content2 = $('#content2');
+
+            $(tabsSelector).tabs();
+
+            $title1.one('focus', function () {
+                expect($content1.is(':visible')).toBe(true);
+                $title1.trigger($.Event('keydown', {
+                    keyCode: $.ui.keyCode.RIGHT
+                }));
+                expect($content2.is(':visible')).toBe(true);
+                expect($content1.is(':hidden')).toBe(true);
+                $title2.trigger($.Event('keydown', {
+                    keyCode: $.ui.keyCode.LEFT
+                }));
+                expect($content1.is(':visible')).toBe(true);
+                expect($content2.is(':hidden')).toBe(true);
+                done();
+            });
+
+            $title1.trigger('focus');
+        });
+    });
+});
-- 
GitLab