From 2abaf8c50a8a8b72b5c9045fb816dd5c3ec59ea5 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Tue, 21 Nov 2017 17:36:16 +0100 Subject: [PATCH 01/32] Added translate.test.js for Jasmine compatibility unit testing. Removed transtale-test.js from jsTestDriver suite. --- .../mage/translate/translate-test.js | 47 ------------------- .../jasmine/tests/lib/mage/translate.test.js | 45 ++++++++++++++++++ 2 files changed, 45 insertions(+), 47 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/translate.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js deleted file mode 100644 index a9bbc7fb10d2d..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TranslateTest = TestCase('TranslateTest'); -TranslateTest.prototype.testTranslateExist = function() { - assertNotUndefined(jQuery.mage.translate); -}; -TranslateTest.prototype.testTranslationParametersOneArgument = function() { - jQuery.mage.translate.add('Hello World!'); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersArray = function() { - jQuery.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersObject = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals( - translation['Hello World!'], - jQuery.mage.translate.translate('Hello World!')); - - translation = { - 'Hello World!': 'Hallo Welt!', - 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' - }; - jQuery.mage.translate.add(translation); - jQuery.each(translation, function(key) { - assertEquals(translation[key], jQuery.mage.translate.translate(key)); - }); -}; -TranslateTest.prototype.testTranslationParametersTwoArguments = function() { - jQuery.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); - assertEquals( - 'Bonjour tout le monde!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationAlias = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals(translation['Hello World!'], jQuery.mage.__('Hello World!')); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js new file mode 100644 index 0000000000000..10b4e77f3e315 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js @@ -0,0 +1,45 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'mage/translate' +], function ($) { + 'use strict'; + + describe('Test for mage/translate jQuery plugin', function () { + it('works with one string as parameter', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one array as parameter', function () { + $.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one object as parameter', function () { + var translation = {'Hello World!': 'Bonjour tout le monde!'}; + $.mage.translate.add(translation); + expect(translation['Hello World!']).toEqual($.mage.translate.translate('Hello World!')); + + translation = { + 'Hello World!': 'Hallo Welt!', + 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' + }; + + $.mage.translate.add(translation); + $.each(translation, function (key) { + expect(translation[key]).toEqual($.mage.translate.translate(key)); + }); + }); + it('works with two string as parameter', function () { + $.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); + expect('Bonjour tout le monde!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with translation alias __', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.__('Hello World!')); + }); + }); + +}); \ No newline at end of file From 16916212d3815d33dcd601eb72d8408099a8c287 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 16:59:22 +0100 Subject: [PATCH 02/32] Fix translate.test to be eslint friendly --- dev/tests/js/jasmine/tests/lib/mage/translate.test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js index 10b4e77f3e315..c87cfa227c1aa 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +/* eslint-disable max-nested-callbacks */ define([ 'jquery', 'mage/translate' @@ -18,7 +19,10 @@ define([ expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); }); it('works with one object as parameter', function () { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; + var translation = { + 'Hello World!': 'Bonjour tout le monde!' + }; + $.mage.translate.add(translation); expect(translation['Hello World!']).toEqual($.mage.translate.translate('Hello World!')); @@ -42,4 +46,4 @@ define([ }); }); -}); \ No newline at end of file +}); From ea56695cb6b5e39f9dfd86302a4daa41f5dd31da Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 17:50:00 +0100 Subject: [PATCH 03/32] Added accordion.test.js for Jasmine testing. Removed accordion.js and index.html for jsTestDriver test. --- .../testsuite/mage/accordion/accordion.js | 57 ------------- .../testsuite/mage/accordion/index.html | 31 ------- .../jasmine/tests/lib/mage/accordion.test.js | 81 +++++++++++++++++++ 3 files changed, 81 insertions(+), 88 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html create mode 100644 dev/tests/js/jasmine/tests/lib/mage/accordion.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js deleted file mode 100644 index 562c5c096b654..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js +++ /dev/null @@ -1,57 +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 accordion = $("
"); - accordion.accordion(); - ok( accordion.is(':mage-accordion'), "widget instantiated" ); - accordion.accordion('destroy'); - ok( !accordion.is(':mage-accordion'), "widget destroyed" ); -}); - - - -test( "One-collapsible element", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion(); - 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" ); - accordion.accordion('destroy'); - -}); - -test( "Multi-collapsible elements", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion({multipleCollapsible:true}); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':hidden'), "content hidden" ); - title2.trigger('click'); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':visible'), "content visible" ); - accordion.accordion('destroy'); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html deleted file mode 100644 index 093284c6f4fa8..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Accordion Widget: QUnit Tests - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js new file mode 100644 index 0000000000000..a35367946349a --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -0,0 +1,81 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'mage/accordion' +], function ($) { + 'use strict'; + + describe('Test for mage/accordion jQuery plugin', function () { + it('check if accordion can be initialized', function () { + var accordion = $("
"); + + accordion.accordion(); + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + accordion.accordion('destroy'); + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check one-collapsible element accordion', function () { + var accordion = $('
'), + title1 = $('
').appendTo(accordion), + content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo("body"); + + accordion.accordion(); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + title2.trigger('click'); + + expect(content1.is(':hidden')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + title1.trigger('click'); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + accordion.accordion('destroy'); + + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check multi-collapsible element accordion', function () { + var accordion = $('
'); + + $('
').appendTo(accordion); + + var content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo("body"); + + accordion.accordion({ + multipleCollapsible: true + }); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + title2.trigger('click'); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + accordion.accordion('destroy'); + + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + }); +}); From 126a1e30be2b23a03063935d9199725d770d84c2 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 18:20:36 +0100 Subject: [PATCH 04/32] Eslint upgrades. --- .../js/jasmine/tests/lib/mage/accordion.test.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js index a35367946349a..12ca91a4ae002 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -25,7 +25,7 @@ define([ title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); + accordion.appendTo('body'); accordion.accordion(); @@ -49,15 +49,14 @@ define([ expect(accordion.is(':mage-accordion')).toBeFalsy(); }); it('check multi-collapsible element accordion', function () { - var accordion = $('
'); - - $('
').appendTo(accordion); - - var content1 = $('
').appendTo(accordion), + var accordion = $('
'), + content1 = $('
').appendTo(accordion), title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); + $('
').appendTo(accordion); + + accordion.appendTo('body'); accordion.accordion({ multipleCollapsible: true From b3fedbc6ed90ef99f1be17c6d77d2cb0ea50fa74 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 22 Nov 2017 19:53:45 +0200 Subject: [PATCH 05/32] Added decorate.test.js for Jasmine testing. Removed decorate-test.js --- .../testsuite/mage/decorate-test.js | 141 ------------ .../jasmine/tests/lib/mage/decorate.test.js | 202 ++++++++++++++++++ 2 files changed, 202 insertions(+), 141 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/decorate.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js deleted file mode 100644 index 96bad35a17e2e..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -DecoratorTest = TestCase('DecoratorTest'); -DecoratorTest.prototype.testDecoratorList = function () { - /*:DOC +=
    -
  • item1
  • -
  • item2
  • -
  • item3
  • -
  • item4
  • -
- */ - var list = $('#list'); - list.decorate('list'); - assertTrue($(list.find('li')[0]).hasClass('odd')); - assertFalse($(list.find('li')[0]).hasClass('even')); - assertTrue($(list.find('li')[1]).hasClass('even')); - assertFalse($(list.find('li')[1]).hasClass('odd')); - assertTrue($(list.find('li')[2]).hasClass('odd')); - assertFalse($(list.find('li')[2]).hasClass('even')); - assertTrue($(list.find('li')[3]).hasClass('even')); - assertFalse($(list.find('li')[3]).hasClass('odd')); - assertTrue($(list.find('li')[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorGeneral = function () { - /*:DOC +=
-
item1
-
item2
-
item3
-
item4
-
- */ - var itemClass = '.item'; - $(itemClass).decorate('generic'); - assertTrue($($(itemClass)[0]).hasClass('odd')); - assertFalse($($(itemClass)[0]).hasClass('even')); - assertTrue($($(itemClass)[0]).hasClass('first')); - assertFalse($($(itemClass)[0]).hasClass('last')); - - assertFalse($($(itemClass)[1]).hasClass('odd')); - assertTrue($($(itemClass)[1]).hasClass('even')); - assertFalse($($(itemClass)[1]).hasClass('first')); - assertFalse($($(itemClass)[1]).hasClass('last')); - - assertTrue($($(itemClass)[2]).hasClass('odd')); - assertFalse($($(itemClass)[2]).hasClass('even')); - assertFalse($($(itemClass)[2]).hasClass('first')); - assertFalse($($(itemClass)[2]).hasClass('last')); - - assertFalse($($(itemClass)[3]).hasClass('odd')); - assertTrue($($(itemClass)[3]).hasClass('even')); - assertFalse($($(itemClass)[3]).hasClass('first')); - assertTrue($($(itemClass)[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorTable = function (){ - /*:DOC += - - - - - - - - - - - - - - - - - - - - - - -
MonthSavings
Sum$180
January$100
February$80
- */ - var tableId = '#foo'; - $(tableId).decorate('table'); - assertTrue($(tableId).find('thead tr').hasClass('first')); - assertTrue($(tableId).find('thead tr').hasClass('last')); - assertFalse($(tableId).find('thead tr').hasClass('odd')); - assertFalse($(tableId).find('thead tr').hasClass('even')); - - assertTrue($(tableId).find('tfoot tr').hasClass('first')); - assertTrue($(tableId).find('tfoot tr').hasClass('last')); - assertFalse($(tableId).find('tfoot tr').hasClass('odd')); - assertFalse($(tableId).find('tfoot tr').hasClass('even')); - - assertFalse($(tableId).find('tfoot tr td').last().hasClass('first')); - assertTrue($(tableId).find('tfoot tr td').last().hasClass('last')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('odd')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('even')); - - assertTrue($(tableId).find('tbody tr').first().hasClass('first')); - assertTrue($(tableId).find('tbody tr').first().hasClass('odd')); - assertFalse($(tableId).find('tbody tr').first().hasClass('last')); - assertFalse($(tableId).find('tbody tr').first().hasClass('even')); - assertFalse($(tableId).find('tbody tr').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr').last().hasClass('last')); - assertTrue($(tableId).find('tbody tr').last().hasClass('even')); - - assertFalse($(tableId).find('tbody tr td').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr td').last().hasClass('last')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('even')); -}; - -DecoratorTest.prototype.testDecoratorDataList = function () { - /*:DOC +=
-
item
-
item
-
item
-
item
-
- */ - var listId = '#data-list'; - $(listId).decorate('dataList'); - assertTrue($(listId).find('dt').first().hasClass('odd')); - assertFalse($(listId).find('dt').first().hasClass('even')); - assertFalse($(listId).find('dt').first().hasClass('last')); - - assertTrue($(listId).find('dt').last().hasClass('even')); - assertFalse($(listId).find('dt').last().hasClass('odd')); - assertTrue($(listId).find('dt').last().hasClass('last')); - - assertTrue($(listId).find('dd').first().hasClass('odd')); - assertFalse($(listId).find('dd').first().hasClass('even')); - assertFalse($(listId).find('dd').first().hasClass('last')); - - assertTrue($(listId).find('dd').last().hasClass('even')); - assertFalse($(listId).find('dd').last().hasClass('odd')); - assertTrue($(listId).find('dd').last().hasClass('last')); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js new file mode 100644 index 0000000000000..9b488c417674d --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js @@ -0,0 +1,202 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'mage/decorate', + 'jquery' +], function (decorate, $) { + 'use strict'; + + describe('mage/decorate', function () { + describe('"list" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('list'); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + }); + + describe('"generic" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic'); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + + it('Check correct class decoration with custom params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + + it('Check correct class decoration with empty items', function () { + var $list = $('#' + listId); + + $list.find('span').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(false); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + }); + + describe('"table" method', function () { + var tableId = 'testTable'; + + beforeEach(function () { + var table = $('' + + '' + + '' + + '' + + '' + + '' + + '>' + + '' + + '
'); + + $('body').append(table); + }); + + afterEach(function () { + $('#' + tableId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $table = $('#' + tableId); + + $table.decorate('table'); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(true); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:last').hasClass('last')).toBe(true); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(true); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(true); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(true); + expect($table.find('tr td:first').hasClass('first')).toBe(false); + }); + + it('Check correct class decoration with custom params', function () { + var $table = $('#' + tableId); + + $table.decorate('table', { + 'tbody': ['first'], + 'tbody tr': ['first'], + 'thead tr': ['first'], + 'tfoot tr': ['last'], + 'tr td': ['first'] + }); + expect($table.find('tbody:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(false); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:last').hasClass('last')).toBe(false); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(false); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(false); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(false); + expect($table.find('tr td:first').hasClass('first')).toBe(true); + }); + }); + + describe('"dataList" method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('dataList'); + expect($list.find('dt:first').hasClass('first')).toBe(false); + expect($list.find('dt:first').hasClass('odd')).toBe(true); + expect($list.find('dt:odd').hasClass('even')).toBe(true); + expect($list.find('dt:even').hasClass('odd')).toBe(true); + expect($list.find('dt:last').hasClass('last')).toBe(true); + expect($list.find('dd:first').hasClass('first')).toBe(false); + expect($list.find('dd:first').hasClass('odd')).toBe(true); + expect($list.find('dd:odd').hasClass('even')).toBe(true); + expect($list.find('dd:even').hasClass('odd')).toBe(true); + expect($list.find('dd:last').hasClass('last')).toBe(true); + }); + }); + + describe('Call decorate with fake method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check error message', function () { + var $list = $('#' + listId); + + spyOn(jQuery, 'error'); + $list.decorate('customMethod'); + + expect(jQuery.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate'); + }); + }); + }); +}); From 0117f8648080ea88848e1614ffbc62cd38cb2f38 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Tue, 21 Nov 2017 17:36:16 +0100 Subject: [PATCH 06/32] Added translate.test.js for Jasmine compatibility unit testing. Removed transtale-test.js from jsTestDriver suite. --- .../mage/translate/translate-test.js | 47 ------------------- .../jasmine/tests/lib/mage/translate.test.js | 45 ++++++++++++++++++ 2 files changed, 45 insertions(+), 47 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/translate.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js deleted file mode 100644 index a9bbc7fb10d2d..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TranslateTest = TestCase('TranslateTest'); -TranslateTest.prototype.testTranslateExist = function() { - assertNotUndefined(jQuery.mage.translate); -}; -TranslateTest.prototype.testTranslationParametersOneArgument = function() { - jQuery.mage.translate.add('Hello World!'); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersArray = function() { - jQuery.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersObject = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals( - translation['Hello World!'], - jQuery.mage.translate.translate('Hello World!')); - - translation = { - 'Hello World!': 'Hallo Welt!', - 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' - }; - jQuery.mage.translate.add(translation); - jQuery.each(translation, function(key) { - assertEquals(translation[key], jQuery.mage.translate.translate(key)); - }); -}; -TranslateTest.prototype.testTranslationParametersTwoArguments = function() { - jQuery.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); - assertEquals( - 'Bonjour tout le monde!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationAlias = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals(translation['Hello World!'], jQuery.mage.__('Hello World!')); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js new file mode 100644 index 0000000000000..10b4e77f3e315 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js @@ -0,0 +1,45 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'mage/translate' +], function ($) { + 'use strict'; + + describe('Test for mage/translate jQuery plugin', function () { + it('works with one string as parameter', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one array as parameter', function () { + $.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one object as parameter', function () { + var translation = {'Hello World!': 'Bonjour tout le monde!'}; + $.mage.translate.add(translation); + expect(translation['Hello World!']).toEqual($.mage.translate.translate('Hello World!')); + + translation = { + 'Hello World!': 'Hallo Welt!', + 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' + }; + + $.mage.translate.add(translation); + $.each(translation, function (key) { + expect(translation[key]).toEqual($.mage.translate.translate(key)); + }); + }); + it('works with two string as parameter', function () { + $.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); + expect('Bonjour tout le monde!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with translation alias __', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.__('Hello World!')); + }); + }); + +}); \ No newline at end of file From 3a907c2be5becbf42ae7cc14cc4d431f7e6a14e4 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 16:59:22 +0100 Subject: [PATCH 07/32] Fix translate.test to be eslint friendly --- dev/tests/js/jasmine/tests/lib/mage/translate.test.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js index 10b4e77f3e315..c87cfa227c1aa 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js @@ -2,6 +2,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +/* eslint-disable max-nested-callbacks */ define([ 'jquery', 'mage/translate' @@ -18,7 +19,10 @@ define([ expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); }); it('works with one object as parameter', function () { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; + var translation = { + 'Hello World!': 'Bonjour tout le monde!' + }; + $.mage.translate.add(translation); expect(translation['Hello World!']).toEqual($.mage.translate.translate('Hello World!')); @@ -42,4 +46,4 @@ define([ }); }); -}); \ No newline at end of file +}); From 821bdaaba4923fa4e6fdc4749ea5c625dcfd0fe0 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 17:50:00 +0100 Subject: [PATCH 08/32] Added accordion.test.js for Jasmine testing. Removed accordion.js and index.html for jsTestDriver test. --- .../testsuite/mage/accordion/accordion.js | 57 ------------- .../testsuite/mage/accordion/index.html | 31 ------- .../jasmine/tests/lib/mage/accordion.test.js | 81 +++++++++++++++++++ 3 files changed, 81 insertions(+), 88 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html create mode 100644 dev/tests/js/jasmine/tests/lib/mage/accordion.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js deleted file mode 100644 index 562c5c096b654..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js +++ /dev/null @@ -1,57 +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 accordion = $("
"); - accordion.accordion(); - ok( accordion.is(':mage-accordion'), "widget instantiated" ); - accordion.accordion('destroy'); - ok( !accordion.is(':mage-accordion'), "widget destroyed" ); -}); - - - -test( "One-collapsible element", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion(); - 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" ); - accordion.accordion('destroy'); - -}); - -test( "Multi-collapsible elements", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion({multipleCollapsible:true}); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':hidden'), "content hidden" ); - title2.trigger('click'); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':visible'), "content visible" ); - accordion.accordion('destroy'); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html deleted file mode 100644 index 093284c6f4fa8..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Accordion Widget: QUnit Tests - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js new file mode 100644 index 0000000000000..a35367946349a --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -0,0 +1,81 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'mage/accordion' +], function ($) { + 'use strict'; + + describe('Test for mage/accordion jQuery plugin', function () { + it('check if accordion can be initialized', function () { + var accordion = $("
"); + + accordion.accordion(); + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + accordion.accordion('destroy'); + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check one-collapsible element accordion', function () { + var accordion = $('
'), + title1 = $('
').appendTo(accordion), + content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo("body"); + + accordion.accordion(); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + title2.trigger('click'); + + expect(content1.is(':hidden')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + title1.trigger('click'); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + accordion.accordion('destroy'); + + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check multi-collapsible element accordion', function () { + var accordion = $('
'); + + $('
').appendTo(accordion); + + var content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo("body"); + + accordion.accordion({ + multipleCollapsible: true + }); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + title2.trigger('click'); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + accordion.accordion('destroy'); + + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + }); +}); From 2846c785b9b9962dfaafd8fdbb81f9d2fe4851a5 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 18:20:36 +0100 Subject: [PATCH 09/32] Eslint upgrades. --- .../js/jasmine/tests/lib/mage/accordion.test.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js index a35367946349a..12ca91a4ae002 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -25,7 +25,7 @@ define([ title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); + accordion.appendTo('body'); accordion.accordion(); @@ -49,15 +49,14 @@ define([ expect(accordion.is(':mage-accordion')).toBeFalsy(); }); it('check multi-collapsible element accordion', function () { - var accordion = $('
'); - - $('
').appendTo(accordion); - - var content1 = $('
').appendTo(accordion), + var accordion = $('
'), + content1 = $('
').appendTo(accordion), title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); + $('
').appendTo(accordion); + + accordion.appendTo('body'); accordion.accordion({ multipleCollapsible: true From f4712cdda55a88ebd2c455cdb7840dae31a3334a Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 19:09:46 +0100 Subject: [PATCH 10/32] Eslint improvements and logical fixes for unit testing. --- .../js/jasmine/tests/lib/mage/accordion.test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js index 12ca91a4ae002..19a54d95cf704 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -10,7 +10,7 @@ define([ describe('Test for mage/accordion jQuery plugin', function () { it('check if accordion can be initialized', function () { - var accordion = $("
"); + var accordion = $('
'); accordion.accordion(); expect(accordion.is(':mage-accordion')).toBeTruthy(); @@ -50,12 +50,11 @@ define([ }); it('check multi-collapsible element accordion', function () { var accordion = $('
'), + title1 = $('
').appendTo(accordion), content1 = $('
').appendTo(accordion), title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - $('
').appendTo(accordion); - accordion.appendTo('body'); accordion.accordion({ @@ -63,17 +62,18 @@ define([ }); expect(accordion.is(':mage-accordion')).toBeTruthy(); - expect(content1.is(':visible')).toBeTruthy(); expect(content2.is(':hidden')).toBeTruthy(); - title2.trigger('click'); + $(title1).trigger('click'); + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + $(title2).trigger('click'); expect(content1.is(':visible')).toBeTruthy(); expect(content2.is(':visible')).toBeTruthy(); accordion.accordion('destroy'); - expect(accordion.is(':mage-accordion')).toBeFalsy(); }); }); From f0a18772bae4a7197fcce729ed33dfa168301731 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 22 Nov 2017 18:53:45 +0100 Subject: [PATCH 11/32] Added decorate.test.js for Jasmine testing. Removed decorate-test.js (cherry picked from commit b3fedbc) --- .../testsuite/mage/decorate-test.js | 141 ------------ .../jasmine/tests/lib/mage/decorate.test.js | 202 ++++++++++++++++++ 2 files changed, 202 insertions(+), 141 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/decorate.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js deleted file mode 100644 index 96bad35a17e2e..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -DecoratorTest = TestCase('DecoratorTest'); -DecoratorTest.prototype.testDecoratorList = function () { - /*:DOC +=
    -
  • item1
  • -
  • item2
  • -
  • item3
  • -
  • item4
  • -
- */ - var list = $('#list'); - list.decorate('list'); - assertTrue($(list.find('li')[0]).hasClass('odd')); - assertFalse($(list.find('li')[0]).hasClass('even')); - assertTrue($(list.find('li')[1]).hasClass('even')); - assertFalse($(list.find('li')[1]).hasClass('odd')); - assertTrue($(list.find('li')[2]).hasClass('odd')); - assertFalse($(list.find('li')[2]).hasClass('even')); - assertTrue($(list.find('li')[3]).hasClass('even')); - assertFalse($(list.find('li')[3]).hasClass('odd')); - assertTrue($(list.find('li')[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorGeneral = function () { - /*:DOC +=
-
item1
-
item2
-
item3
-
item4
-
- */ - var itemClass = '.item'; - $(itemClass).decorate('generic'); - assertTrue($($(itemClass)[0]).hasClass('odd')); - assertFalse($($(itemClass)[0]).hasClass('even')); - assertTrue($($(itemClass)[0]).hasClass('first')); - assertFalse($($(itemClass)[0]).hasClass('last')); - - assertFalse($($(itemClass)[1]).hasClass('odd')); - assertTrue($($(itemClass)[1]).hasClass('even')); - assertFalse($($(itemClass)[1]).hasClass('first')); - assertFalse($($(itemClass)[1]).hasClass('last')); - - assertTrue($($(itemClass)[2]).hasClass('odd')); - assertFalse($($(itemClass)[2]).hasClass('even')); - assertFalse($($(itemClass)[2]).hasClass('first')); - assertFalse($($(itemClass)[2]).hasClass('last')); - - assertFalse($($(itemClass)[3]).hasClass('odd')); - assertTrue($($(itemClass)[3]).hasClass('even')); - assertFalse($($(itemClass)[3]).hasClass('first')); - assertTrue($($(itemClass)[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorTable = function (){ - /*:DOC += - - - - - - - - - - - - - - - - - - - - - - -
MonthSavings
Sum$180
January$100
February$80
- */ - var tableId = '#foo'; - $(tableId).decorate('table'); - assertTrue($(tableId).find('thead tr').hasClass('first')); - assertTrue($(tableId).find('thead tr').hasClass('last')); - assertFalse($(tableId).find('thead tr').hasClass('odd')); - assertFalse($(tableId).find('thead tr').hasClass('even')); - - assertTrue($(tableId).find('tfoot tr').hasClass('first')); - assertTrue($(tableId).find('tfoot tr').hasClass('last')); - assertFalse($(tableId).find('tfoot tr').hasClass('odd')); - assertFalse($(tableId).find('tfoot tr').hasClass('even')); - - assertFalse($(tableId).find('tfoot tr td').last().hasClass('first')); - assertTrue($(tableId).find('tfoot tr td').last().hasClass('last')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('odd')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('even')); - - assertTrue($(tableId).find('tbody tr').first().hasClass('first')); - assertTrue($(tableId).find('tbody tr').first().hasClass('odd')); - assertFalse($(tableId).find('tbody tr').first().hasClass('last')); - assertFalse($(tableId).find('tbody tr').first().hasClass('even')); - assertFalse($(tableId).find('tbody tr').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr').last().hasClass('last')); - assertTrue($(tableId).find('tbody tr').last().hasClass('even')); - - assertFalse($(tableId).find('tbody tr td').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr td').last().hasClass('last')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('even')); -}; - -DecoratorTest.prototype.testDecoratorDataList = function () { - /*:DOC +=
-
item
-
item
-
item
-
item
-
- */ - var listId = '#data-list'; - $(listId).decorate('dataList'); - assertTrue($(listId).find('dt').first().hasClass('odd')); - assertFalse($(listId).find('dt').first().hasClass('even')); - assertFalse($(listId).find('dt').first().hasClass('last')); - - assertTrue($(listId).find('dt').last().hasClass('even')); - assertFalse($(listId).find('dt').last().hasClass('odd')); - assertTrue($(listId).find('dt').last().hasClass('last')); - - assertTrue($(listId).find('dd').first().hasClass('odd')); - assertFalse($(listId).find('dd').first().hasClass('even')); - assertFalse($(listId).find('dd').first().hasClass('last')); - - assertTrue($(listId).find('dd').last().hasClass('even')); - assertFalse($(listId).find('dd').last().hasClass('odd')); - assertTrue($(listId).find('dd').last().hasClass('last')); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js new file mode 100644 index 0000000000000..9b488c417674d --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js @@ -0,0 +1,202 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'mage/decorate', + 'jquery' +], function (decorate, $) { + 'use strict'; + + describe('mage/decorate', function () { + describe('"list" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('list'); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + }); + + describe('"generic" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic'); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + + it('Check correct class decoration with custom params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + + it('Check correct class decoration with empty items', function () { + var $list = $('#' + listId); + + $list.find('span').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(false); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + }); + + describe('"table" method', function () { + var tableId = 'testTable'; + + beforeEach(function () { + var table = $('' + + '' + + '' + + '' + + '' + + '' + + '>' + + '' + + '
'); + + $('body').append(table); + }); + + afterEach(function () { + $('#' + tableId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $table = $('#' + tableId); + + $table.decorate('table'); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(true); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:last').hasClass('last')).toBe(true); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(true); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(true); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(true); + expect($table.find('tr td:first').hasClass('first')).toBe(false); + }); + + it('Check correct class decoration with custom params', function () { + var $table = $('#' + tableId); + + $table.decorate('table', { + 'tbody': ['first'], + 'tbody tr': ['first'], + 'thead tr': ['first'], + 'tfoot tr': ['last'], + 'tr td': ['first'] + }); + expect($table.find('tbody:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(false); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:last').hasClass('last')).toBe(false); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(false); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(false); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(false); + expect($table.find('tr td:first').hasClass('first')).toBe(true); + }); + }); + + describe('"dataList" method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('dataList'); + expect($list.find('dt:first').hasClass('first')).toBe(false); + expect($list.find('dt:first').hasClass('odd')).toBe(true); + expect($list.find('dt:odd').hasClass('even')).toBe(true); + expect($list.find('dt:even').hasClass('odd')).toBe(true); + expect($list.find('dt:last').hasClass('last')).toBe(true); + expect($list.find('dd:first').hasClass('first')).toBe(false); + expect($list.find('dd:first').hasClass('odd')).toBe(true); + expect($list.find('dd:odd').hasClass('even')).toBe(true); + expect($list.find('dd:even').hasClass('odd')).toBe(true); + expect($list.find('dd:last').hasClass('last')).toBe(true); + }); + }); + + describe('Call decorate with fake method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
'); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check error message', function () { + var $list = $('#' + listId); + + spyOn(jQuery, 'error'); + $list.decorate('customMethod'); + + expect(jQuery.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate'); + }); + }); + }); +}); From 64bf208aea55998942fe2035a9679e1f470bed8d Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Wed, 22 Nov 2017 19:26:54 +0100 Subject: [PATCH 12/32] Eslint improvements and logical fixes for unit testing. --- .../js/jasmine/tests/lib/mage/accordion.test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js index 12ca91a4ae002..19a54d95cf704 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -10,7 +10,7 @@ define([ describe('Test for mage/accordion jQuery plugin', function () { it('check if accordion can be initialized', function () { - var accordion = $("
"); + var accordion = $('
'); accordion.accordion(); expect(accordion.is(':mage-accordion')).toBeTruthy(); @@ -50,12 +50,11 @@ define([ }); it('check multi-collapsible element accordion', function () { var accordion = $('
'), + title1 = $('
').appendTo(accordion), content1 = $('
').appendTo(accordion), title2 = $('
').appendTo(accordion), content2 = $('
').appendTo(accordion); - $('
').appendTo(accordion); - accordion.appendTo('body'); accordion.accordion({ @@ -63,17 +62,18 @@ define([ }); expect(accordion.is(':mage-accordion')).toBeTruthy(); - expect(content1.is(':visible')).toBeTruthy(); expect(content2.is(':hidden')).toBeTruthy(); - title2.trigger('click'); + $(title1).trigger('click'); + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + $(title2).trigger('click'); expect(content1.is(':visible')).toBeTruthy(); expect(content2.is(':visible')).toBeTruthy(); accordion.accordion('destroy'); - expect(accordion.is(':mage-accordion')).toBeFalsy(); }); }); From 8595da68070577bea09a342f68711f90e059fe6a Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 22 Nov 2017 21:02:10 +0200 Subject: [PATCH 13/32] Fix decorate.test.js --- dev/tests/js/jasmine/tests/lib/mage/decorate.test.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js index 9b488c417674d..898bcf8b51128 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js @@ -192,10 +192,9 @@ define([ it('Check error message', function () { var $list = $('#' + listId); - spyOn(jQuery, 'error'); + spyOn($, 'error'); $list.decorate('customMethod'); - - expect(jQuery.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate'); + expect($.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate'); }); }); }); From 2adf9e8634b4336002d2bcc39e22ffe0387239d4 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Thu, 23 Nov 2017 17:19:58 +0100 Subject: [PATCH 14/32] Fixed unsafe comparison with a literal. No need to eslint eqeqeq. Fixed enable method. It was not enabling and activating the collapsible. This was detected on Jasmine unit testing. Minor repositioning to this.options.disabled on disable method for consistency purposes with enable method. --- lib/web/mage/collapsible.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/web/mage/collapsible.js b/lib/web/mage/collapsible.js index 0d8cf836c198e..49624fbeb159a 100644 --- a/lib/web/mage/collapsible.js +++ b/lib/web/mage/collapsible.js @@ -243,7 +243,7 @@ define([ }); // For collapsible widget only (not tabs or accordion) - if (this.header.parent().attr('role') != 'presentation') { //eslint-disable-line eqeqeq + if (this.header.parent().attr('role') !== 'presentation') { this.header .parent() .attr('role', 'tablist'); @@ -316,9 +316,9 @@ define([ * Disable. */ disable: function () { + this.options.disabled = true; this._off(this.trigger); this.forceDeactivate(); - this.options.disabled = true; if (this.options.disabledState) { this.element.addClass(this.options.disabledState); @@ -330,12 +330,14 @@ define([ * Enable. */ enable: function () { - this._on(this.trigger, this.events); this.options.disabled = false; + this._on(this.trigger, this.events); + this.forceActivate(); if (this.options.disabledState) { this.element.removeClass(this.options.disabledState); } + this.trigger.attr('tabIndex', 0); }, /** From 9b28fe25ec7da23e5c1e75499e2984e3019289f2 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Thu, 23 Nov 2017 18:13:38 +0100 Subject: [PATCH 15/32] that - this consistency and splat complete function to be Jasmine friendly. --- lib/web/mage/collapsible.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/web/mage/collapsible.js b/lib/web/mage/collapsible.js index 49624fbeb159a..267734605f141 100644 --- a/lib/web/mage/collapsible.js +++ b/lib/web/mage/collapsible.js @@ -519,7 +519,7 @@ define([ that = this; if (url) { - this.xhr = $.get({ + that.xhr = $.get({ url: url, dataType: 'html' }, function () { @@ -535,7 +535,8 @@ define([ setTimeout(function () { that.content.html(response); }, 1); - }).complete(function (jqXHR, status) { + }); + that.xhr.complete(function (jqXHR, status) { setTimeout(function () { if (status === 'abort') { that.content.stop(false, true); From 4127a8c6bc8b0a7fd4e071ea4f2ea42ee92d5622 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Thu, 23 Nov 2017 18:14:49 +0100 Subject: [PATCH 16/32] Added collapsible.test.js and removed JsTestDriver equivalent. --- .../testsuite/mage/collapsible/content.html | 14 - .../testsuite/mage/collapsible/index.html | 31 --- .../mage/collapsible/test-collapsible.js | 180 ------------- .../tests/lib/mage/collapsible.test.js | 247 ++++++++++++++++++ 4 files changed, 247 insertions(+), 225 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html deleted file mode 100644 index e81938dfbeaba..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - -

Test text

- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html deleted file mode 100644 index ccfd4d97f0331..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Unit test - - - - - - - - - - - -
-
-
- - - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js deleted file mode 100644 index 1a22e5a79eb1d..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * @category mage.collapsible - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - Test if the collapsible widget gets initialized when is called and destroy function works - */ -test('initialization & destroy', function() { - expect(2); - var group = $('
'); - group.collapsible(); - ok( group.is(':mage-collapsible'), "widget instantiated" ); - group.collapsible('destroy'); - ok( !group.is(':mage-collapsible'), "widget destroyed" ); -}); - -/* - Test enable, disable, activate, deactivate functions - */ -test('Enable, disable, activate, deactivate methods', function() { - expect(5); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("activate"); - ok(content.is(':visible'), "Content is expanded"); - group.collapsible("disable"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("activate"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("enable"); - group.collapsible("activate"); - ok(content.is(':visible'), "Content is expanded"); - group.collapsible('destroy'); -}); - -/* - Test if the widget gets expanded/collapsed when the title is clicked - */ -test('Collapse and expand', function() { - expect(3); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger("click"); - ok(content.is(':visible'), "Content gets expanded on click title"); - title.trigger("click"); - ok(content.is(':hidden'), "Content gets collapsed on click again"); - group.collapsible('destroy'); -}); - - -/* - Test state Classes - */ -test('State classes', function() { - expect(3); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({openedState:"opened", closedState:"closed", disabledState:"disabled"}); - ok( group.hasClass("closed")); - title.trigger("click"); - ok( group.hasClass("opened")); - group.collapsible("disable"); - ok( group.hasClass("disabled")); - group.collapsible('destroy'); -}); - -/* - Test if icons are added to title when widget gets initialized and are removed when gets destroyed - */ -test('Create & destroy icons', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({icons: {header:"minus",activeHeader:"plus"}}); - ok(title.children("[data-role=icons]").length, "Icons added to title" ); - group.collapsible('destroy'); - ok(!title.children("[data-role=icons]").length, "Icons removed from title" ); -}); - -/* - Test if icon classes are changed when content gets expanded/collapsed - */ -test('Change icons when content gets expanded/collapsed', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({icons: {header:"minus",activeHeader:"plus"}}); - group.collapsible("deactivate"); - var icons = group.collapsible("option","icons"); - ok(title.children("[data-role=icons]").hasClass(icons.header), "When content is collapsed,header has the right class for icons" ); - title.trigger("click"); - ok(title.children("[data-role=icons]").hasClass(icons.activeHeader), "When content is expanded,header has the right class for icons" ); - group.collapsible('destroy'); -}); - - -/* - Test if content gets expanded/collapsed when certain keys are pressed - */ -asyncTest( "keyboard support", function() { - - expect( 5 ); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - - title.on("focus",function(ev){ - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } )); - ok(content.is(':visible'), "Content is expanded"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } )); - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.SPACE } )); - ok(content.is(':visible'), "Content is expanded"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.SPACE } )); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible('destroy'); - start(); - } ); - - setTimeout(function(){ - title.focus(); - },10); - -}); - -/* - Test if content gets updated via Ajax when title is clicked - */ -test('Update content via ajax', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - var ajax = $(''); - title.appendTo(group); - content.appendTo(group); - ajax.appendTo(content); - group.appendTo("body"); - group.collapsible({ajaxContent : true}); - group.collapsible("deactivate"); - ok(!content.children("p").length, "Content has no data"); - title.trigger("click"); - ok(content.children("p"), "Content gets data from content.html"); - group.collapsible('destroy'); -}); - - - diff --git a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js new file mode 100644 index 0000000000000..8bb8cd1cafe78 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js @@ -0,0 +1,247 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ + +define([ + 'jquery', + 'jquery/ui', + 'mage/collapsible' +], function ($) { + 'use strict'; + + describe('Test for mage/collapsible jQuery plugin', function () { + it('check if collapsible can be initialized and destroyed', function () { + var group = $('
'); + + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + describe('Test enable, disable, activate and deactivate methods', function () { + var group = $('
'), + content = $('
').appendTo(group); + + $('
').prependTo(group); + + beforeEach(function () { + group.appendTo('body'); + }); + + afterEach(function () { + group.remove(); + }); + + it('check enable and disable methods', function () { + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('disable'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('enable'); + expect(content.is(':visible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check activate and deactivate methods', function () { + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('activate'); + expect(content.is(':visible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + }); + + it('check if the widget gets expanded/collapsed when the title is clicked', function () { + var group = $('
'), + title = $('
').appendTo(group), + content = $('
').appendTo(group); + + group.appendTo('body'); + + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + + title.trigger('click'); + expect(content.is(':visible')).toBeTruthy(); + + title.trigger('click'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check state classes', function () { + var group = $('
'), + title = $('
').appendTo(group); + + $('
').appendTo(group); + + group.appendTo('body'); + + group.collapsible({ + openedState: 'opened', + closedState: 'closed', + disabledState: 'disabled' + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + expect(group.hasClass('closed')).toBeTruthy(); + + title.trigger('click'); + expect(group.hasClass('opened')).toBeTruthy(); + + group.collapsible('disable'); + expect(group.hasClass('disabled')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check if icons are added to title when initialized and removed when destroyed', function () { + var group = $('
'), + title = $('
').appendTo(group); + + $('
').appendTo(group); + + group.appendTo('body'); + + group.collapsible({ + icons: { + header: 'minus', + activeHeader: 'plus' + } + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + expect(title.children('[data-role=icons]').length).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + expect(title.children('[data-role=icons]').length).toBeFalsy(); + }); + + it('check if icon classes are changed when content gets expanded/collapsed', function () { + var group = $('
'), + title = $('
').appendTo(group), + content = $('
').appendTo(group), + icons; + + group.appendTo('body'); + + group.collapsible({ + icons: { + header: 'minus', + activeHeader: 'plus' + } + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + icons = group.collapsible('option', 'icons'); + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + expect(title.children('[data-role=icons]').hasClass(icons.header)).toBeTruthy(); + + title.trigger('click'); + expect(title.children('[data-role=icons]').hasClass(icons.activeHeader)).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check keyboard support', function () { + var group = $('
'), + title = $('
').appendTo(group), + content = $('
').appendTo(group); + + group.appendTo('body'); + + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + + title.on('focus', function () { + title.trigger($.Event('keydown', { + keyCode: $.ui.keyCode.ENTER + })); + expect(content.is(':visible')).toBeTruthy(); + + title.trigger($.Event('keydown', { + keyCode: $.ui.keyCode.ENTER + })); + expect(content.is(':hidden')).toBeTruthy(); + + title.trigger($.Event('keydown', { + keyCode: $.ui.keyCode.SPACE + })); + expect(content.is(':visible')).toBeTruthy(); + + title.trigger($.Event('keydown', { + keyCode: $.ui.keyCode.SPACE + })); + expect(content.is(':hidden')).toBeTruthy(); + }); + + setTimeout(function () { + title.focus(); + }, 10); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check if content gets updated via Ajax when title is clicked', function () { + var group = $('
'), + title = $('
').appendTo(group), + content = $('
').appendTo(group); + + $('').appendTo(group); + + $.get = jasmine.createSpy().and.callFake(function () { + var d = $.Deferred(); + + d.promise().success = function () { + }; + + d.promise().complete = function () { + }; + + return d.promise(); + }); + + group.appendTo('body'); + + group.collapsible({ + ajaxContent: true + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + expect(content.children('p').length).toBeFalsy(); + + title.trigger('click'); + expect(content.children('p')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + }); +}); From 6366f83500d2a3645d0bc0577201fc655c952abd Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Thu, 23 Nov 2017 20:49:36 +0100 Subject: [PATCH 17/32] jscs:disable jsDoc --- dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js index 8bb8cd1cafe78..fb1518442c87d 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js @@ -3,6 +3,7 @@ * See COPYING.txt for license details. */ /* eslint-disable max-nested-callbacks */ +/* jscs:disable jsDoc */ define([ 'jquery', From c98720f551534b53f2e8f7b475aaac0473a43750 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Fri, 24 Nov 2017 15:12:05 +0100 Subject: [PATCH 18/32] Added dropdown.test.js and removed JsTestDriver equivalent. --- .../testsuite/mage/dropdown/index.html | 30 -- .../testsuite/mage/dropdown/test-dropdown.js | 270 -------------- .../jasmine/tests/lib/mage/dropdown.test.js | 351 ++++++++++++++++++ 3 files changed, 351 insertions(+), 300 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html deleted file mode 100644 index 3d6ed5a7c1d28..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Unit test - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js deleted file mode 100644 index e67c92b3d4018..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js +++ /dev/null @@ -1,270 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - testing if dialog opens when the triggerEvent is triggered - */ -test( "triggerEvent", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - dialog.dropdownDialog({"triggerEvent":"click", "triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown opens when click opener"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerEvent":null, "triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown doesn't open when click opener"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the trigger - */ -test( "triggerClass", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - dialog.dropdownDialog({"triggerTarget":opener,"triggerClass":"active"}); - dialog.dropdownDialog("open"); - ok( opener.hasClass("active"), "Class added to opener when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerEvent":opener, "triggerClass":null}); - dialog.dropdownDialog("open"); - ok( !opener.hasClass("active"), "Class added to opener when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the element which the dialog appends to - */ -test( "parentClass", function() { - expect(2); - var parent = $('
'); - var dialog = $('
'); - - dialog.dropdownDialog({"parentClass":"active","appendTo":parent}); - dialog.dropdownDialog("open"); - ok( parent.hasClass("active"), "Class is added to parent when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"parentClass":null,"appendTo":parent}); - dialog.dropdownDialog("open"); - ok( !parent.hasClass("active"), "No class is added to parent when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the element that becomes dialog - */ -test( "dialogContentClass", function() { - expect(2); - var dialog = $('
'); - - dialog.dropdownDialog({"dialogContentClass":"active"}); - dialog.dropdownDialog("open"); - ok( $('.ui-dialog-content').hasClass("active"), "Class is added to dialog content when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"dialogContentClass": null}); - dialog.dropdownDialog("open"); - ok( !$('.ui-dialog-content').hasClass("active"), "No class is added to dialog content" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if a specified class is added to dialog - */ -test( "defaultDialogClass", function() { - expect(3); - var dialog = $('
'); - - dialog.dropdownDialog({"defaultDialogClass":"custom"}); - ok( $('.ui-dialog').hasClass("custom"), "Class is added to dialog" ); - ok( !$('.ui-dialog').hasClass("mage-dropdown-dialog"), "Default class has been overwritten" ); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({}); - ok( $('.ui-dialog').hasClass("mage-dropdown-dialog"), "Default class hasn't been overwritten" ); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the specified trigger actually opens the dialog - */ -test( "triggerTarget", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - - dialog.dropdownDialog({"triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown opens when click opener"); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerTarget":null}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown doesn't open when click opener"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the dialog gets closed when clicking outside of it - */ -test( "closeOnClickOutside", function() { - expect(2); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnClickOutside":true}); - dialog.dropdownDialog("open"); - outside.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when click outside dropdown"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"closeOnClickOutside":false}); - dialog.dropdownDialog("open"); - outside.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when click outside dropdown"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the dialog gets closed when mouse leaves the dialog area - */ -asyncTest( "closeOnMouseLeave true", function() { - expect(1); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnMouseLeave":true}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when mouseleave the dropdown area"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the dialog gets closed when mouse leaves the dialog area - */ -asyncTest( "closeOnMouseLeave false", function() { - expect(1); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnMouseLeave":false}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when mouseleave the dropdown area"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the dialog gets closed with the specified delay - */ -asyncTest( "timeout", function() { - expect(2); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"timeout":2000}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when mouseleave the dropdown area"); - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when mouseleave the dropdown area, after timeout passed"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the title bar is prevented from being created - */ -test( "createTitileBar", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"createTitleBar":true}); - ok(($(".ui-dialog").find(".ui-dialog-titlebar").length > 0), "Title bar is created"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"createTitleBar":false}); - ok($(".ui-dialog").find(".ui-dialog-titlebar").length <= 0, "Title bar isn't created"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the position function gets disabled - */ -test( "autoPosition", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"autoPosition":false}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("top") === 'auto'), "_position function disabled"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"autoPosition":true}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("top") !== '0px'), "_position function enabled"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the size function gets disabled - */ -test( "autoSize", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"autoSize":true, width:"300"}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("width") === '300px'), "_size function enabled"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"autoSize":false, width:"300"}); - dialog.dropdownDialog("open"); - ok($(".ui-dialog").css("width") !== '300px', "_size function disabled"); - dialog.dropdownDialog( "destroy" ); -}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js new file mode 100644 index 0000000000000..70e608d5bfefd --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js @@ -0,0 +1,351 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ + +define([ + 'jquery', + 'mage/dropdown' +], function ($) { + 'use strict'; + + describe('Test for mage/dropdown jQuery plugin', function () { + it('check if dialog opens when the triggerEvent is triggered', function () { + var opener = $('
'), + dialog = $('
'); + + dialog.dropdownDialog({ + 'triggerEvent': 'click', + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerEvent': null, + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the trigger', function () { + var opener = $('
'), + dialog = $('
'); + + dialog.dropdownDialog({ + 'triggerClass': 'active', + 'triggerTarget': opener + }); + + dialog.dropdownDialog('open'); + expect(opener.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerClass': null, + 'triggerTarget': opener + }); + + dialog.dropdownDialog('open'); + expect(opener.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the element which the dialog appends to', function () { + var parent = $('
'), + dialog = $('
'); + + dialog.dropdownDialog({ + 'parentClass': 'active', + 'appendTo': parent + }); + + dialog.dropdownDialog('open'); + expect(parent.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'parentClass': null, + 'appendTo': parent + }); + + dialog.dropdownDialog('open'); + expect(parent.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the element that becomes dialog', function () { + var dialog = $('
'), + content; + + dialog.dropdownDialog({ + 'dialogContentClass': 'active' + }); + + content = $('.ui-dialog-content'); + dialog.dropdownDialog('open'); + expect(content.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'dialogContentClass': null + }); + + dialog.dropdownDialog('open'); + expect(content.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to dialog', function () { + var dialog = $('
'), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'defaultDialogClass': 'custom' + }); + + ui = $(uiClass); + expect(ui.hasClass('custom')).toBeTruthy(); + expect(ui.hasClass('mage-dropdown-dialog')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({}); + ui = $(uiClass); + expect(ui.hasClass('mage-dropdown-dialog')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the specified trigger actually opens the dialog', function () { + var opener = $('
'), + dialog = $('
'); + + dialog.dropdownDialog({ + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerTarget': null + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the dialog gets closed when clicking outside of it', function () { + var container = $('
'), + outside = $('
').attr('id', 'outside').appendTo(container), + dialog = $('
').attr('id', 'dialog').appendTo(container); + + container.appendTo('body'); + + dialog.dropdownDialog({ + 'closeOnClickOutside': true + }); + + dialog.dropdownDialog('open'); + outside.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'closeOnClickOutside': false + }); + + dialog.dropdownDialog('open'); + outside.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the dialog gets closed when mouse leaves the dialog area', function () { + var container = $('
'), + dialog = $('
').attr('id', 'dialog').appendTo(container); + + $('
').attr('id', 'outside').appendTo(container); + $('
').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + jasmine.clock().install(); + + dialog.dropdownDialog({ + 'closeOnMouseLeave': true + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.trigger('mouseleave'); + + jasmine.clock().tick(10); + + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + + jasmine.clock().uninstall(); + }); + + it('check if the dialog does not close when mouse leaves the dialog area', function () { + var container = $('
'), + dialog = $('
').attr('id', 'dialog').appendTo(container); + + $('
').attr('id', 'outside').appendTo(container); + $('
').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + jasmine.clock().install(); + + dialog.dropdownDialog({ + 'closeOnMouseLeave': false + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + dialog.trigger('mouseleave'); + jasmine.clock().tick(10); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + dialog.dropdownDialog('destroy'); + + jasmine.clock().uninstall(); + }); + + it('check if the dialog gets closed with the specified delay', function () { + var container = $('
'), + dialog = $('
').attr('id', 'dialog').appendTo(container); + + $('
').attr('id', 'outside').appendTo(container); + $('
').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + jasmine.clock().install(); + + dialog.dropdownDialog({ + 'timeout': 5 + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + dialog.trigger('mouseleave'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + jasmine.clock().tick(10); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + + jasmine.clock().uninstall(); + }); + + it('check if the title bar is prevented from being created', function () { + var dialog = $('
'), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'createTitleBar': true + }); + + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length > 0).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'createTitleBar': false + }); + + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length <= 0).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the position function gets disabled', function () { + var dialog = $('
'), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'autoPosition': false + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('top') === 'auto').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'autoPosition': true + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('top') !== '0px').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the size function gets disabled', function () { + var dialog = $('
'), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'autoSize': true, + 'width': '300' + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('width') === '300px').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'autoSize': false, + 'width': '300' + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('width') === '300px').toBeFalsy(); + + dialog.dropdownDialog('destroy'); + }); + }); +}); From de225a907f56477b767eae81134154e0398a3bf0 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Fri, 24 Nov 2017 17:24:15 +0100 Subject: [PATCH 19/32] Backend jquery-ui version has a diferent behavior on create that will add ui-dialog-titlebar anyway. This test is only valid with frontend's version @TODO: Re-design Jasmine settings to match a selective architecture for testing in order to split them. --- .../jasmine/tests/lib/mage/dropdown.test.js | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js index 70e608d5bfefd..1034ad263d9fe 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js @@ -270,29 +270,34 @@ define([ jasmine.clock().uninstall(); }); - it('check if the title bar is prevented from being created', function () { - var dialog = $('
'), - uiClass = '.ui-dialog', - ui; + // Backend jquery-ui version has a diferent behavior on create that will add ui-dialog-titlebar anyway. + // This test is only valid with frontend's version + // @TODO: Re-design Jasmine settings to match a selective architecture for testing in order to split them. + if ($.ui.version !== '1.9.2') { + it('check if the title bar is prevented from being created', function () { + var dialog = $('
'), + uiClass = '.ui-dialog', + ui; - dialog.dropdownDialog({ - 'createTitleBar': true - }); + dialog.dropdownDialog({ + 'createTitleBar': true + }); - ui = $(uiClass); - expect(ui.find('.ui-dialog-titlebar').length > 0).toBeTruthy(); + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length > 0).toBeTruthy(); - dialog.dropdownDialog('destroy'); + dialog.dropdownDialog('destroy'); - dialog.dropdownDialog({ - 'createTitleBar': false - }); + dialog.dropdownDialog({ + 'createTitleBar': false + }); - ui = $(uiClass); - expect(ui.find('.ui-dialog-titlebar').length <= 0).toBeTruthy(); + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length <= 0).toBeTruthy(); - dialog.dropdownDialog('destroy'); - }); + dialog.dropdownDialog('destroy'); + }); + } it('check if the position function gets disabled', function () { var dialog = $('
'), From 9f148224e7540d089e1d38a1d22be725ca5cfb27 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Fri, 1 Dec 2017 17:24:28 +0100 Subject: [PATCH 20/32] Added form.test.js and removed JsTestDriver equivalent. Modified if documentation to be more friendly with developers. --- .../testsuite/mage/form/form-test.js | 241 ---------------- .../jasmine/tests/lib/mage/dropdown.test.js | 9 +- .../js/jasmine/tests/lib/mage/form.test.js | 262 ++++++++++++++++++ 3 files changed, 268 insertions(+), 244 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/form.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js deleted file mode 100644 index 83bdefd399eaf..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js +++ /dev/null @@ -1,241 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -FormTest = TestCase('FormTest'); -FormTest.prototype.setUp = function() { - /*:DOC +=
*/ -}; -FormTest.prototype.tearDown = function() { - var formInstance = jQuery('#form').data('form'); - if(formInstance && formInstance.destroy) { - formInstance.destroy(); - } -}; -FormTest.prototype.testInit = function() { - var form = jQuery('#form').form(); - assertTrue(form.is(':mage-form')); -}; -FormTest.prototype.testRollback = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.prop('action'), - target: form.prop('target'), - method: form.prop('method') - }; - - form.data("form").oldAttributes = initialFormAttrs; - form.prop({ - action: 'new/action/url', - target: '_blank', - method: 'POST' - }); - - assertNotEquals(form.prop('action'), initialFormAttrs.action); - assertNotEquals(form.prop('target'), initialFormAttrs.target); - assertNotEquals(form.prop('method'), initialFormAttrs.method); - form.data("form")._rollback(); - assertEquals(form.prop('action'), initialFormAttrs.action); - assertEquals(form.prop('target'), initialFormAttrs.target); - assertEquals(form.prop('method'), initialFormAttrs.method); -}; -FormTest.prototype.testGetHandlers = function() { - var form = jQuery('#form').form(), - handlersData = form.form('option', 'handlersData'), - handlers = []; - $.each(handlersData, function(key) { - handlers.push(key); - }); - assertEquals(handlers.join(' '), form.data("form")._getHandlers().join(' ')); -}; -FormTest.prototype.testStoreAttribute = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.attr('action'), - target: form.attr('target'), - method: form.attr('method') - }; - form.data("form")._storeAttribute('action'); - form.data("form")._storeAttribute('target'); - form.data("form")._storeAttribute('method'); - - assertEquals(form.data("form").oldAttributes.action, initialFormAttrs.action); - assertEquals(form.data("form").oldAttributes.target, initialFormAttrs.target); - assertEquals(form.data("form").oldAttributes.method, initialFormAttrs.method); -}; -FormTest.prototype.testBind = function() { - var form = jQuery('#form').form(), - submitted = false, - handlersData = form.form('option', 'handlersData'); - - form.on('submit', function(e) { - submitted = true; - e.stopImmediatePropagation(); - e.preventDefault(); - }); - $.each(handlersData, function(key) { - form.trigger(key); - assertTrue(submitted); - submitted = false; - }); - form.off('submit'); -}; -FormTest.prototype.testGetActionUrl = function() { - var form = jQuery('#form').form(), - action = form.attr('action'), - testUrl = 'new/action/url', - testArgs = { - args: {arg: 'value'} - }; - - form.data("form")._storeAttribute('action'); - assertEquals(form.data("form")._getActionUrl(testArgs), action + '/arg/value/'); - assertEquals(form.data("form")._getActionUrl(testUrl), testUrl); - assertEquals(form.data("form")._getActionUrl(), action); -}; -FormTest.prototype.testProcessData = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.attr('action'), - target: form.attr('target'), - method: form.attr('method') - }, - testSimpleData = { - action: 'new/action/url', - target: '_blank', - method: 'POST' - }, - testActionArgsData = { - action: { - args: { - arg: 'value' - } - } - }; - var processedData = form.data("form")._processData(testSimpleData); - - assertEquals(form.data("form").oldAttributes.action, initialFormAttrs.action); - assertEquals(form.data("form").oldAttributes.target, initialFormAttrs.target); - assertEquals(form.data("form").oldAttributes.method, initialFormAttrs.method); - - assertEquals(processedData.action, testSimpleData.action); - assertEquals(processedData.target, testSimpleData.target); - assertEquals(processedData.method, testSimpleData.method); - - form.data("form")._rollback(); - - processedData = form.data("form")._processData(testActionArgsData); - form.data("form")._storeAttribute('action'); - var newActionUrl = form.data("form")._getActionUrl(testActionArgsData.action); - - assertEquals(processedData.action, newActionUrl); -}; -FormTest.prototype.testBeforeSubmit = function() { - /*:DOC +=
*/ - var testHandler = { - action: { - args: { - arg1: 'value1' - } - } - }, - form = jQuery('#form').form({handlersData: { - testHandler: testHandler - } - }), - beforeSubmitData = { - action: { - args: { - arg2: 'value2' - } - }, - target: '_blank' - }, - eventData = { - method: 'POST' - }, - resultData = $.extend( - true, - {}, - testHandler, - beforeSubmitData, - eventData - ); - form.data("form")._storeAttribute('action'); - - var testForm = jQuery('#test-form'); - resultData = form.data("form")._processData(resultData); - testForm.prop(resultData); - - form.on('beforeSubmit', function(e, data) { - jQuery.extend(data, beforeSubmitData); - }); - form.on('submit', function(e) { - e.stopImmediatePropagation(); - e.preventDefault(); - }); - form.data("form")._beforeSubmit('testHandler', eventData); - - assertEquals(testForm.prop('action'), form.prop('action')); - assertEquals(testForm.prop('target'), form.prop('target')); - assertEquals(testForm.prop('method'), form.prop('method')); -}; -FormTest.prototype.testSubmit = function() { - var form = jQuery('#form').form({ - handlersData: { - save: {} - } - }), - formSubmitted = false; - - form.data("form")._storeAttribute('action'); - form.data("form")._storeAttribute('target'); - form.data("form")._storeAttribute('method'); - form - .on('submit', function(e) { - e.preventDefault(); - e.stopImmediatePropagation(); - e.preventDefault(); - formSubmitted = true; - }) - .prop({ - action: 'new/action/url', - target: '_blank', - method: 'POST' - }); - - form.data("form")._submit({type: 'save'}); - - assertEquals(form.attr('action'), form.data("form").oldAttributes.action); - assertEquals(form.attr('target'), form.data("form").oldAttributes.target); - assertEquals(form.attr('method'), form.data("form").oldAttributes.method); - assertTrue(formSubmitted); - form.off('submit'); -}; -FormTest.prototype.testBuildURL = function() { - var dataProvider = [ - { - params: ['http://domain.com//', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' - }, - { - params: ['http://domain.com', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' - }, - { - params: ['http://domain.com?some=param', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' - }, - { - params: ['http://domain.com?some=param&', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' - } - ], - method = jQuery.mage.form._proto._buildURL, - quantity = dataProvider.length; - - expectAsserts(quantity); - for (var i = 0; i < quantity; i++) { - assertEquals(dataProvider[i].expected, method.apply(null, dataProvider[i].params)); - } -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js index 1034ad263d9fe..7279047adc53a 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js @@ -270,9 +270,12 @@ define([ jasmine.clock().uninstall(); }); - // Backend jquery-ui version has a diferent behavior on create that will add ui-dialog-titlebar anyway. - // This test is only valid with frontend's version - // @TODO: Re-design Jasmine settings to match a selective architecture for testing in order to split them. + /* + * jQuery ui version 1.9.2 belongs to the adminhtml. + * + * This test will fail on backend since backend's jquery.ui will + * add ui-dialog-titlebar class anyway on create. + */ if ($.ui.version !== '1.9.2') { it('check if the title bar is prevented from being created', function () { var dialog = $('
'), diff --git a/dev/tests/js/jasmine/tests/lib/mage/form.test.js b/dev/tests/js/jasmine/tests/lib/mage/form.test.js new file mode 100644 index 0000000000000..0f26516b4811e --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/form.test.js @@ -0,0 +1,262 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ +/* jscs:disable jsDoc */ + +define([ + 'jquery', + 'mage/backend/form' +], function ($) { + 'use strict'; + + /* + * jQuery ui version 1.9.2 belongs to the adminhtml. + * + * This test will fail on frontend since mage/backend/form only belongs to backend. + */ + if ($.ui.version === '1.9.2') { + describe('Test for mage/form jQuery plugin', function () { + var id = 'edit_form', + elementId = '#' + id; + + beforeEach(function () { + var element = jQuery('
'); + + element.appendTo('body'); + }); + + afterEach(function () { + $(elementId).remove(); + }); + + it('check if form can be initialized', function () { + var form = $(elementId).form(); + + expect(form.is(':mage-form')).toBeTruthy(); + }); + + it('check get handlers', function () { + var form = $(elementId).form(), + handlersData = form.form('option', 'handlersData'), + handlers = []; + + $.each(handlersData, function (key) { + handlers.push(key); + }); + expect(handlers.join(' ')).toBe(form.data('form')._getHandlers().join(' ')); + }); + + it('check store attribute', function () { + var form = $(elementId).form(), + initialFormAttrs = { + action: form.attr('action'), + target: form.attr('target'), + method: form.attr('method') + }; + + form.data('form')._storeAttribute('action'); + form.data('form')._storeAttribute('target'); + form.data('form')._storeAttribute('method'); + + expect(form.data('form').oldAttributes.action).toBe(initialFormAttrs.action); + expect(form.data('form').oldAttributes.target).toBe(initialFormAttrs.target); + expect(form.data('form').oldAttributes.method).toBe(initialFormAttrs.method); + }); + + it('check bind', function () { + var form = $(elementId).form(), + submitted = false, + handlersData = form.form('option', 'handlersData'); + + form.on('submit', function (e) { + submitted = true; + e.stopImmediatePropagation(); + e.preventDefault(); + }); + + $.each(handlersData, function (key) { + form.trigger(key); + expect(submitted).toBeTruthy(); + submitted = false; + }); + + form.off('submit'); + }); + + it('check get action URL', function () { + var form = $(elementId).form(), + action = form.attr('action'), + testUrl = 'new/action/url', + testArgs = { + args: { + arg: 'value' + } + }; + + form.data('form')._storeAttribute('action'); + expect(form.data('form')._getActionUrl(testArgs)).toBe(action + '/arg/value/'); + expect(form.data('form')._getActionUrl(testUrl)).toBe(testUrl); + expect(form.data('form')._getActionUrl()).toBe(action); + }); + + it('check process data', function () { + var form = $(elementId).form(), + initialFormAttrs = { + action: form.attr('action'), + target: form.attr('target'), + method: form.attr('method') + }, + testSimpleData = { + action: 'new/action/url', + target: '_blank', + method: 'POST' + }, + testActionArgsData = { + action: { + args: { + arg: 'value' + } + } + }, + processedData = form.data('form')._processData(testSimpleData); + + expect(form.data('form').oldAttributes.action).toBe(initialFormAttrs.action); + expect(form.data('form').oldAttributes.target).toBe(initialFormAttrs.target); + expect(form.data('form').oldAttributes.method).toBe(initialFormAttrs.method); + expect(processedData.action).toBe(testSimpleData.action); + expect(processedData.target).toBe(testSimpleData.target); + expect(processedData.method).toBe(testSimpleData.method); + + form.data('form')._rollback(); + processedData = form.data('form')._processData(testActionArgsData); + form.data('form')._storeAttribute('action'); + expect(processedData.action).toBe(form.data('form')._getActionUrl(testActionArgsData.action)); + }); + + it('check before submit', function () { + var testForm = $('
').appendTo('body'), + testHandler = { + action: { + args: { + arg1: 'value1' + } + } + }, + form = $(elementId).form({ + handlersData: { + testHandler: testHandler + } + }), + beforeSubmitData = { + action: { + args: { + arg2: 'value2' + } + }, + target: '_blank' + }, + eventData = { + method: 'POST' + }, + resultData = $.extend(true, {}, testHandler, beforeSubmitData, eventData); + + form.data('form')._storeAttribute('action'); + resultData = form.data('form')._processData(resultData); + testForm.prop(resultData); + + form.on('beforeSubmit', function (e, data) { + $.extend(data, beforeSubmitData); + }); + + form.on('submit', function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + }); + + form.data('form')._beforeSubmit('testHandler', eventData); + expect(testForm.prop('action')).toBe(form.prop('action')); + expect(testForm.prop('target')).toBe(form.prop('target')); + expect(testForm.prop('method')).toBe(form.prop('method')); + }); + + it('check submit', function () { + var formSubmitted = false, + form = $(elementId).form({ + handlersData: { + save: {} + } + }); + + form.data('form')._storeAttribute('action'); + form.data('form')._storeAttribute('target'); + form.data('form')._storeAttribute('method'); + + form.on('submit', function (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + e.preventDefault(); + formSubmitted = true; + }).prop({ + action: 'new/action/url', + target: '_blank', + method: 'POST' + }); + + form.data('form')._submit({ + type: 'save' + }); + + expect(form.attr('action')).toBe(form.data('form').oldAttributes.action); + expect(form.attr('target')).toBe(form.data('form').oldAttributes.target); + expect(form.attr('method')).toBe(form.data('form').oldAttributes.method); + expect(formSubmitted).toBeTruthy(); + + form.off('submit'); + }); + + it('check build URL', function () { + var dataProvider = [ + { + params: ['http://domain.com//', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' + }, + { + params: ['http://domain.com', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' + }, + { + params: ['http://domain.com?some=param', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' + }, + { + params: ['http://domain.com?some=param&', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' + } + ], + method = $.mage.form._proto._buildURL, + quantity = dataProvider.length, + i = 0; + + expect(quantity).toBeTruthy(); + + for (i; i < quantity; i++) { + expect(dataProvider[i].expected).toBe(method.apply(null, dataProvider[i].params)); + } + }); + }); + } +}); From ad90a47b36983f354fd2958279742809fc8e4886 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga Date: Fri, 1 Dec 2017 17:27:22 +0100 Subject: [PATCH 21/32] jQuery consistency. --- dev/tests/js/jasmine/tests/lib/mage/form.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/form.test.js b/dev/tests/js/jasmine/tests/lib/mage/form.test.js index 0f26516b4811e..6202f93da999a 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/form.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/form.test.js @@ -22,7 +22,7 @@ define([ elementId = '#' + id; beforeEach(function () { - var element = jQuery('
'); + var element = $('
'); element.appendTo('body'); }); From 35a1acab9193c1e737af84916284469cc426da03 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 20 Dec 2017 12:58:47 +0200 Subject: [PATCH 22/32] magento/magento2#12342: JSTestDriver removal - Added menu.test.js and removed JsTestDriver equivalent. --- .../testsuite/mage/menu/test-menu.js | 112 ------------------ .../assets/lib/web/mage/menu.html} | 38 +----- .../js/jasmine/tests/lib/mage/menu.test.js | 110 +++++++++++++++++ 3 files changed, 115 insertions(+), 145 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js rename dev/tests/js/{JsTestDriver/testsuite/mage/menu/index.html => jasmine/assets/lib/web/mage/menu.html} (50%) create mode 100644 dev/tests/js/jasmine/tests/lib/mage/menu.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js b/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js deleted file mode 100644 index 0e1c4a3682b89..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @category mage.js - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - - /* - Set key logger to check key press event - */ - function KeyLogger( target ) { - if ( !(this instanceof KeyLogger) ) { - return new KeyLogger( target ); - } - this.target = target; - this.log = []; - - var self = this; - - this.target.off( 'keydown' ).on( 'keydown', function( event ) { - self.log.push( event.keyCode ); - }); -} -/* - testing if menu get expanded class when option set to true - */ -test( 'Menu Expanded', function() { - expect(1); - var menu = $('#menu'); - var menuItems = menu.find('li'); - var submenu = menuItems.find('ul'); - menu.menu({ - expanded: true - }); - ok(submenu.hasClass('expanded'), 'Expanded Class added'); -}); -/* - testing if down arrow is pressed - */ -test( 'Down Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.DOWN; - menu.trigger( event ); - equal( keys.log[ 0 ], 40, 'Down Arrow Was Pressed' ); -}); -/* - testing if up arrow is pressed - */ -test( 'Up Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.UP; - menu.trigger( event ); - equal( keys.log[ 0 ], 38, 'Up Arrow Was Pressed' ); -}); -/* - testing if left arrow is pressed - */ -test( 'Left Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.LEFT; - menu.trigger( event ); - equal( keys.log[ 0 ], 37, 'Left Arrow Was Pressed' ); -}); -/* - testing if right arrow is pressed - */ -test( 'Right Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.RIGHT; - menu.trigger( event ); - equal( keys.log[ 0 ], 39, 'Right Arrow Was Pressed' ); -}); -/* - testing if max limit being set - */ -test( 'Max Limit', function() { - expect(1); - var menu = $('#menu'); - menu.navigation({ - maxItems: 3 - }); - var menuItems = menu.find('> li:visible'); - equal(menuItems.length, 4, 'Max Limit Reach'); -}); -/* - testing if responsive menu is set - */ -test( 'Responsive: More Menu', function() { - expect(1); - var menu = $('#menu'); - menu.navigation({ - responsive: 'onResize' - }); - ok($('body').find('.ui-menu.more'), 'More Menu Created'); -}); - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html b/dev/tests/js/jasmine/assets/lib/web/mage/menu.html similarity index 50% rename from dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html rename to dev/tests/js/jasmine/assets/lib/web/mage/menu.html index d0a3b9b873801..03c673a7dac5f 100644 --- a/dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html +++ b/dev/tests/js/jasmine/assets/lib/web/mage/menu.html @@ -1,36 +1,10 @@ - - - - - - Unit test - - - - - - - - - - - - -
-
- - + \ No newline at end of file diff --git a/dev/tests/js/jasmine/tests/lib/mage/menu.test.js b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js new file mode 100644 index 0000000000000..a2b7e98425969 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js @@ -0,0 +1,110 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/menu', + 'text!tests/assets/lib/web/mage/menu.html' +], function ($, menu, menuTmpl) { + 'use strict'; + + describe('mage/menu', function () { + describe('Menu expanded', function () { + var menuSelector = '#menu'; + + beforeEach(function () { + var $menu = $(menuTmpl); + + $('body').append($menu); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check that menu expanded', function () { + var $menu = $(menuSelector), + $menuItems = $menu.find('li'), + $submenu = $menuItems.find('ul'); + + $menu.menu({ + expanded: true + }); + expect($submenu.hasClass('expanded')).toBe(true); + }); + }); + + describe('Menu hover event', function () { + var menuSelector = '#menu', + $menu; + + beforeEach(function () { + var $menuObject = $(menuTmpl); + + $('body').append($menuObject); + $menu = $(menuSelector).menu({ + delay: 0, + showDelay: 0, + hideDelay: 0 + }); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check that menu expanded', function (done) { + var $menuItem = $menu.find('li.test-menu-item'), + $submenu = $menuItem.find('ul'); + + $menuItem.trigger('mouseover'); + setTimeout(function () { + expect($submenu.attr('aria-expanded')).toBe('true'); + $menuItem.trigger('mouseout'); + setTimeout(function () { + expect($submenu.attr('aria-expanded')).toBe('false'); + done(); + }, 300); + }, 300); + }); + }); + + describe('Menu navigation', function () { + var menuSelector = '#menu', + $menu; + + beforeEach(function () { + var $menuObject = $(menuTmpl); + + $('body').append($menuObject); + $menu = $(menuSelector).menu(); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check max item limit', function () { + var $menuItems; + + $menu.navigation({ + maxItems: 3 + }); + $menuItems = $menu.find('li:visible'); + + expect($menuItems.length).toBe(4); + }); + + it('Check that More Menu item will be added', function () { + $menu.navigation({ + responsive: 'onResize' + }); + + expect($('body').find('.ui-menu-more').length).toBeGreaterThan(0); + }); + }); + }); +}); From 36cfa4543bf839931458205c51cff65136d8e89c Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 20 Dec 2017 16:49:48 +0200 Subject: [PATCH 23/32] magento/magento2#12342: JSTestDriver removal - Added translate-inline.test.js and removed JsTestDriver equivalent. --- .../translate_inline/translate-inline-test.js | 123 ------------------ .../assets/lib/web/mage/translate-inline.html | 4 + .../tests/lib/mage/translate-inline.test.js | 109 ++++++++++++++++ 3 files changed, 113 insertions(+), 123 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js create mode 100644 dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html create mode 100644 dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js deleted file mode 100644 index 18a117f1913b1..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TranslateInlineTest = TestCase('TranslateInlineTest'); -TranslateInlineTest.prototype.testInit = function() { - /*:DOC += -
- */ - var translateInline = jQuery('[data-role="translate-dialog"]').translateInline(); - assertTrue(translateInline.is(':mage-translateInline')); - translateInline.translateInline('destroy'); -}; -TranslateInlineTest.prototype.testDialogOpenOnEdit = function() { - /*:DOC += -
- */ - var options= { - dialog: { - id: 'dialog-id' - } - }; - var translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options), - isDialogHiddenOnInit = translateInline.is(':hidden'); - translateInline.trigger('edit.editTrigger'); - var dialogVisibleAfterTriggerEdit = translateInline.is(':visible'); - assertTrue(isDialogHiddenOnInit); - assertTrue(dialogVisibleAfterTriggerEdit); - translateInline.translateInline('destroy'); -}; -TranslateInlineTest.prototype.testTranslationFormTemplate = function() { - /*:DOC += -
- */ - var options = { - translateForm: { - data:{ - id: 'translate-form-id', - newTemplateVariable: 'New Template Variable' - } - } - }, - translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options); - translateInline.trigger('edit.editTrigger'); - var translateForm = jQuery('#' + options.translateForm.data.id); - assertTrue(translateForm.size() > 0); - assertEquals(translateForm.text(), options.translateForm.data.newTemplateVariable); - translateInline.translateInline('destroy'); -}; -// @TODO Need to be fixed to avoid errors on the bamboo server in context of MAGETWO-5085 ticket -/*TranslateInlineTest.prototype._testTranslateFormSubmit = function() { - FORM_KEY = 'form_key'; - var options = { - ajaxUrl: 'www.test.com', - area: 'test', - translateForm: { - template:'
', - data:{ - id: 'translate-form-id' - } - }, - dialog: { - id: 'dialog-id', - buttons : [{ - 'class': 'submit-button' - }] - } - }, - translateInline = jQuery(document).translateInline(options), - submit = jQuery('.ui-dialog-buttonset .submit-button'), - ajaxParametersCorrect = false; - - translateInline.trigger('edit.editTrigger'); - var parameters = jQuery.param({area: options.area}) + - '&' + jQuery('#' + options.translateForm.data.id).serialize(), - dialog = jQuery('#' + options.dialog.id), - dialogVisibleOnAjaxSend = false, - dialogHiddenAfterAjaxComplete = false; - jQuery(document) - .on('ajaxSend', function(e, jqXHR, settings){ - jqXHR.abort(); - dialogVisibleOnAjaxSend = dialog.is(':visible'); - ajaxParametersCorrect = settings.data.indexOf(parameters) >= 0; - jQuery(this).trigger('ajaxComplete'); - }); - submit.trigger('click'); - assertEquals(true, dialogVisibleOnAjaxSend); - assertEquals(true, ajaxParametersCorrect); - assertEquals(true, dialog.is(':hidden')); - translateInline.translateInline('destroy'); -};*/ -TranslateInlineTest.prototype.testDestroy = function() { - /*:DOC += -
- - */ - var options = { - translateForm: { - data:{ - id: 'translate-form-id', - newTemplateVariable: '' - } - } - }, - translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options), - editTrigger = jQuery('#edit-trigger-id').editTrigger(), - editTriggerCreated = editTrigger.size() && jQuery('#edit-trigger-id').is(':mage-editTrigger'), - editTriggerEventIsBound = false; - - assertTrue(translateInline.is(':mage-translateInline')); - assertTrue(editTriggerCreated); - translateInline.on('edit.editTrigger', function(){editTriggerEventIsBound = true;}); - translateInline.translateInline('destroy'); - translateInline.trigger('edit.editTrigger'); - assertFalse(translateInline.is(':mage-translateInline')); - assertFalse(editTriggerEventIsBound); -}; diff --git a/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html b/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html new file mode 100644 index 0000000000000..5e48598a081a2 --- /dev/null +++ b/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html @@ -0,0 +1,4 @@ + +
\ No newline at end of file diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js new file mode 100644 index 0000000000000..489af5dcda4d5 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js @@ -0,0 +1,109 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/translate-inline', + 'text!tests/assets/lib/web/mage/translate-inline.html' +], function ($, TranslateInline, translateTmpl) { + 'use strict'; + + describe('mage/translate-inline', function () { + describe('Check translate', function () { + var translateSelector = '[data-role="translate-dialog"]', + translateTemplateSelector = '#translate-form-template'; + + beforeEach(function () { + var translateBlock = $(translateTmpl); + + $('body').append(translateBlock); + }); + + afterEach(function () { + $(translateSelector).remove(); + $(translateSelector).translateInline('destroy'); + $(translateTemplateSelector).remove(); + }); + + it('Check that translate inited', function () { + var translateInline = $(translateSelector).translateInline(); + + expect(translateInline.is(':mage-translateInline')).toBe(true); + }); + + it('Check that translate hidden on init and visible on trigger', function () { + var translateInline = $(translateSelector).translateInline({ + id: 'dialog-id' + }), + isDialogHiddenOnInit = translateInline.is(':hidden'), + dialogVisibleAfterTriggerEdit; + + translateInline.trigger('edit.editTrigger'); + dialogVisibleAfterTriggerEdit = translateInline.is(':visible'); + expect(isDialogHiddenOnInit).toBe(true); + expect(dialogVisibleAfterTriggerEdit).toBe(true); + }); + + it('Check translation form template', function () { + var translateFormId = 'translate-form-id', + translateFormContent = 'New Template Variable', + translateInline = $(translateSelector).translateInline({ + translateForm: { + data: { + id: translateFormId, + newTemplateVariable: translateFormContent + } + } + }), + $translateForm; + + translateInline.trigger('edit.editTrigger'); + $translateForm = $('#' + translateFormId); + + expect($translateForm.length).toBeGreaterThan(0); + expect($translateForm.text()).toBe(translateFormContent); + }); + + it('Check translation submit', function () { + var options = { + ajaxUrl: 'www.test.com', + area: 'test', + translateForm: { + template: '
', + data: { + id: 'translate-form-id' + } + } + }, + expectedEequestData = 'area=test&test=test', + translateInline = $(translateSelector).translateInline(options), + $submitButton = $('body').find('.action-primary'); + + $.ajax = jasmine.createSpy().and.callFake(function (request) { + expect(request.url).toBe(options.ajaxUrl); + expect(request.type).toBe('POST'); + expect(request.data).toBe(expectedEequestData); + + return { + complete: jasmine.createSpy() + }; + }); + + translateInline.trigger('edit.editTrigger'); + $submitButton.trigger('click'); + }); + + it('Check translation destroy', function () { + var translateInline = $(translateSelector).translateInline(); + + translateInline.trigger('edit.editTrigger'); + expect(translateInline.is(':mage-translateInline')).toBe(true); + translateInline.translateInline('destroy'); + expect(translateInline.is(':mage-translateInline')).toBe(false); + }); + }); + }); +}); From b1b001ad66c3aabe44ba155bdc9c4e150c51dad1 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 20 Dec 2017 18:11:32 +0200 Subject: [PATCH 24/32] magento/magento2#12342: JSTestDriver removal - Added calendar.test.js and removed JsTestDriver equivalent. --- .../testsuite/mage/calendar/calendar-qunit.js | 77 -------- .../testsuite/mage/calendar/calendar-test.js | 102 ----------- .../testsuite/mage/calendar/calendar.html | 31 ---- .../mage/calendar/date-range-test.js | 63 ------- .../jasmine/tests/lib/mage/calendar.test.js | 173 ++++++++++++++++++ 5 files changed, 173 insertions(+), 273 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/calendar.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js deleted file mode 100644 index 60dffe84db0fc..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -test( "initialization", function() { - var calendar = $('#calendar').calendar(); - ok( calendar.is(':mage-calendar'), "this test is fine" ); - calendar.calendar('destroy'); -}); -test( "global configuration merge", function() { - $.extend(true, $, { - calendarConfig: { - showOn: 'button', - showAnim: '', - buttonImageOnly: true, - showButtonPanel: true, - showWeek: true, - timeFormat: '', - showTime: false, - showHour: false, - showMinute: false - } - }); - var calendar = $('#calendar').calendar(); - equal('button', calendar.calendar('option', 'showOn')); - equal('', calendar.calendar('option', 'showAnim')); - ok(calendar.calendar('option', 'buttonImageOnly')); - ok(calendar.calendar('option', 'showButtonPanel')); - ok(calendar.calendar('option', 'showWeek')); - equal('', calendar.calendar('option', 'timeFormat')); - equal(false, calendar.calendar('option', 'showTime')); - equal(false, calendar.calendar('option', 'showHour')); - equal(false, calendar.calendar('option', 'showMinute')); - calendar.calendar('destroy'); - delete $.calendarConfig; -}); -test( "specifying AM/PM in timeformat option changes AMPM option to true", function(){ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm tt', ampm: false}); - ok(calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}); -test( "omitting AM/PM in timeformat option changes AMPM option to false", function(){ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm'}); - notEqual(true, calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}); -test( "with server timezone offset", function(){ - var serverTimezoneSeconds = 1346122095, - calendar = $('#calendar').calendar({serverTimezoneSeconds: serverTimezoneSeconds}), - currentDate = new Date(); - currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); - ok(currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}); -test( "without sever timezone offset", function() { - var calendar = $('#calendar').calendar(), - currentDate = new Date(); - ok(currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}); -test( "dateTime format conversions", function() { - var calendar = $('#calendar').calendar({dateFormat: 'M/d/yy', timeFormat: 'h:mm a'}); - equal('mm/d/yy', calendar.calendar('option', 'dateFormat')); - equal('h:mm tt', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); - calendar.calendar({dateFormat: 'MMMM/EEEE/yyyy', timeFormat: 'HH:mm'}); - equal('MM/DD/yy', calendar.calendar('option', 'dateFormat')); - equal('hh:mm', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); -}); -test( "destroy", function() { - var calendar = $('#calendar').calendar(), - calendarExist = calendar.is(':mage-calendar'); - calendar.calendar('destroy'); - equal(true, calendarExist != calendar.is(':mage-calendar')); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js deleted file mode 100644 index 7748106b303c3..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -CalendarTest = TestCase('CalendarTest'); -CalendarTest.prototype.testInit = function() { - /*:DOC += */ - var calendar = jQuery('#calendar').calendar(); - assertEquals(true, calendar.is(':mage-calendar')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testGlobalConfigurationMerge = function() { - /*:DOC += */ - $.extend(true, $, { - calendarConfig: { - showOn: 'button', - showAnim: '', - buttonImageOnly: true, - showButtonPanel: true, - showWeek: true, - timeFormat: '', - showTime: false, - showHour: false, - showMinute: false - } - }); - var calendar = $('#calendar').calendar(); - assertEquals('button', calendar.calendar('option', 'showOn')); - assertEquals('', calendar.calendar('option', 'showAnim')); - assertEquals(true, calendar.calendar('option', 'buttonImageOnly')); - assertEquals(true, calendar.calendar('option', 'showButtonPanel')); - assertEquals(true, calendar.calendar('option', 'showWeek')); - assertEquals('', calendar.calendar('option', 'timeFormat')); - assertEquals(false, calendar.calendar('option', 'showTime')); - assertEquals(false, calendar.calendar('option', 'showHour')); - assertEquals(false, calendar.calendar('option', 'showMinute')); - calendar.calendar('destroy'); - delete $.calendarConfig; -}; -CalendarTest.prototype.testEnableAMPM = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm tt', ampm: false}); - assertEquals(true, calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDisableAMPM = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm'}); - assertTrue(!calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testWithServerTimezoneOffset = function() { - /*:DOC += */ - var serverTimezoneSeconds = 1346122095, - calendar = $('#calendar').calendar({serverTimezoneSeconds: serverTimezoneSeconds}), - currentDate = new Date(); - currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testWithServerTimezoneShift = function() { - /*:DOC += */ - var serverTimezoneOffset = 43200, - calendar = $('#calendar').calendar({serverTimezoneOffset: serverTimezoneOffset}), - currentDate = new Date(); - - setTimeout(function () { - currentDate.setTime(currentDate.getTime() + (serverTimezoneOffset + currentDate.getTimezoneOffset() * 60) * 1000); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); - }, 61000); -}; -CalendarTest.prototype.testWithoutServerTimezoneOffset = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(), - currentDate = new Date(); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testInitDateTimePicker = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(); - assertEquals(true, calendar.hasClass('_has-datepicker')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDateTimeMapping = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({dateFormat: 'M/d/yy', timeFormat: 'h:mm a'}); - assertEquals('mm/d/yy', calendar.calendar('option', 'dateFormat')); - assertEquals('h:mm TT', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); - calendar.calendar({dateFormat: 'MMMM/EEEE/yyyy'}); - assertEquals('MM/DD/yy', calendar.calendar('option', 'dateFormat')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDestroy = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(), - calendarExist = calendar.is(':mage-calendar'); - calendar.calendar('destroy'); - assertEquals(true, calendarExist != calendar.is(':mage-calendar')); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html deleted file mode 100644 index b474dc2d5ce95..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Calendar Widget: QUnit Tests - - - - - - - - - - - -
-
- -
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js deleted file mode 100644 index 61211c067ad12..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -DaterangeTest = TestCase('DaterangeTest'); -DaterangeTest.prototype.testInit = function() { - /*:DOC += -
- */ - var dateRange = jQuery('#date-range').dateRange(); - assertEquals(true, dateRange.is(':mage-dateRange')); - dateRange.dateRange('destroy'); -}; -DaterangeTest.prototype.testInitDateRangeDatepickers = function() { - /*:DOC += -
- - -
- */ - var options = { - from: { - id: "from" - }, - to: { - id: "to" - } - }, - dateRange = $('#date-range').dateRange(options), - from = $('#'+options.from.id), - to = $('#'+options.to.id); - - assertEquals(true, from.hasClass('_has-datepicker')); - assertEquals(true, to.hasClass('_has-datepicker')); - dateRange.dateRange('destroy'); -}; -DaterangeTest.prototype.testDestroy = function() { - /*:DOC += -
- - -
- */ - var options = { - from: { - id: "from" - }, - to: { - id: "to" - } - }, - dateRange = $('#date-range').dateRange(options), - from = $('#'+options.from.id), - to = $('#'+options.to.id), - dateRangeExist = dateRange.is(':mage-dateRange'), - fromExist = from.hasClass('_has-datepicker'), - toExist = to.hasClass('_has-datepicker'); - - dateRange.dateRange('destroy'); - assertEquals(true, dateRangeExist != dateRange.is(':mage-dateRange')); - assertEquals(true, fromExist != from.hasClass('_has-datepicker')); - assertEquals(true, toExist != to.hasClass('_has-datepicker')); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js b/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js new file mode 100644 index 0000000000000..b2c6aed2c9fba --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js @@ -0,0 +1,173 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'jquery/ui', + 'mage/calendar' +], function ($) { + 'use strict'; + + describe('mage/calendar', function () { + describe('Check calendar', function () { + var calendarSelector = '#calendar'; + + beforeEach(function () { + var $calendar = $(''); + + $('body').append($calendar); + }); + + afterEach(function () { + $(calendarSelector).remove(); + $(calendarSelector).calendar('destroy'); + }); + + it('Check that calendar inited', function () { + var $calendar = $(calendarSelector).calendar(); + + expect($calendar.is(':mage-calendar')).toBe(true); + }); + + it('Check configuration merge', function () { + var $calendar; + + $.extend(true, $, { + calendarConfig: { + showOn: 'button', + showAnim: '', + buttonImageOnly: true, + showButtonPanel: true, + showWeek: true, + timeFormat: '', + showTime: false, + showHour: false, + showMinute: false + } + }); + + $calendar = $(calendarSelector).calendar(); + + expect($calendar.calendar('option', 'showOn')).toBe('button'); + expect($calendar.calendar('option', 'showAnim')).toBe(''); + expect($calendar.calendar('option', 'buttonImageOnly')).toBe(true); + expect($calendar.calendar('option', 'showButtonPanel')).toBe(true); + expect($calendar.calendar('option', 'showWeek')).toBe(true); + expect($calendar.calendar('option', 'timeFormat')).toBe(''); + expect($calendar.calendar('option', 'showTime')).toBe(false); + expect($calendar.calendar('option', 'showHour')).toBe(false); + expect($calendar.calendar('option', 'showMinute')).toBe(false); + + delete $.calendarConfig; + }); + + it('Specifying AM/PM in timeformat option changes AMPM option to true', function () { + var $calendar = $(calendarSelector).calendar({ + timeFormat: 'hh:mm tt', + ampm: false + }); + + expect($calendar.calendar('option', 'ampm')).toBe(true); + }); + + it('Omitting AM/PM in timeformat option changes AMPM option to false', function () { + var $calendar = $(calendarSelector).calendar({ + timeFormat: 'hh:mm' + }); + + expect($calendar.calendar('option', 'ampm')).toBe(null); + }); + + it('With server timezone offset', function () { + var serverTimezoneSeconds = 1346122095, + $calendar = $(calendarSelector).calendar({ + serverTimezoneSeconds: serverTimezoneSeconds + }), + currentDate = new Date(); + + currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); + + expect($calendar.calendar('getTimezoneDate').toString()).toBe(currentDate.toString()); + }); + + it('Without sever timezone offset', function () { + var $calendar = $(calendarSelector).calendar(), + currentDate = new Date(); + + expect($calendar.calendar('getTimezoneDate').toString()).toBe(currentDate.toString()); + }); + + it('Check destroy', function () { + var $calendar = $(calendarSelector).calendar(); + + expect($calendar.is(':mage-calendar')).toBe(true); + $calendar.calendar('destroy'); + expect($calendar.is(':mage-calendar')).toBe(false); + }); + }); + describe('Check dateRange', function () { + var dateRangeSelector = '#date-range'; + + beforeEach(function () { + var $dateRange = $('
' + + '' + + '' + + '
'); + + $('body').append($dateRange); + }); + + afterEach(function () { + $(dateRangeSelector).remove(); + $(dateRangeSelector).dateRange('destroy'); + }); + + it('Check that dateRange inited', function () { + var $dateRange = $(dateRangeSelector).dateRange(); + + expect($dateRange.is(':mage-dateRange')).toBe(true); + }); + + it('Check that dateRange inited with additional options', function () { + var $from = $('#from'), + $to = $('#to'); + + $(dateRangeSelector).dateRange({ + from: { + id: 'from' + }, + to: { + id: 'to' + } + }); + + expect($from.hasClass('_has-datepicker')).toBe(true); + expect($to.hasClass('_has-datepicker')).toBe(true); + }); + + it('Check destroy', function () { + var $dateRange = $(dateRangeSelector).dateRange({ + from: { + id: 'from' + }, + to: { + id: 'to' + } + }), + $from = $('#from'), + $to = $('#to'); + + expect($dateRange.is(':mage-dateRange')).toBe(true); + expect($from.hasClass('_has-datepicker')).toBe(true); + expect($to.hasClass('_has-datepicker')).toBe(true); + $dateRange.dateRange('destroy'); + expect($dateRange.is(':mage-dateRange')).toBe(false); + expect($from.hasClass('_has-datepicker')).toBe(false); + expect($to.hasClass('_has-datepicker')).toBe(false); + }); + }); + }); +}); From b7164820f3e0dbca3d0d55bffe6b822d5ea54a56 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 20 Dec 2017 19:03:06 +0200 Subject: [PATCH 25/32] magento/magento2#12342: JSTestDriver removal - Fix translate-inline.test.js, save original ajax --- dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js index 489af5dcda4d5..bcdfc4cc59705 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js @@ -80,7 +80,8 @@ define([ }, expectedEequestData = 'area=test&test=test', translateInline = $(translateSelector).translateInline(options), - $submitButton = $('body').find('.action-primary'); + $submitButton = $('body').find('.action-primary'), + originalAjax = $.ajax; $.ajax = jasmine.createSpy().and.callFake(function (request) { expect(request.url).toBe(options.ajaxUrl); @@ -94,6 +95,7 @@ define([ translateInline.trigger('edit.editTrigger'); $submitButton.trigger('click'); + $.ajax = originalAjax; }); it('Check translation destroy', function () { From c5a17220566dc39e803fd982c7a9f0cd9a3bc8d3 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Wed, 20 Dec 2017 19:30:07 +0200 Subject: [PATCH 26/32] magento/magento2#12342: JSTestDriver removal - Fix loader.test.js and removed JsTestDriver equivalent. --- .../mage/loader/jquery-loader-test.js | 73 --------------- .../testsuite/mage/loader/loader-test.js | 93 ------------------- .../testsuite/mage/loader/loader.html | 25 ----- .../js/jasmine/tests/lib/mage/loader.test.js | 79 ++++++++++++++++ 4 files changed, 79 insertions(+), 191 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html create mode 100644 dev/tests/js/jasmine/tests/lib/mage/loader.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js deleted file mode 100644 index 174a4efc14da1..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TestCase('options', function() { - expect(3); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - element.loader('show'); - equal( element.find('p').text(), 'Please wait...', '.loader() text matches' ); - equal( element.find('img').prop('src').split('/').pop(), 'icon.gif', '.loader() icons match' ); - equal( element.find('img').prop('alt'), 'Loading...', '.loader() image alt text matches' ); - element.loader('destroy'); - -}); - -TestCase( 'element init', function() { - expect(1); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - element.loader('show'); - equal(element.is(':mage-loader'), true, '.loader() init on element'); - element.loader('destroy'); - -}); - -TestCase( 'body init', function() { - expect(1); - - //Initialize Loader on Body - var body = $('body').loader(); - body.loader('show'); - equal(body.is(':mage-loader'), true, '.loader() init on body'); - body.loader('destroy'); -}); - -TestCase( 'show/hide', function() { - expect(3); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - - //Loader show - element.loader('show'); - equal($('.loading-mask').is(':visible'), true, '.loader() open'); - - //Loader hide - element.loader('hide'); - equal($('.loading-mask').is( ":hidden" ), true, '.loader() closed' ); - - //Loader hide on process complete - element.loader('show'); - element.trigger('processStop'); - equal($('.loading-mask').is('visible'), false, '.loader() closed after process'); - - element.loader('destroy'); - -}); - -TestCase( 'destroy', function() { - expect(1); - - var element = $("#loader").loader(); - element.loader('show'); - element.loader('destroy'); - equal( $('.loading-mask').is(':visible'), false, '.loader() destroyed'); - -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js deleted file mode 100644 index 3dd08f57ab8b3..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -LoaderTest = TestCase('LoaderTest'); -LoaderTest.prototype.setUp = function() { - /*:DOC +=
*/ -}; -LoaderTest.prototype.tearDown = function() { - var loaderInstance = jQuery('#loader').data('loader'); - if(loaderInstance && loaderInstance.destroy) { - loaderInstance.destroy(); - } -}; -LoaderTest.prototype.getInstance = function() { - return jQuery('#loader').data('loader'); -}; -LoaderTest.prototype.testInit = function() { - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, div.is(':mage-loader')); -}; -// @TODO Need to be fixed to avoid errors on the bamboo server in context of MAGETWO-5085 ticket -/*LoaderTest.prototype._testCreateOnBeforeSend = function() { - /*:DOC +=
*/ -/* var loader = jQuery('#loader').trigger('ajaxSend'); - assertEquals(true, loader.is(':mage-loader')); - loader.loader('destroy'); -};*/ -LoaderTest.prototype.testLoaderOnBody = function() { - var body = jQuery('body').loader(); - body.loader('show'); - assertEquals(true, jQuery('body div:first').is('.loading-mask')); - body.loader('destroy'); -}; -LoaderTest.prototype.testLoaderOnDOMElement = function() { - var div = jQuery('#loader').loader(), - loaderInstance = this.getInstance(); - div.loader('show'); - assertEquals(true, div.find(':first-child').is(loaderInstance.spinner)); -}; -LoaderTest.prototype.testLoaderOptions = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader({ - icon: 'icon.gif', - texts: { - loaderText: 'Loader Text', - imgAlt: 'Image Alt Text' - } - }), - loaderInstance = this.getInstance(); - div.loader('show'); - assertEquals('icon.gif', loaderInstance.spinner.find('img').attr('src')); - assertEquals('Image Alt Text', loaderInstance.spinner.find('img').attr('alt')); - assertEquals('Loader Text', loaderInstance.spinner.find('div.popup-inner').text()); - div.loader('destroy'); - div.loader({ - template:'
' - }); - div.loader('show'); - loaderInstance = this.getInstance(); - assertEquals(true, loaderInstance.spinner.is('#test-template')); - div.loader('destroy'); -}; -LoaderTest.prototype.testHideOnComplete = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - loaderIsVisible = jQuery('.loading-mask').is(':visible'); - div.trigger('processStop'); - assertEquals(false, jQuery('.loading-mask').is(':visible') === loaderIsVisible); -}; -LoaderTest.prototype.testRender = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, $('.loading-mask').is(':visible')); -}; -LoaderTest.prototype.testShowHide = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, $('.loading-mask').is(':visible')); - div.loader('hide'); - assertEquals(false, $('.loading-mask').is(':visible')); -}; -LoaderTest.prototype.testDestroy = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(), - loaderExist = div.is(':mage-loader'); - div.loader('destroy'); - assertEquals(false, div.is(':mage-loader') === loaderExist); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html deleted file mode 100644 index 362dec7138276..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Unit test - - - - - - - - - - - -
-
- - diff --git a/dev/tests/js/jasmine/tests/lib/mage/loader.test.js b/dev/tests/js/jasmine/tests/lib/mage/loader.test.js new file mode 100644 index 0000000000000..93dd2ee91902c --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/loader.test.js @@ -0,0 +1,79 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/loader' +], function ($) { + 'use strict'; + + describe('mage/loader', function () { + describe('Check loader', function () { + var loaderSelector = '#loader'; + + beforeEach(function () { + var $loader = $('
'); + + $('body').append($loader); + }); + + afterEach(function () { + $(loaderSelector).remove(); + $(loaderSelector).loader('destroy'); + }); + + it('Check that loader inited', function () { + var $loader = $(loaderSelector).loader({ + icon: 'icon.gif' + }); + + $loader.loader('show'); + + expect($loader.is(':mage-loader')).toBe(true); + expect($loader.find('p').text()).toBe('Please wait...'); + expect($loader.find('img').prop('src').split('/').pop()).toBe('icon.gif'); + expect($loader.find('img').prop('alt')).toBe('Loading...'); + }); + + it('Body init', function () { + var $loader = $('body').loader(); + + $loader.loader('show'); + + expect($loader.is(':mage-loader')).toBe(true); + $loader.loader('destroy'); + }); + + it('Check show/hide', function () { + var $loader = $(loaderSelector).loader(), + $loadingMask; + + $loader.loader('show'); + $loadingMask = $('.loading-mask'); + expect($loadingMask.is(':visible')).toBe(true); + + $loader.loader('hide'); + expect($loadingMask.is(':hidden')).toBe(true); + + $loader.loader('show'); + $loader.trigger('processStop'); + expect($loadingMask.is(':hidden')).toBe(true); + }); + + it('Check destroy', function () { + var $loader = $(loaderSelector).loader(), + $loadingMask; + + $loader.loader('show'); + $loadingMask = $('.loading-mask'); + expect($loadingMask.is(':visible')).toBe(true); + + $loader.loader('destroy'); + expect($loadingMask.is(':visible')).toBe(false); + }); + }); + }); +}); From 40e6981e5a51bf3aeaf213cef49d37376070503c Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 21 Dec 2017 18:45:11 +0200 Subject: [PATCH 27/32] magento/magento2#12342: JSTestDriver removal - Added suggest.test.js and removed JsTestDriver equivalent. - Added tree-suggest.test.js and removed JsTestDriver equivalent. --- .../testsuite/mage/suggest/suggest-test.js | 952 ------------------ .../mage/suggest/tree-suggest-test.js | 71 -- .../tests/lib/mage/backend/suggest.test.js | 461 +++++++++ .../lib/mage/backend/tree-suggest.test.js | 52 + 4 files changed, 513 insertions(+), 1023 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js create mode 100644 dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js deleted file mode 100644 index 4b2b961f753ee..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js +++ /dev/null @@ -1,952 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -SuggestTest = TestCase('SuggestTest'); -SuggestTest.prototype.setUp = function() { - /*:DOC += */ - this.suggestElement = jQuery('#suggest'); -}; -SuggestTest.prototype.tearDown = function() { - this.suggestDestroy(); -}; -SuggestTest.prototype.suggestDestroy = function() { - if(this.suggestElement.data('suggest')) { - this.suggestElement.suggest('destroy'); - } -}; -SuggestTest.prototype.suggestCreate = function(options, element) { - return (element || this.suggestElement).suggest(options || {} ).data('suggest'); -}; -SuggestTest.prototype.uiHash = { - item: { - id: 1, - label: 'Test Label' - } -}; - -SuggestTest.prototype.testInit = function() { - this.suggestElement.suggest(); - assertTrue(this.suggestElement.is(':mage-suggest')); -}; -SuggestTest.prototype.testCreate = function() { - var suggestOptions = { - controls: { - selector: '.test', - eventsMap: { - focus: ['testfocus'], - blur: ['testblur'], - select: ['testselect'] - } - }, - showRecent: true, - storageKey: 'jsTestDriver-test-suggest-recent', - multiselect: true - }, - recentItems = [{ - id: "1", - "label": "TestLabel1" - }, - { - id: "2", - label: "TestLabel2" - }], - setTemplateExecuted, - prepareValueFieldExecuted, - renderExecuted, - bindExecuted; - - if(window.localStorage) { - localStorage.setItem(suggestOptions.storageKey, JSON.stringify(recentItems)); - } - - var suggestInstance = this.suggestCreate(suggestOptions), - nonSelectedItem = {id: '', label: ''}; - - assertEquals(null, suggestInstance._term); - assertEquals(suggestInstance._nonSelectedItem, nonSelectedItem); - assertNull(suggestInstance._renderedContext); - assertEquals(suggestInstance._selectedItem, nonSelectedItem); - var control = suggestInstance.options.controls; - assertEquals(suggestInstance._control, control); - assertEquals(suggestInstance._recentItems, window.localStorage ? recentItems : []); - assertTrue(suggestInstance.valueField.is(':hidden')); - if(window.localStorage) { - localStorage.removeItem(suggestOptions.storageKey); - } -}; -SuggestTest.prototype.testRender = function() { - var suggestOptions = { - dropdownWrapper: '
', - className: 'test-suggest', - inputWrapper: '
' - }; - - var suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - - assertTrue(suggestInstance.dropdown.hasClass('wrapper-test')); - assertTrue(suggestInstance.dropdown.is(':hidden')); - assertTrue(suggestInstance.element.closest('.test-input-wrapper').size() > 0); - assertTrue(suggestInstance.element.closest('.' + suggestOptions.className).size() > 0); - assertEquals(suggestInstance.element.attr('autocomplete'), 'off'); - - suggestOptions.appendMethod = 'before'; - this.suggestDestroy(); - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - assertTrue(suggestInstance.element.prev().is(suggestInstance.dropdown)); - - suggestOptions.appendMethod = 'after'; - this.suggestDestroy(); - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - assertTrue(suggestInstance.element.next().is(suggestInstance.dropdown)); -}; -SuggestTest.prototype.testCreateValueField = function() { - var suggestInstance = this.suggestCreate(), - valueField = suggestInstance._createValueField(); - assertTrue(valueField.is('input')); - assertTrue(valueField.is(':hidden')); - this.suggestDestroy(); - - suggestInstance = this.suggestCreate({multiselect: true}); - valueField = suggestInstance._createValueField(); - assertTrue(valueField.is('select')); - assertTrue(valueField.is(':hidden')); - assertEquals(valueField.attr('multiple'), 'multiple'); -}; -SuggestTest.prototype.testPrepareValueField = function() { - var suggestInstance = this.suggestCreate(), - suggestName = this.suggestElement.attr('name'); - suggestInstance._prepareValueField(); - - assertNotUndefined(suggestInstance.valueField); - assertTrue(suggestInstance.element.prev().is(suggestInstance.valueField)); - assertUndefined(suggestInstance.element.attr('name')); - assertEquals(suggestInstance.valueField.attr('name'), suggestName); - this.suggestDestroy(); - - - var valueField = jQuery(''); - jQuery('body').append(valueField); - suggestInstance = this.suggestCreate({valueField: '#suggest-single-select-value'}); - assertTrue(suggestInstance.valueField.is(valueField)); -}; -SuggestTest.prototype.testDestroy = function() { - var suggestOptions = { - inputWrapper: '
', - valueField: null - }, - suggestInstance = this.suggestCreate(suggestOptions), - suggestName = suggestInstance.valueField.attr('name'); - - assertNotUndefined(suggestInstance.dropdown); - assertNotUndefined(suggestInstance.valueField); - assertUndefined(this.suggestElement.attr('name')); - - this.suggestElement.suggest('destroy'); - - assertEquals(this.suggestElement.closest('.test-input-wrapper').length, 0); - assertUndefined(this.suggestElement.attr('autocomplete')); - assertEquals(this.suggestElement.attr('name'), suggestName); - assertFalse(suggestInstance.valueField.parents('html').length > 0); - assertFalse(suggestInstance.dropdown.parents('html').length > 0); -}; -SuggestTest.prototype.testValue = function() { - var value = 'test-value'; - this.suggestElement.val(value); - jQuery('body').append('
' + value + '
'); - - var suggestInputInsatnce = this.suggestCreate(), - suggestDivInsatnce = this.suggestCreate(null, jQuery('#suggest-div')); - - assertEquals(suggestInputInsatnce._value(), value); - assertEquals(suggestDivInsatnce._value(), value); -}; -SuggestTest.prototype.testProxyEvents = function() { - var fakeEvent = $.extend({}, $.Event('keydown'), { - ctrlKey: false, - keyCode: $.ui.keyCode.ENTER, - which: $.ui.keyCode.ENTER - }), - suggestInstance = this.suggestCreate({controls: {selector: null}}), - ctrlKey, - keyCode, - which; - - suggestInstance.dropdown.on('keydown', function(e) { - ctrlKey = e.ctrlKey; - keyCode = e.keyCode; - which = e.which; - }); - - suggestInstance._proxyEvents(fakeEvent); - - assertEquals(ctrlKey, fakeEvent.ctrlKey); - assertEquals(keyCode, fakeEvent.keyCode); - assertEquals(which, fakeEvent.which); -}; -SuggestTest.prototype.testBind = function() { - var eventIsBinded = false, - suggestOptions = { - events: { - click: function() { - eventIsBinded = true; - } - } - }; - this.suggestCreate(suggestOptions); - - this.suggestElement.trigger('click'); - assertTrue(eventIsBinded); -}; -SuggestTest.prototype.testChange = function() { - var changeIsTriggered, - suggestInstance = this.suggestCreate(); - - suggestInstance._term = 'changed'; - this.suggestElement.on('suggestchange', function(e) { - changeIsTriggered = true; - }); - - suggestInstance._change($.Event('click')); - assertTrue(changeIsTriggered); -}; -SuggestTest.prototype.testBindDropdown = function() { - var suggestOptions = { - controls: { - eventsMap: { - focus: ['testFocus'], - blur: ['testBlur'], - select: ['testSelect'] - } - } - }, - suggestInstance = this.suggestCreate(suggestOptions), - focusTriggered, - blurTriggered, - selectTriggered; - - suggestInstance._onSelectItem = function() { - selectTriggered = true; - }; - suggestInstance._focusItem = function() { - focusTriggered = true; - }; - suggestInstance._blurItem = function() { - blurTriggered = true; - }; - suggestInstance._bindDropdown(); - - suggestInstance.dropdown.trigger('testFocus'); - suggestInstance.dropdown.trigger('testBlur'); - suggestInstance.dropdown.trigger('testSelect'); - - assertTrue(focusTriggered); - assertTrue(blurTriggered); - assertTrue(selectTriggered); -}; -SuggestTest.prototype.testTrigger = function() { - var propogationStopped = true, - suggestInstance = this.suggestCreate(); - - this.suggestElement - .on('suggesttestevent', function() { - return false; - }); - this.suggestElement.parent().on('suggesttestevent', function() { - propogationStopped = false; - }); - suggestInstance._trigger('testevent'); - - assertTrue(propogationStopped); -}; -SuggestTest.prototype.testFocusItem = function() { - var focusUiParam = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.on('suggestfocus', function(e, ui) { - focusUiParam = ui; - }); - - assertUndefined(suggestInstance._focused); - assertEquals(suggestInstance.element.val(), ''); - - suggestInstance._focusItem($.Event('focus'), this.uiHash); - assertEquals(suggestInstance._focused, this.uiHash.item); - assertEquals(focusUiParam, this.uiHash); - assertEquals(suggestInstance.element.val(), this.uiHash.item.label); -}; -SuggestTest.prototype.testBlurItem = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._focusItem($.Event('focus'), this.uiHash); - assertEquals(suggestInstance._focused, this.uiHash.item); - assertEquals(suggestInstance.element.val(), this.uiHash.item.label); - - suggestInstance._blurItem(); - assertNull(suggestInstance._focused); - //assertEquals(suggestInstance.element.val(), suggestInstance._term.toString()); -}; -SuggestTest.prototype.testOnSelectItem = function() { - var item = this.uiHash.item, - beforeSelect, - beforeSelectUI, - beforeSelectPropagationStopped = true, - select, - selectUI, - selectPropagationStopped = true, - suggestInstance = this.suggestCreate(); - - suggestInstance._focused = item; - this.suggestElement - .on('suggestbeforeselect', function(e, ui) { - beforeSelect = true; - beforeSelectUI = ui; - }) - .on('suggestselect', function(e, ui) { - select = true; - selectUI = ui; - }) - .parent() - .on('suggestbeforeselect', function() { - beforeSelectPropagationStopped = false; - }) - .on('suggestselect', function() { - selectPropagationStopped = false; - }); - - suggestInstance._onSelectItem($.Event('select')); - - assertTrue(beforeSelect); - assertTrue(select); - assertFalse(beforeSelectPropagationStopped); - assertFalse(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertEquals(selectUI.item, item); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement - .on('suggestbeforeselect.returnfalse', function(e, ui) { - return false; - }); - - suggestInstance._focused = item; - suggestInstance._onSelectItem($.Event('select')); - assertTrue(beforeSelect); - assertNull(select); - assertTrue(beforeSelectPropagationStopped); - assertTrue(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertNull(selectUI); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement - .off('suggestbeforeselect.returnfalse') - .on('suggestselect.returnfalse', function() { - return false; - }); - - suggestInstance._focused = item; - suggestInstance._onSelectItem($.Event('select')); - assertTrue(beforeSelect); - assertTrue(select); - assertFalse(beforeSelectPropagationStopped); - assertTrue(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertEquals(selectUI.item, item); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement.off('suggestselect.returnfalse'); - var event = $.Event('select'); - event.target = this.suggestElement[0]; - - suggestInstance._onSelectItem(event, item); - assertEquals(suggestInstance._selectedItem, item); -}; -SuggestTest.prototype.testSelectItem = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; - suggestInstance.valueField.val(''); - - suggestInstance._selectItem($.Event('select')); - assertNull(suggestInstance._selectedItem); - assertNull(suggestInstance._term); - assertEquals(suggestInstance.valueField.val(), ''); - - suggestInstance._focused = this.uiHash.item; - - suggestInstance._selectItem($.Event('select')); - assertEquals(suggestInstance._selectedItem, suggestInstance._focused); - assertEquals(suggestInstance._term, suggestInstance._focused.label); - assertEquals(suggestInstance.valueField.val(), suggestInstance._focused.id); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - this.suggestDestroy(); - - var suggestOptions; - if(window.localStorage) { - suggestOptions = { - showRecent: true, - storageKey: 'jsTestDriver-test-suggest-recent' - }; - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._focused = this.uiHash.item; - - suggestInstance._selectItem($.Event('select')); - - var storedItem = localStorage.getItem(suggestOptions.storageKey); - assertEquals(storedItem, JSON.stringify([this.uiHash.item])); - localStorage.removeItem(suggestOptions.storageKey); - } -}; -SuggestTest.prototype.testSelectItemMultiselect = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - - suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; - suggestInstance.valueField.val(''); - - suggestInstance._selectItem($.Event('select')); - assertNull(suggestInstance._selectedItem); - assertNull(suggestInstance._term); - assertFalse(suggestInstance.valueField.find('option').length > 0); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - suggestInstance._focused = this.uiHash.item; - var selectedElement = jQuery('
'); - var event = $.Event('select'); - event.target = selectedElement[0]; - - suggestInstance._selectItem(event); - assertEquals(suggestInstance._selectedItem, suggestInstance._focused); - assertEquals(suggestInstance._term, ''); - assertTrue(suggestInstance._getOption(suggestInstance._focused).length > 0); - assertTrue(selectedElement.hasClass(suggestInstance.options.selectedClass)); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - suggestInstance._selectItem(event); - assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem); - assertFalse(suggestInstance._getOption(suggestInstance._focused).length > 0); - assertFalse(selectedElement.hasClass(suggestInstance.options.selectedClass)); - assertTrue(suggestInstance.dropdown.is(':hidden')); -}; -SuggestTest.prototype.testResetSuggestValue = function() { - var suggestInstance = this.suggestCreate(); - suggestInstance.valueField.val('test'); - suggestInstance._resetSuggestValue(); - assertEquals(suggestInstance.valueField.val(), suggestInstance._nonSelectedItem.id); -}; -SuggestTest.prototype.testResetSuggestValueMultiselect = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - suggestInstance._focused = this.uiHash.item; - var selectedElement = jQuery('
'); - var event = $.Event('select'); - event.target = selectedElement[0]; - - suggestInstance._selectItem(event); - suggestInstance._resetSuggestValue(); - - var suggestValue = suggestInstance.valueField.val(); - assertArray(suggestValue); - assertNotUndefined(suggestValue[0]); - assertEquals(suggestValue[0], this.uiHash.item.id); -}; -SuggestTest.prototype.testReadItemData = function() { - var testElement = jQuery('
'), - suggestInstance = this.suggestCreate(); - assertEquals(suggestInstance._readItemData(testElement), suggestInstance._nonSelectedItem); - testElement.data('suggestOption', 'test'); - assertEquals(suggestInstance._readItemData(testElement), 'test'); -}; -SuggestTest.prototype.testIsDropdownShown = function() { - var suggestInstance = this.suggestCreate(); - suggestInstance.dropdown.hide(); - assertFalse(suggestInstance.isDropdownShown()); - suggestInstance.dropdown.show(); - assertTrue(suggestInstance.isDropdownShown()); -}; -SuggestTest.prototype.testOpen = function() { - var openTriggered = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.on('suggestopen', function() { - openTriggered = true; - }); - - suggestInstance.dropdown.show(); - suggestInstance.open($.Event('open')); - assertFalse(openTriggered); - - suggestInstance.dropdown.hide(); - suggestInstance.open($.Event('open')); - assertTrue(openTriggered); - assertTrue(suggestInstance.dropdown.is(':visible')); -}; -SuggestTest.prototype.testClose = function() { - var closeTriggered = false, - suggestInstance = this.suggestCreate(); - - suggestInstance.element.val('test'); - suggestInstance._renderedContext = 'test'; - suggestInstance.dropdown.show().append('
'); - - this.suggestElement.on('suggestclose', function() { - closeTriggered = true; - }); - - suggestInstance.close($.Event('close')); - assertNull(suggestInstance._renderedContext); - assertTrue(suggestInstance.dropdown.is(':hidden')); - assertFalse(suggestInstance.dropdown.children().length > 0); - assertTrue(closeTriggered); -}; -SuggestTest.prototype.testSetTemplate = function() { - /*:DOC += */ - var suggestInstance = this.suggestCreate({template: '
<%= data.test %>
'}), - tmpl, - html; - - tmpl = suggestInstance.templates[suggestInstance.templateName] - - html = jQuery('
').append(tmpl({ - data: { - test: 'test' - } - })).html(); - - assertEquals(html, '
test
'); - - suggestInstance = this.suggestCreate({ - template: '#test-template' - }); - - tmpl = suggestInstance.templates[suggestInstance.templateName]; - - html = jQuery('
').append(tmpl({ - data: { - test: 'test' - } - })).html(); - - assertEquals(html, '
test
'); -}; -SuggestTest.prototype.testSearch = function() { - var searchTriggered = false, - seachPropagationStopped = true, - suggestInstance = this.suggestCreate(); - - this.suggestElement - .on('suggestsearch', function() { - searchTriggered = true; - }) - .parent() - .on('suggestsearch', function() { - seachPropagationStopped = false; - }); - - suggestInstance._term = suggestInstance._value(); - suggestInstance._selectedItem = null; - - suggestInstance.preventBlur = true; - suggestInstance.search($.Event('search')); - - assertNull(suggestInstance._selectedItem); - assertFalse(searchTriggered); - suggestInstance.preventBlur = false; - - this.suggestElement.val('test'); - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._term, suggestInstance._value()); - assertTrue(searchTriggered); - assertFalse(seachPropagationStopped); - - searchTriggered = false; - seachPropagationStopped = true; - suggestInstance._selectedItem = null; - suggestInstance.options.minLength = 10; - this.suggestElement.val('testtest'); - - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem); - assertEquals(suggestInstance.valueField.val(), suggestInstance._selectedItem.id); - assertFalse(searchTriggered); - - searchTriggered = false; - seachPropagationStopped = true; - suggestInstance._selectedItem = null; - suggestInstance.options.minLength = 1; - this.suggestElement.val('test'); - - this.suggestElement - .on('suggestsearch.returnfalse', function() { - return false; - }); - - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._term, suggestInstance._value()); - assertTrue(searchTriggered); - assertTrue(seachPropagationStopped); -}; -SuggestTest.prototype.testUderscoreSearch = function() { - var sourceLaunched = false, - sorceTerm = null, - responceExists = false, - suggestOptions = { - source: function(term, response){ - sourceLaunched = true; - sorceTerm = term; - responceExists = (response && jQuery.type(response) === 'function'); - }, - delay: null - }, - suggestInstance = this.suggestCreate(suggestOptions); - - suggestInstance._search($.Event('search'), 'test', {}); - assertTrue(sourceLaunched); - assertEquals(sorceTerm, 'test'); - assertTrue(responceExists); - assertTrue(this.suggestElement.hasClass(suggestInstance.options.loadingClass)); - assertUndefined(suggestInstance._searchTimeout); - - suggestInstance.options.delay = 100; - suggestInstance._search($.Event('search'), 'test', {}); - assertNotUndefined(suggestInstance._searchTimeout); -}; -SuggestTest.prototype.testPrepareDropdownContext = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._items = [this.uiHash.item]; - suggestInstance._term = 'test'; - suggestInstance._selectedItem = this.uiHash.item; - - var context = suggestInstance._prepareDropdownContext({}); - - assertEquals(context.items, suggestInstance._items); - assertEquals(context.term, suggestInstance._term); - assertEquals(context.optionData(this.uiHash.item), - 'data-suggest-option="' + JSON.stringify(this.uiHash.item).replace(/"/g, '"') + '"'); - assertTrue(context.itemSelected(this.uiHash.item)); - assertNotUndefined(context.noRecordsText); - assertFalse(context.recentShown()); - assertNotUndefined(context.recentTitle); - assertNotUndefined(context.showAllTitle); - assertFalse(context.allShown()); -}; -SuggestTest.prototype.testIsItemSelected = function() { - var suggestInstance = this.suggestCreate(); - assertFalse(suggestInstance._isItemSelected(this.uiHash.item)); - suggestInstance._selectedItem = this.uiHash.item; - assertTrue(suggestInstance._isItemSelected(this.uiHash.item)); - this.suggestDestroy(); - - suggestInstance = this.suggestCreate({multiselect: true}); - assertFalse(suggestInstance._isItemSelected(this.uiHash.item)); - suggestInstance.valueField.append(''); - assertTrue(suggestInstance._isItemSelected(this.uiHash.item)); -}; -SuggestTest.prototype.testRenderDropdown = function() { - var testContext = { - test: 'test' - }, - contentUpdatedTriggered = false, - suggestOptions = { - template: '
<%= data.test %>
' - }, - suggestInstance = this.suggestCreate(suggestOptions); - - suggestInstance.dropdown.on('contentUpdated', function() { - contentUpdatedTriggered = true; - }); - suggestInstance.element.addClass(suggestInstance.options.loadingClass); - - suggestInstance._renderDropdown(null, [this.uiHash.item], testContext); - - assertEquals(suggestInstance._items, [this.uiHash.item]); - assertEquals(suggestInstance.dropdown.html(), '
test
'); - assertTrue(contentUpdatedTriggered); - assertEquals(suggestInstance._renderedContext, suggestInstance._prepareDropdownContext(testContext)); - assertFalse(suggestInstance.element.hasClass(suggestInstance.options.loadingClass)); - assertTrue(suggestInstance.dropdown.is(':visible')); -}; -SuggestTest.prototype.testProcessResponse = function() { - var testContext = { - test: 'test' - }, - responseTriggered = false, - suggestOptions = { - template: '
<%= data.test %>
' - }, - responcePropagationStopped = true, - rendererExists, - responseData, - suggestInstance = this.suggestCreate(suggestOptions); - - this.suggestElement - .on('suggestresponse', function(e, data, renderer) { - responseTriggered = true; - rendererExists = (renderer && jQuery.type(renderer) === 'function'); - responseData = data; - }) - .parent() - .on('suggestresponse', function() { - responcePropagationStopped = false; - }); - suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext); - - assertTrue(responseTriggered); - assertTrue(rendererExists); - assertEquals(responseData, [this.uiHash.item]); - assertFalse(responcePropagationStopped); - assertEquals(suggestInstance.dropdown.html(), '
test
'); - - suggestInstance.dropdown.empty(); - this.suggestElement - .on('suggestresponse.returnfalse', function() { - return false; - }); - responcePropagationStopped = true; - - suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext); - - assertTrue(responcePropagationStopped); - assertFalse(suggestInstance.dropdown.children().tength > 0); -}; -SuggestTest.prototype.testSource = function() { - var sourceArray = [this.uiHash.item], - sourceUrl = 'www.test.url', - sourceFuncExecuted = false, - responseExecuted = false, - responseItems = null, - sourceFuncTerm = "", - sourceFuncResponse = null, - ajaxData = '', - ajaxUrl = '', - sourceFunc = function(term, response) { - sourceFuncExecuted = true; - sourceFuncTerm = term; - sourceFuncResponse = (response && jQuery.type(response) === 'function'); - }, - response = function (items) { - responseExecuted = true; - responseItems = items; - }; - - var suggestInstance = this.suggestCreate({ - source: sourceArray - }); - - suggestInstance._source('test', response); - - assertTrue(responseExecuted); - assertEquals(responseItems, sourceArray); - this.suggestDestroy(); - - responseExecuted = false; - responseItems = null; - - suggestInstance = this.suggestCreate({ - source: sourceUrl, - ajaxOptions: { - beforeSend: function(xhr, settings) { - xhr.abort(); - ajaxData = settings.data; - ajaxUrl = settings.url; - settings.success(sourceArray); - } - }, - termAjaxArgument: 'test' - }); - suggestInstance._source('test', response); - - assertTrue(responseExecuted); - assertEquals(responseItems, sourceArray); - assertEquals(ajaxData, 'test=test'); - assertEquals(ajaxUrl, sourceUrl); - this.suggestDestroy(); - - responseExecuted = false; - responseItems = null; - - suggestInstance = this.suggestCreate({ - source: sourceFunc - }); - suggestInstance._source('test', response); - - assertTrue(sourceFuncExecuted); - assertEquals(sourceFuncTerm, 'test'); - assertTrue(sourceFuncResponse); -}; -SuggestTest.prototype.testAbortSearch = function() { - var searchAborted = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.addClass(suggestInstance.options.loadingClass); - suggestInstance._xhr = { - abort: function() { - searchAborted = true; - } - }; - - suggestInstance._abortSearch(); - - assertFalse(this.suggestElement.hasClass(suggestInstance.options.loadingClass)); - assertTrue(searchAborted); -}; -SuggestTest.prototype.testShowAll = function() { - var searchAborted, - showAllTerm, - showAllContext, - suggestInstance = this.suggestCreate(); - suggestInstance._abortSearch = function() { - searchAborted = true; - }; - suggestInstance._search = function(e, term, context) { - showAllTerm = term; - showAllContext = context; - }; - - suggestInstance._showAll(jQuery.Event('showAll')); - - assertTrue(searchAborted); - assertEquals(showAllTerm, ''); - assertEquals(showAllContext, {_allShown: true}); -}; -SuggestTest.prototype.testAddRecent = function() { - var recentItems = [ - {id: 2, label: 'Test Label 2'}, - {id: 3, label: 'Test Label 3'} - ], - suggestInstance = this.suggestCreate(); - - suggestInstance._recentItems = recentItems; - suggestInstance.options.storageKey = 'jsTestDriver-test-suggest-recent'; - suggestInstance._addRecent(this.uiHash.item); - - recentItems.unshift(this.uiHash.item); - assertEquals(recentItems, suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems)); - } - - suggestInstance._addRecent(this.uiHash.item); - assertEquals(recentItems, suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems)); - } - - suggestInstance.options.storageLimit = 1; - var newRecentItem = {id: 4, label: 'Test Label 4'}; - suggestInstance._addRecent(newRecentItem); - - assertEquals([newRecentItem], suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify([newRecentItem])); - localStorage.removeItem(suggestInstance.options.storageKey); - } -}; -SuggestTest.prototype.testRenderMultiselect = function() { - var suggestOptions = { - multiselect: true, - multiSuggestWrapper: '
' - }, - suggestInstance = this.suggestCreate(suggestOptions); - - assertTrue(this.suggestElement.closest('[data-role="parent-choice-element"]').is('#test-multisuggest-wrapper')); - assertTrue(suggestInstance.elementWrapper.is('#test-multisuggest-wrapper')); -}; -SuggestTest.prototype.testGetOptions = function() { - var suggestInstance = this.suggestCreate(); - - assertFalse(suggestInstance._getOptions().length > 0); - - var option = jQuery(''); - suggestInstance.valueField.append(option); - assertTrue(suggestInstance._getOptions().is(option)); -}; -SuggestTest.prototype.testFilterSelected = function() { - var items = [this.uiHash.item, {id: 2, label: 'Test Label2'}], - suggestInstance = this.suggestCreate(); - - suggestInstance.valueField.append(''); - assertEquals(suggestInstance._filterSelected(items), [this.uiHash.item]); -}; -SuggestTest.prototype.testCreateOption = function() { - var suggestInstance = this.suggestCreate(); - - var option = suggestInstance._createOption(this.uiHash.item); - assertEquals(option.val(), "1"); - assertEquals(option.prop('selected'), true); - assertEquals(option.text(), "Test Label"); - assertNotUndefined(option.data('renderedOption')); -}; -SuggestTest.prototype.testAddOption = function() { - var selectTarget = jQuery('
'), - event = jQuery.Event('add'), - suggestInstance = this.suggestCreate(); - - event.target = selectTarget[0]; - suggestInstance._addOption(event, this.uiHash.item); - - var option = suggestInstance.valueField.find('option[value=' + this.uiHash.item.id + ']'); - assertTrue(option.length > 0); - assertTrue(option.data('selectTarget').is(selectTarget)); -}; -SuggestTest.prototype.testGetOption = function() { - var suggestInstance = this.suggestCreate(); - - assertFalse(suggestInstance._getOption(this.uiHash.item).length > 0); - - var option = jQuery(''); - suggestInstance.valueField.append(option); - assertTrue(suggestInstance._getOption(this.uiHash.item).length > 0); - assertTrue(suggestInstance._getOption(option).length > 0); -}; -SuggestTest.prototype.testRemoveLastAdded = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - - suggestInstance._addOption({}, this.uiHash.item); - assertTrue(suggestInstance.valueField.find('option').length > 0); - suggestInstance._removeLastAdded(); - assertFalse(suggestInstance.valueField.find('option').length > 0); -}; -SuggestTest.prototype.testRemoveOption = function() { - var selectTarget = jQuery('
'), - event = jQuery.Event('select'), - suggestInstance = this.suggestCreate({multiselect: true}); - - selectTarget.addClass(suggestInstance.options.selectedClass); - event.target = selectTarget[0]; - - suggestInstance._addOption(event, this.uiHash.item); - assertTrue(suggestInstance.valueField.find('option').length > 0); - suggestInstance.removeOption(event, this.uiHash.item); - assertFalse(suggestInstance.valueField.find('option').length > 0); - assertFalse(selectTarget.hasClass(suggestInstance.options.selectedClass)); -}; -SuggestTest.prototype.testRenderOption = function() { - var suggestInstance = this.suggestCreate(), - choiceTmpl; - - suggestInstance.elementWrapper = jQuery('
').appendTo('body'); - - choiceTmpl = mageTemplate(suggestInstance.options.choiceTemplate, { - text: this.uiHash.item.label - }); - - var testOption = jQuery(choiceTmpl), - option = suggestInstance._renderOption(this.uiHash.item); - - assertTrue(option.next().is(suggestInstance.elementWrapper)); - assertEquals(jQuery('
').append(testOption).html(), jQuery('
').append(option).html()); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js deleted file mode 100644 index 2a63c6953ef87..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -TreeSuggestTest = TestCase('TreeSuggestTest'); -TreeSuggestTest.prototype.setUp = function() { - /*:DOC += */ - this.suggestElement = jQuery('#tree-suggest'); -}; -TreeSuggestTest.prototype.tearDown = function() { - this.treeSuggestDestroy(); -}; -TreeSuggestTest.prototype.treeSuggestDestroy = function() { - if(this.suggestElement.data('treeSuggest')) { - this.suggestElement.treeSuggest('destroy'); - } -}; -TreeSuggestTest.prototype.treeSuggestCreate = function(options, element) { - return (element || this.suggestElement).treeSuggest(options || {} ).data('treeSuggest'); -}; -TreeSuggestTest.prototype.uiHash = { - item: { - id: 1, - label: 'Test Label' - } -}; -TreeSuggestTest.prototype.stub = function(instance, methodName, retVal) { - var d = $.Deferred(); - if(instance && instance[methodName]) { - instance[methodName] = function() { - d.resolve(arguments); - if(retVal) { - return retVal; - } - }; - } - return d.promise(); -}; - -TreeSuggestTest.prototype.testInit = function() { - var treeSuggestInstance = this.treeSuggestCreate(); - assertTrue(this.suggestElement.is(':mage-treeSuggest')); - assertEquals(treeSuggestInstance.widgetEventPrefix, 'suggest'); -}; - -TreeSuggestTest.prototype.testClose = function() { - var treeSuggestInstance = this.treeSuggestCreate(), - elementFocused = false; - treeSuggestInstance.element.on('focus', function() { - elementFocused = true; - }); - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(); - assertEquals(treeSuggestInstance.dropdown.text(), ''); - assertTrue(treeSuggestInstance.dropdown.is(':hidden')); - - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(jQuery.Event('select')); - assertEquals(treeSuggestInstance.dropdown.text(), ''); - assertTrue(treeSuggestInstance.dropdown.is(':hidden')); - - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(jQuery.Event('select_tree_node')); - assertEquals(treeSuggestInstance.dropdown.text(), 'test'); - assertTrue(treeSuggestInstance.dropdown.is(':visible')); -}; -TreeSuggestTest.prototype.testFilterSelected = function() { - var treeSuggestInstance = this.treeSuggestCreate(); - assertEquals(treeSuggestInstance._filterSelected([this.uiHash.item], {_allShown: true}), [this.uiHash.item]); -}; diff --git a/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js new file mode 100644 index 0000000000000..9460bcaa5636e --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js @@ -0,0 +1,461 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/backend/suggest' +], function ($) { + 'use strict'; + + describe('mage/backend/suggest', function () { + var suggestSelector = '#suggest'; + + beforeEach(function () { + var $suggest = $(''); + + $('body').append($suggest); + }); + + afterEach(function () { + $(suggestSelector).remove(); + $(suggestSelector).suggest('destroy'); + }); + + it('Check that suggest inited', function () { + var $suggest = $(suggestSelector).suggest(); + + expect($suggest.is(':mage-suggest')).toBe(true); + }); + + it('Check suggest create', function () { + var options = { + controls: { + selector: '.test', + eventsMap: { + focus: ['testfocus'], + blur: ['testblur'], + select: ['testselect'] + } + }, + showRecent: true, + storageKey: 'test-suggest-recent', + multiselect: true + }, + recentItems = [{ + id: '1', + label: 'TestLabel1' + }, + { + id: '2', + label: 'TestLabel2' + } + ], + nonSelectedItem = { + id: '', + label: '' + }, + suggestInstance; + + if (window.localStorage) { + localStorage.setItem(options.storageKey, JSON.stringify(recentItems)); + } + + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + + expect(suggestInstance._term).toBe(null); + expect(suggestInstance._nonSelectedItem).toEqual(nonSelectedItem); + expect(suggestInstance._renderedContext).toBe(null); + expect(suggestInstance._selectedItem).toEqual(nonSelectedItem); + expect(suggestInstance._control).toEqual(suggestInstance.options.controls); + expect(suggestInstance._recentItems).toEqual(window.localStorage ? recentItems : []); + expect(suggestInstance.valueField.is(':hidden')).toBe(true); + + if (window.localStorage) { + localStorage.removeItem(options.storageKey); + } + }); + + it('Check suggest render', function () { + var options = { + dropdownWrapper: '
', + className: 'test-suggest', + inputWrapper: '
' + }, + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + + suggestInstance._render(); + + expect(suggestInstance.dropdown.hasClass('wrapper-test')).toBe(true); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + expect(suggestInstance.element.closest('.test-input-wrapper').size()).toBeGreaterThan(0); + expect(suggestInstance.element.closest('.' + options.className).size()).toBeGreaterThan(0); + expect(suggestInstance.element.attr('autocomplete')).toBe('off'); + + options.appendMethod = 'before'; + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + suggestInstance._render(); + expect(suggestInstance.element.prev().is(suggestInstance.dropdown)).toBe(true); + + options.appendMethod = 'after'; + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + suggestInstance._render(); + expect(suggestInstance.element.next().is(suggestInstance.dropdown)).toBe(true); + }); + + it('Check suggest createValueField', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + valueField = suggestInstance._createValueField(); + + expect(valueField.is('input')).toBe(true); + expect(valueField.is(':hidden')).toBe(true); + + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest({ + multiselect: true + }).data('mage-suggest'); + valueField = suggestInstance._createValueField(); + + expect(valueField.is('select')).toBe(true); + expect(valueField.is(':hidden')).toBe(true); + expect(valueField.attr('multiple')).toBe('multiple'); + }); + + it('Check suggest prepareValueField', function () { + var $suggest = $(suggestSelector).suggest(), + suggestInstance = $suggest.data('mage-suggest'), + suggestName = $suggest.attr('name'); + + suggestInstance._prepareValueField(); + + expect(suggestInstance.valueField).not.toBe(true); + expect(suggestInstance.element.prev().is(suggestInstance.valueField)).toBe(true); + expect(suggestInstance.element.attr('name')).toBe(undefined); + expect(suggestInstance.valueField.attr('name')).toBe(suggestName); + }); + + it('Check suggest destroy', function () { + var options = { + inputWrapper: '
', + valueField: null + }, + $suggest = $(suggestSelector).suggest(options), + suggestInstance = $suggest.data('mage-suggest'), + suggestName = $suggest.attr('name'); + + expect(suggestInstance.dropdown).not.toBe(undefined); + expect(suggestInstance.valueField).not.toBe(undefined); + expect(suggestName).toBe(undefined); + + $suggest.suggest('destroy'); + + expect($suggest.closest('.test-input-wrapper').length).toBe(0); + expect($suggest.attr('autocomplete')).toBe(undefined); + expect($suggest.attr('name')).toBe(suggestInstance.valueField.attr('name')); + expect(suggestInstance.valueField.parents('html').length).not.toBeGreaterThan(0); + expect(suggestInstance.dropdown.parents('html').length).not.toBeGreaterThan(0); + }); + + it('Check suggest value', function () { + var value = 'test-value', + suggestInstance, suggestDivInstance; + + $(suggestSelector).val(value); + $('body').append('
' + value + '
'); + + suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); + suggestDivInstance = $('#suggest-div').suggest().data('mage-suggest'); + + expect(suggestInstance._value()).toBe(value); + expect(suggestDivInstance._value()).toBe(value); + $('#suggest-div').remove(); + }); + + it('Check suggest bind', function () { + var eventIsBinded = false, + options = { + events: { + /** Stub function */ + click: function () { + eventIsBinded = true; + } + } + }, + $suggest = $(suggestSelector).suggest(options); + + $suggest.trigger('click'); + expect(eventIsBinded).toBe(true); + }); + + it('Check suggest focus/blur', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + expect(suggestInstance._focused).toBe(undefined); + expect(suggestInstance.element.val()).toBe(''); + + suggestInstance._focusItem($.Event('focus'), uiHash); + + expect(suggestInstance._focused).toEqual(uiHash.item); + expect(suggestInstance.element.val()).toBe(uiHash.item.label); + + suggestInstance._blurItem(); + + expect(suggestInstance._focused).toBe(null); + expect(suggestInstance.element.val()).toBe(''); + }); + + it('Check suggest select', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; + suggestInstance.valueField.val(''); + suggestInstance._selectItem($.Event('select')); + + expect(suggestInstance._selectedItem).toBe(null); + expect(suggestInstance._term).toBe(null); + expect(suggestInstance.valueField.val()).toBe(''); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._focused = uiHash.item; + suggestInstance._selectItem($.Event('select')); + + expect(suggestInstance._selectedItem).toEqual(suggestInstance._focused); + expect(suggestInstance._term).toBe(suggestInstance._focused.label); + expect(suggestInstance.valueField.val()).toBe(suggestInstance._focused.id.toString()); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + }); + + it('Check suggest multiselect', function () { + var suggestInstance = $(suggestSelector).suggest({ + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + event = $.Event('select'), + selectedElement = $('
'); + + event.target = selectedElement[0]; + suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; + suggestInstance.valueField.val(''); + suggestInstance._selectItem(event); + + expect(suggestInstance._selectedItem).toBe(null); + expect(suggestInstance._term).toBe(null); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._focused = uiHash.item; + suggestInstance._selectItem(event); + + expect(suggestInstance._selectedItem).toEqual(suggestInstance._focused); + expect(suggestInstance._term).toBe(''); + expect(suggestInstance._getOption(suggestInstance._focused).length).toBeGreaterThan(0); + expect(selectedElement.hasClass(suggestInstance.options.selectedClass)).toBe(true); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._selectItem(event); + expect(suggestInstance._selectedItem).toEqual(suggestInstance._nonSelectedItem); + expect(suggestInstance._term).toBe(''); + expect(suggestInstance._getOption(suggestInstance._focused).length).not.toBeGreaterThan(0); + expect(selectedElement.hasClass(suggestInstance.options.selectedClass)).toBe(false); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + }); + + it('Check suggest reset value', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); + + suggestInstance.valueField.val('test'); + expect(suggestInstance.valueField.val()).toBe('test'); + suggestInstance._resetSuggestValue(); + expect(suggestInstance.valueField.val()).toBe(suggestInstance._nonSelectedItem.id); + }); + + it('Check suggest reset multiselect value', function () { + var suggestInstance = $(suggestSelector).suggest({ + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + event = $.Event('select'); + + event.target = $('
')[0]; + suggestInstance._focused = uiHash.item; + + suggestInstance._selectItem(event); + suggestInstance._resetSuggestValue(); + + expect(suggestInstance.valueField.val() instanceof Array).toBe(true); + expect(suggestInstance.valueField.val()[0]).not.toBe(undefined); + expect(suggestInstance.valueField.val()[0]).toBe(uiHash.item.id.toString()); + }); + + it('Check suggest read item data', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + testElement = $('
'); + + expect(suggestInstance._readItemData(testElement)).toEqual(suggestInstance._nonSelectedItem); + testElement.data('suggestOption', 'test'); + expect(suggestInstance._readItemData(testElement)).toEqual('test'); + }); + + it('Check suggest template', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '
<%= data.test %>
' + }).data('mage-suggest'), + tmpl = suggestInstance.templates[suggestInstance.templateName], + html = $('
').append(tmpl({ + data: { + test: 'test' + } + })).html(); + + expect(html).toEqual('
test
'); + suggestInstance.destroy(); + $('body').append(''); + + suggestInstance = $(suggestSelector).suggest({ + template: '#test-template' + }).data('mage-suggest'); + tmpl = suggestInstance.templates[suggestInstance.templateName]; + html = $('
').append(tmpl({ + data: { + test: 'test' + } + })).html(); + + expect(html).toEqual('
test
'); + $('#test-template').remove(); + }); + + it('Check suggest dropdown visibility', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); + + suggestInstance.dropdown.hide(); + expect(suggestInstance.isDropdownShown()).toBe(false); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance.dropdown.show(); + expect(suggestInstance.isDropdownShown()).toBe(true); + expect(suggestInstance.dropdown.is(':visible')).toBe(true); + }); + + it('Check suggest create option', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + option = suggestInstance._createOption(uiHash.item); + + expect(option.val()).toBe('1'); + expect(option.prop('selected')).toBe(true); + expect(option.text()).toBe('Test Label'); + expect(option.data('renderedOption')).not.toBe(undefined); + }); + + it('Check suggest add option', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + selectTarget = $('
'), + event = $.Event('add'), + option; + + event.target = selectTarget[0]; + suggestInstance._addOption(event, uiHash.item); + option = suggestInstance.valueField.find('option[value=' + uiHash.item.id + ']'); + + expect(option.length).toBeGreaterThan(0); + expect(option.data('selectTarget').is(selectTarget)).toBe(true); + }); + + it('Check suggest get option', function () { + var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + option = $(''); + + expect(suggestInstance._getOption(uiHash.item).length).not.toBeGreaterThan(0); + + suggestInstance.valueField.append(option); + expect(suggestInstance._getOption(uiHash.item).length).toBeGreaterThan(0); + expect(suggestInstance._getOption(option).length).toBeGreaterThan(0); + }); + + it('Check suggest last added', function () { + var suggestInstance = $(suggestSelector).suggest({ + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + suggestInstance._addOption({}, uiHash.item); + expect(suggestInstance.valueField.find('option').length).toBeGreaterThan(0); + suggestInstance._removeLastAdded(); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + }); + + it('Check suggest remove option', function () { + var suggestInstance = $(suggestSelector).suggest({ + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + selectTarget = $('
'), + event = $.Event('select'); + + selectTarget.addClass(suggestInstance.options.selectedClass); + event.target = selectTarget[0]; + + suggestInstance._addOption(event, uiHash.item); + expect(suggestInstance.valueField.find('option').length).toBeGreaterThan(0); + suggestInstance.removeOption(event, uiHash.item); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + expect(selectTarget.hasClass(suggestInstance.options.selectedClass)).toBe(false); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js b/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js new file mode 100644 index 0000000000000..b116fc7058808 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js @@ -0,0 +1,52 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/backend/tree-suggest' +], function ($) { + 'use strict'; + + describe('mage/backend/tree-suggest', function () { + var treeSuggestSelector = '#tree-suggest'; + + beforeEach(function () { + var $treeSuggest = $(''); + + $('body').append($treeSuggest); + }); + + afterEach(function () { + $(treeSuggestSelector).remove(); + $(treeSuggestSelector).treeSuggest('destroy'); + }); + + it('Check that treeSuggest inited', function () { + var $treeSuggest = $(treeSuggestSelector).treeSuggest(), + treeSuggestInstance = $treeSuggest.data('mage-treeSuggest'); + + expect($treeSuggest.is(':mage-treeSuggest')).toBe(true); + expect(treeSuggestInstance.widgetEventPrefix).toBe('suggest'); + }); + + it('Check treeSuggest filter', function () { + var treeSuggestInstance = $(treeSuggestSelector).treeSuggest().data('mage-treeSuggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + expect(treeSuggestInstance._filterSelected( + [uiHash.item], + { + _allShown: true + } + )).toEqual([uiHash.item]); + }); + }); +}); From 2fff734b30e7e310ae2a98f1bf0687b47edf6df4 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 21 Dec 2017 20:02:17 +0200 Subject: [PATCH 28/32] 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 30c29e38cc102..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Tabs Widget: QUnit Tests - - - - - - - - - - - -
-
-
- - 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 7129357159f9f..0000000000000 --- 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 +=
*/ - var tabs = jQuery('#tabs').tabs(); - assertTrue(tabs.is(':mage-tabs')); -}; - -TabsTest.prototype.testCreate = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - var tabs = jQuery('#tabs').tabs({active: 'tab2'}); - assertEquals(tabs.tabs('option', 'active'), tabs.data("tabs").anchors.index(jQuery('#tab2'))); -}; - -TabsTest.prototype.testActiveAnchor = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - 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 +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - var tabs = jQuery('#tabs').tabs(); - assertEquals(0, tabs.data("tabs")._getTabIndex('tab1')); - assertEquals(1, tabs.data("tabs")._getTabIndex('tab2')); -}; - -TabsTest.prototype.testGetPanelForTab = function() { - /*:DOC +=
    -
  • - -
  • -
-
-
-
*/ - 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 +=
    -
  • - -
    -
  • -
-
-
*/ - 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 +=
- */ - 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 +=
- */ - var eventMock = { - data: { - index: 0 - } - }, - tabs = jQuery('#tabs').tabs(); - - tabs.data("tabs")._onContentChange(eventMock); - assertTrue(jQuery('#tab1').hasClass('_changed')); -}; - -TabsTest.prototype.testOnFocus = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
- */ - 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 +=
    -
  • - -
    -
  • -
- */ - 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 582c55da344d3..0000000000000 --- 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 = $("
"); - 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 = $("
"); - var title = $("
").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 = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').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 = $('
'); - var title = $('
').appendTo(tabs); - var content = $('
').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 = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').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 = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').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 0000000000000..dd4d665ca188e --- /dev/null +++ b/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html @@ -0,0 +1,8 @@ +
+
+
+
+
+
+
+
\ 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 0000000000000..061563f8a0e3a --- /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'); + }); + }); +}); From a667b6374e0c8cb8c9fd4fdb5ccdc35cf0ff8967 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 18 Jan 2018 12:10:51 +0200 Subject: [PATCH 29/32] magento/magento2#12342: JSTestDriver removal - Added validation.test.js and removed JsTestDriver equivalent. - Fix unstable tests. --- .../testsuite/mage/validation/index.html | 35 - .../mage/validation/test-validation.js | 611 ------------ .../tests/lib/mage/backend/suggest.test.js | 95 +- .../tests/lib/mage/collapsible.test.js | 49 +- .../js/jasmine/tests/lib/mage/menu.test.js | 4 +- .../js/jasmine/tests/lib/mage/tabs.test.js | 26 - .../jasmine/tests/lib/mage/validation.test.js | 887 ++++++++++++++++++ lib/web/mage/validation.js | 6 +- 8 files changed, 978 insertions(+), 735 deletions(-) delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html delete mode 100644 dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html deleted file mode 100644 index 00661de6d8153..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Validation - - - - - - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js b/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js deleted file mode 100644 index 602ba4b8d3e60..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js +++ /dev/null @@ -1,611 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -test( "testValidateNoHtmlTags", function() { - expect(4); - equal($.validator.methods['validate-no-html-tags'].call(this, ""),true); - equal($.validator.methods['validate-no-html-tags'].call(this, null),true); - equal($.validator.methods['validate-no-html-tags'].call(this, "abc"),true); - equal($.validator.methods['validate-no-html-tags'].call(this, "
abc
"),false); - -}); - -test( "testAllowContainerClassName", function() { - expect(4); - var radio = $(''); - radio.appendTo("#qunit-fixture"); - equal($.validator.methods['allow-container-className'].call(this, radio[0]),true); - var checkbox = $(''); - equal($.validator.methods['allow-container-className'].call(this, checkbox[0]),true); - var radio2 = $(''); - equal($.validator.methods['allow-container-className'].call(this, radio2[0]),false); - var checkbox2 = $(''); - equal($.validator.methods['allow-container-className'].call(this, checkbox2[0]),false); -}); - -test( "testValidateSelect", function() { - expect(5); - equal($.validator.methods['validate-select'].call(this, ""),false); - equal($.validator.methods['validate-select'].call(this, "none"),false); - equal($.validator.methods['validate-select'].call(this, null),false); - equal($.validator.methods['validate-select'].call(this, undefined),false); - equal($.validator.methods['validate-select'].call(this, "abc"),true); -}); - -test( "testValidateNotEmpty", function() { - expect(5); - ok(!$.validator.methods['validate-no-empty'].call(this, "")); - ok(!$.validator.methods['validate-no-empty'].call(this, null)); - ok(!$.validator.methods['validate-no-empty'].call(this, undefined)); - ok(!$.validator.methods['validate-no-empty'].call(this, " ")); - ok($.validator.methods['validate-no-empty'].call(this, "test")); -}); - -test( "testValidateStreet", function() { - expect(9); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, ""),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, null),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, undefined),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, "abc "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " 123 "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " abc123 "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " !@# "),false); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " abc.123 "),false); -}); - -test( "testValidatePhoneStrict", function() { - expect(9); - equal($.validator.methods['validate-phoneStrict'].call(this, ""),true); - equal($.validator.methods['validate-phoneStrict'].call(this, null),true); - equal($.validator.methods['validate-phoneStrict'].call(this, undefined),true); - equal($.validator.methods['validate-phoneStrict'].call(this, " "),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "5121231234"),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "512.123.1234"),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-phoneStrict'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-phoneStrict'].call(this, "(512) 123-1234"),true); -}); - -test( "testValidatePhoneLax", function() { - expect(11); - equal($.validator.methods['validate-phoneLax'].call(this, ""),true); - equal($.validator.methods['validate-phoneLax'].call(this, null),true); - equal($.validator.methods['validate-phoneLax'].call(this, undefined),true); - equal($.validator.methods['validate-phoneLax'].call(this, " "),false); - equal($.validator.methods['validate-phoneLax'].call(this, "5121231234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "512.123.1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512) 123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)1231234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)_123_1234"),false); -}); - -test( "testValidateFax", function() { - expect(9); - equal($.validator.methods['validate-fax'].call(this, ""),true); - equal($.validator.methods['validate-fax'].call(this, null),true); - equal($.validator.methods['validate-fax'].call(this, undefined),true); - equal($.validator.methods['validate-fax'].call(this, " "),false); - equal($.validator.methods['validate-fax'].call(this, "5121231234"),false); - equal($.validator.methods['validate-fax'].call(this, "512.123.1234"),false); - equal($.validator.methods['validate-fax'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-fax'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-fax'].call(this, "(512) 123-1234"),true); -}); - -test( "testValidateEmail", function() { - expect(11); - equal($.validator.methods['validate-email'].call(this, ""),true); - equal($.validator.methods['validate-email'].call(this, null),true); - equal($.validator.methods['validate-email'].call(this, undefined),true); - equal($.validator.methods['validate-email'].call(this, " "),false); - equal($.validator.methods['validate-email'].call(this, "123@123.com"),true); - equal($.validator.methods['validate-email'].call(this, "abc@124.en"),true); - equal($.validator.methods['validate-email'].call(this, "abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc.abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc-abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc_abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc_abc@abc"),false); -}); - -test( "testValidateEmailSender", function() { - expect(10); - equal($.validator.methods['validate-emailSender'].call(this, ""),true); - equal($.validator.methods['validate-emailSender'].call(null),true); - equal($.validator.methods['validate-emailSender'].call(undefined),true); - equal($.validator.methods['validate-emailSender'].call(" "),true); - equal($.validator.methods['validate-emailSender'].call("123@123.com"),true); - equal($.validator.methods['validate-emailSender'].call("abc@124.en"),true); - equal($.validator.methods['validate-emailSender'].call("abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc.abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc-abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc_abc@abc.commmmm"),true); -}); - -test( "testValidatePassword", function() { - expect(9); - equal($.validator.methods['validate-password'].call(this, ""),true); - equal($.validator.methods['validate-password'].call(this, null),false); - equal($.validator.methods['validate-password'].call(this, undefined),false); - equal($.validator.methods['validate-password'].call(this, " "),true); - equal($.validator.methods['validate-password'].call(this, "123@123.com"),true); - equal($.validator.methods['validate-password'].call(this, "abc"),false); - equal($.validator.methods['validate-password'].call(this, "abc "),false); - equal($.validator.methods['validate-password'].call(this, " abc "),false); - equal($.validator.methods['validate-password'].call(this, "dddd"),false); -}); - -test( "testValidateAdminPassword", function() { - expect(9); - equal(true, $.validator.methods['validate-admin-password'].call(this, "")); - equal(false, $.validator.methods['validate-admin-password'].call(this, null)); - equal(false, $.validator.methods['validate-admin-password'].call(this, undefined)); - equal(true, $.validator.methods['validate-admin-password'].call(this, " ")); - equal(true, $.validator.methods['validate-admin-password'].call(this, "123@123.com")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "abc")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "abc ")); - equal(false, $.validator.methods['validate-admin-password'].call(this, " abc ")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "dddd")); -}); - -test( "testValidateUrl", function() { - expect(8); - equal(true, $.validator.methods['validate-url'].call(this, "")); - equal(true, $.validator.methods['validate-url'].call(this, null)); - equal(true, $.validator.methods['validate-url'].call(this, undefined)); - equal(false, $.validator.methods['validate-url'].call(this, " ")); - equal(true, $.validator.methods['validate-url'].call(this, "http://www.google.com")); - equal(true, $.validator.methods['validate-url'].call(this, "http://127.0.0.1:8080/index.php")); - equal(true, $.validator.methods['validate-url'].call(this, "http://app-spot.com/index.php")); - equal(true, $.validator.methods['validate-url'].call(this, "http://app-spot_space.com/index.php")); -}); - -test( "testValidateCleanUrl", function() { - expect(8); - equal(true, $.validator.methods['validate-clean-url'].call(this, "")); - equal(true, $.validator.methods['validate-clean-url'].call(this, null)); - equal(true, $.validator.methods['validate-clean-url'].call(this, undefined)); - equal(false, $.validator.methods['validate-clean-url'].call(this, " ")); - equal(true, $.validator.methods['validate-clean-url'].call(this, "http://www.google.com")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1:8080/index.php")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1:8080")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1")); -}); - -test( "testValidateXmlIdentifier", function() { - expect(8); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, null)); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, undefined)); - equal(false, $.validator.methods['validate-xml-identifier'].call(this, " ")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc_123")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc-123")); - equal(false, $.validator.methods['validate-xml-identifier'].call(this, "123-abc")); -}); - -test( "testValidateSsn", function() { - expect(8); - equal(true, $.validator.methods['validate-ssn'].call(this, "")); - equal(true, $.validator.methods['validate-ssn'].call(this, null)); - equal(true, $.validator.methods['validate-ssn'].call(this, undefined)); - equal(false, $.validator.methods['validate-ssn'].call(this, " ")); - equal(false, $.validator.methods['validate-ssn'].call(this, "abc")); - equal(true, $.validator.methods['validate-ssn'].call(this, "123-13-1234")); - equal(true, $.validator.methods['validate-ssn'].call(this, "012-12-1234")); - equal(false, $.validator.methods['validate-ssn'].call(this, "23-12-1234")); -}); - -test( "testValidateZip", function() { - expect(8); - equal(true, $.validator.methods['validate-zip-us'].call(this, "")); - equal(true, $.validator.methods['validate-zip-us'].call(this, null)); - equal(true, $.validator.methods['validate-zip-us'].call(this, undefined)); - equal(false, $.validator.methods['validate-zip-us'].call(this, " ")); - equal(true, $.validator.methods['validate-zip-us'].call(this, "12345-1234")); - equal(true, $.validator.methods['validate-zip-us'].call(this, "02345")); - equal(false, $.validator.methods['validate-zip-us'].call(this, "1234")); - equal(false, $.validator.methods['validate-zip-us'].call(this, "1234-1234")); -}); - -test( "testValidateDateAu", function() { - expect(8); - equal(true, $.validator.methods['validate-date-au'].call(this, "")); - equal(true, $.validator.methods['validate-date-au'].call(this, null)); - equal(true, $.validator.methods['validate-date-au'].call(this, undefined)); - equal(false, $.validator.methods['validate-date-au'].call(this, " ")); - equal(true, $.validator.methods['validate-date-au'].call(this, "01/01/2012")); - equal(true, $.validator.methods['validate-date-au'].call(this, "30/01/2012")); - equal(false, $.validator.methods['validate-date-au'].call(this, "01/30/2012")); - equal(false, $.validator.methods['validate-date-au'].call(this, "1/1/2012")); -}); - -test( "testValidateCurrencyDollar", function() { - expect(8); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, null)); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, undefined)); - equal(false, $.validator.methods['validate-currency-dollar'].call(this, " ")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$123")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$1,123.00")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$1234")); - equal(false, $.validator.methods['validate-currency-dollar'].call(this, "$1234.1234")); -}); - -test( "testValidateNotNegativeNumber", function() { - expect(11); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, null)); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, undefined)); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, " ")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "0")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1234")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1e")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1,234.1234")); -}); - -test( "testValidateGreaterThanZero", function() { - expect(11); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, null)); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, undefined)); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, " ")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "0")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1234")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1e")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1,234.1234")); -}); - -test( "testValidateCssLength", function() { - expect(11); - equal(true, $.validator.methods['validate-css-length'].call(this, "")); - equal(true, $.validator.methods['validate-css-length'].call(this, null)); - equal(true, $.validator.methods['validate-css-length'].call(this, undefined)); - equal(false, $.validator.methods['validate-css-length'].call(this, " ")); - equal(false, $.validator.methods['validate-css-length'].call(this, "0")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1234")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1e")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1,234.1234")); -}); - -test( "testValidateData", function() { - expect(9); - equal(true, $.validator.methods['validate-data'].call(this, "")); - equal(true, $.validator.methods['validate-data'].call(this, null)); - equal(true, $.validator.methods['validate-data'].call(this, undefined)); - equal(false, $.validator.methods['validate-data'].call(this, " ")); - equal(false, $.validator.methods['validate-data'].call(this, "123abc")); - equal(true, $.validator.methods['validate-data'].call(this, "abc")); - equal(false, $.validator.methods['validate-data'].call(this, " abc")); - equal(true, $.validator.methods['validate-data'].call(this, "abc123")); - equal(false, $.validator.methods['validate-data'].call(this, "abc-123")); -}); - - -test( "testValidateOneRequiredByName", function() { - expect(4); - var radio = $(''); - radio.appendTo("#qunit-fixture"); - ok(!$.validator.methods['validate-one-required-by-name'].call(this, - null, radio[0])); - var radio2 = $(''); - radio2.appendTo("#qunit-fixture"); - ok($.validator.methods['validate-one-required-by-name'].call(this, - null, radio2[0])); - - var checkbox = $(''); - checkbox.appendTo("#qunit-fixture"); - ok(!$.validator.methods['validate-one-required-by-name'].call(this, - null, checkbox[0])); - var checkbox2 = $(''); - checkbox2.appendTo("#qunit-fixture"); - ok($.validator.methods['validate-one-required-by-name'].call(this, - null, checkbox2[0])); -}); - -test( "testLessThanEqualsTo", function() { - expect(5); - var elm1 = $(''); - var elm2 = $(''); - ok(!$.validator.methods['less-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - elm1[0].value = 4; - ok($.validator.methods['less-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - - var elm3 = $(''); - var elm4= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm3[0].value, - elm3, elm4)); - - var elm5 = $(''); - var elm6= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm5[0].value, - elm5, elm6)); - - var elm7 = $(''); - var elm8= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm7[0].value, - elm7, elm8)); -}); - -test( "testGreaterThanEqualsTo", function() { - expect(5); - - var elm1 = $(''); - var elm2 = $(''); - ok(!$.validator.methods['greater-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - elm1[0].value = 9; - ok($.validator.methods['greater-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - - var elm3 = $(''); - var elm4= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm3[0].value, - elm3, elm4)); - - var elm5 = $(''); - var elm6= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm5[0].value, - elm5, elm6)); - - var elm7 = $(''); - var elm8= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm7[0].value, - elm7, elm8)); -}); - -test( "testValidateGroupedQty", function() { - expect(5); - var div1 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div1); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div1); - $('').appendTo(div1); - - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div1[0])); - - var div2 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div2); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div2); - $('').appendTo(div2); - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div2[0])); - - var div3 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div3); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div3); - $('').appendTo(div3); - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div3[0])); - - var div4 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div4); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div4); - $('').appendTo(div4); - ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div4[0])); - - var div5 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div5); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div5); - $('').appendTo(div5); - ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div5[0])); - -}); - -test( "testValidateCCTypeSelect", function() { - expect(14); - var visaValid = $(''); - var visaInvalid = $(''); - var mcValid = $(''); - var mcInvalid = $(''); - var aeValid = $(''); - var aeInvalid = $(''); - - var diValid = $(''); - var diInvalid = $(''); - var dnValid = $(''); - var dnInvalid = $(''); - var jcbValid = $(''); - var jcbInvalid = $(''); - var upValid = $(''); - var upInvalid = $(''); - - ok($.validator.methods['validate-cc-type-select'].call(this, 'VI', null, visaValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'VI', null, visaInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'MC', null, mcValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'MC', null, mcInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'AE', null, aeValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'AE', null, aeInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'DI', null, diValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'DI', null, diInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'DN', null, dnValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'DN', null, dnInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'JCB', null, jcbValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'JCB', null, jcbInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'UP', null, upValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'UP', null, upInvalid)); -}); - -test( "testValidateCCNumber", function() { - expect(37); - ok($.validator.methods['validate-cc-number'].call(this, '4916835098995909', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '5265071363284878', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6011120623356953', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '371293266574617', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '4916835098995901', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '5265071363284870', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011120623356951', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '371293266574619', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '2221220000000003', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '2721220000000008', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601109020000000003', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011111144444444', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6011222233334444', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011522233334447', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601174455555553', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011745555555550', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601177455555556', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '601182455555556', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601187999555558', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '601287999555556', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6444444444444443', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6644444444444441', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3044444444444444', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3064444444444449', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3095444444444442', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3096444444444441', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3696444444444445', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3796444444444444', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3896444444444443', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3528444444444449', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3529444444444448', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6221262244444440', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6229981111111111', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6249981111111117', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6279981111111110', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6282981111111115', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6289981111111118', null, null)); -}); - -test( "testValidateCCType", function() { - expect(14); - var select = $(''); - - select.val('VI'); - ok($.validator.methods['validate-cc-type'].call(this, '4916835098995909', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - select.val('MC'); - ok($.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '4916835098995909', null, select)); - select.val('AE'); - ok($.validator.methods['validate-cc-type'].call(this, '371293266574617', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - select.val('DI'); - ok($.validator.methods['validate-cc-type'].call(this, '6011050000000009', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '371293266574617', null, select)); - select.val('DN'); - ok($.validator.methods['validate-cc-type'].call(this, '3095434000000001', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '6011050000000009', null, select)); - select.val('JCB'); - ok($.validator.methods['validate-cc-type'].call(this, '3528000000000007', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '3095434000000001', null, select)); - select.val('UP'); - ok($.validator.methods['validate-cc-type'].call(this, '6221260000000000', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '3528000000000007', null, select)); -}); - -test( "testValidateCCExp", function() { - expect(3); - var year = $(''), - currentTime = new Date(), - currentMonth = currentTime.getMonth() + 1, - currentYear = currentTime.getFullYear(); - year.val(currentYear); - if (currentMonth > 1) { - ok(!$.validator.methods['validate-cc-exp'].call(this, currentMonth - 1, null, year)); - } - ok($.validator.methods['validate-cc-exp'].call(this, currentMonth, null, year)); - year.val(currentYear + 1); - ok($.validator.methods['validate-cc-exp'].call(this, currentMonth, null, year)); - -}); - -test( "testValidateCCCvn", function() { - expect(8); - var ccType = $(''); - - ccType.val('VI'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ccType.val('MC'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ccType.val('AE'); - ok($.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ccType.val('DI'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); -}); - -test( "testValidateNumberRange", function() { - expect(14); - ok($.validator.methods['validate-number-range'].call(this, '-1', null, null)); - ok($.validator.methods['validate-number-range'].call(this, '1', null, null)); - ok($.validator.methods['validate-number-range'].call(this, '', null, null)); - ok($.validator.methods['validate-number-range'].call(this, null, null, null)); - ok($.validator.methods['validate-number-range'].call(this, '0', null, null)); - ok(!$.validator.methods['validate-number-range'].call(this, 'asds', null, null)); - - ok($.validator.methods['validate-number-range'].call(this, '10', null, '10-20.06')); - ok($.validator.methods['validate-number-range'].call(this, '15', null, '10-20.06')); - ok(!$.validator.methods['validate-number-range'].call(this, '1', null, '10-20.06')); - ok(!$.validator.methods['validate-number-range'].call(this, '30', null, '10-20.06')); - - var el1 = $('').get(0); - ok($.validator.methods['validate-number-range'].call(this, '10', el1, null)); - ok($.validator.methods['validate-number-range'].call(this, '15', el1, null)); - ok(!$.validator.methods['validate-number-range'].call(this, '1', el1, null)); - ok($.validator.methods['validate-number-range'].call(this, '30', el1, null)); -}); - - - -test( "testValidateDigitsRange", function() { - expect(15); - ok($.validator.methods['validate-digits-range'].call(this, '-1', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '1', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, null, null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '0', null, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, 'asds', null, null)); - - ok($.validator.methods['validate-digits-range'].call(this, '10', null, '10-20')); - ok($.validator.methods['validate-digits-range'].call(this, '15', null, '10-20')); - ok(!$.validator.methods['validate-digits-range'].call(this, '1', null, '10-20')); - ok(!$.validator.methods['validate-digits-range'].call(this, '30', null, '10-20')); - ok($.validator.methods['validate-digits-range'].call(this, '30', null, '10-20.06')); - - var el1 = $('').get(0); - ok($.validator.methods['validate-digits-range'].call(this, '10', el1, null)); - ok($.validator.methods['validate-digits-range'].call(this, '15', el1, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, '1', el1, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, '30', el1, null)); -}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js index 9460bcaa5636e..84880e6af72c5 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js @@ -17,21 +17,30 @@ define([ var $suggest = $(''); $('body').append($suggest); + $('body').append(''); }); afterEach(function () { $(suggestSelector).remove(); + $('#test-template').remove(); $(suggestSelector).suggest('destroy'); }); it('Check that suggest inited', function () { - var $suggest = $(suggestSelector).suggest(); + var $suggest = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }); expect($suggest.is(':mage-suggest')).toBe(true); }); it('Check suggest create', function () { var options = { + template: '#test-template', + choiceTemplate: '
  • ', controls: { selector: '.test', eventsMap: { @@ -80,6 +89,8 @@ define([ it('Check suggest render', function () { var options = { + template: '#test-template', + choiceTemplate: '
  • ', dropdownWrapper: '
    ', className: 'test-suggest', inputWrapper: '
    ' @@ -108,7 +119,10 @@ define([ }); it('Check suggest createValueField', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), valueField = suggestInstance._createValueField(); expect(valueField.is('input')).toBe(true); @@ -116,7 +130,9 @@ define([ $(suggestSelector).suggest('destroy'); suggestInstance = $(suggestSelector).suggest({ - multiselect: true + multiselect: true, + template: '#test-template', + choiceTemplate: '
  • ' }).data('mage-suggest'); valueField = suggestInstance._createValueField(); @@ -126,7 +142,10 @@ define([ }); it('Check suggest prepareValueField', function () { - var $suggest = $(suggestSelector).suggest(), + var $suggest = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }), suggestInstance = $suggest.data('mage-suggest'), suggestName = $suggest.attr('name'); @@ -140,6 +159,8 @@ define([ it('Check suggest destroy', function () { var options = { + template: '#test-template', + choiceTemplate: '
  • ', inputWrapper: '
    ', valueField: null }, @@ -167,8 +188,14 @@ define([ $(suggestSelector).val(value); $('body').append('
    ' + value + '
    '); - suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); - suggestDivInstance = $('#suggest-div').suggest().data('mage-suggest'); + suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + suggestDivInstance = $('#suggest-div').suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); expect(suggestInstance._value()).toBe(value); expect(suggestDivInstance._value()).toBe(value); @@ -178,6 +205,8 @@ define([ it('Check suggest bind', function () { var eventIsBinded = false, options = { + template: '#test-template', + choiceTemplate: '
  • ', events: { /** Stub function */ click: function () { @@ -192,7 +221,10 @@ define([ }); it('Check suggest focus/blur', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), uiHash = { item: { id: 1, @@ -215,7 +247,10 @@ define([ }); it('Check suggest select', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), uiHash = { item: { id: 1, @@ -243,6 +278,8 @@ define([ it('Check suggest multiselect', function () { var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', multiselect: true }).data('mage-suggest'), uiHash = { @@ -282,7 +319,10 @@ define([ }); it('Check suggest reset value', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); suggestInstance.valueField.val('test'); expect(suggestInstance.valueField.val()).toBe('test'); @@ -292,6 +332,8 @@ define([ it('Check suggest reset multiselect value', function () { var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', multiselect: true }).data('mage-suggest'), uiHash = { @@ -314,7 +356,10 @@ define([ }); it('Check suggest read item data', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), testElement = $('
    '); expect(suggestInstance._readItemData(testElement)).toEqual(suggestInstance._nonSelectedItem); @@ -324,7 +369,8 @@ define([ it('Check suggest template', function () { var suggestInstance = $(suggestSelector).suggest({ - template: '
    <%= data.test %>
    ' + template: '
    <%= data.test %>
    ', + choiceTemplate: '
  • ' }).data('mage-suggest'), tmpl = suggestInstance.templates[suggestInstance.templateName], html = $('
    ').append(tmpl({ @@ -340,7 +386,8 @@ define([ ''); suggestInstance = $(suggestSelector).suggest({ - template: '#test-template' + template: '#test-template', + choiceTemplate: '
  • ' }).data('mage-suggest'); tmpl = suggestInstance.templates[suggestInstance.templateName]; html = $('
    ').append(tmpl({ @@ -354,7 +401,10 @@ define([ }); it('Check suggest dropdown visibility', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'); + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); suggestInstance.dropdown.hide(); expect(suggestInstance.isDropdownShown()).toBe(false); @@ -366,7 +416,10 @@ define([ }); it('Check suggest create option', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), uiHash = { item: { id: 1, @@ -382,7 +435,10 @@ define([ }); it('Check suggest add option', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), uiHash = { item: { id: 1, @@ -402,7 +458,10 @@ define([ }); it('Check suggest get option', function () { - var suggestInstance = $(suggestSelector).suggest().data('mage-suggest'), + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), uiHash = { item: { id: 1, @@ -420,6 +479,8 @@ define([ it('Check suggest last added', function () { var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', multiselect: true }).data('mage-suggest'), uiHash = { @@ -437,6 +498,8 @@ define([ it('Check suggest remove option', function () { var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', multiselect: true }).data('mage-suggest'), uiHash = { diff --git a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js index fb1518442c87d..d6c95d2887ec7 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js @@ -21,6 +21,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); }); describe('Test enable, disable, activate and deactivate methods', function () { @@ -87,6 +88,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); }); it('check state classes', function () { @@ -113,6 +115,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); }); it('check if icons are added to title when initialized and removed when destroyed', function () { @@ -135,6 +138,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); expect(title.children('[data-role=icons]').length).toBeFalsy(); + group.remove(); }); it('check if icon classes are changed when content gets expanded/collapsed', function () { @@ -163,49 +167,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); - }); - - it('check keyboard support', function () { - var group = $('
    '), - title = $('
    ').appendTo(group), - content = $('
    ').appendTo(group); - - group.appendTo('body'); - - group.collapsible(); - expect(group.is(':mage-collapsible')).toBeTruthy(); - - group.collapsible('deactivate'); - expect(content.is(':hidden')).toBeTruthy(); - - title.on('focus', function () { - title.trigger($.Event('keydown', { - keyCode: $.ui.keyCode.ENTER - })); - expect(content.is(':visible')).toBeTruthy(); - - title.trigger($.Event('keydown', { - keyCode: $.ui.keyCode.ENTER - })); - expect(content.is(':hidden')).toBeTruthy(); - - title.trigger($.Event('keydown', { - keyCode: $.ui.keyCode.SPACE - })); - expect(content.is(':visible')).toBeTruthy(); - - title.trigger($.Event('keydown', { - keyCode: $.ui.keyCode.SPACE - })); - expect(content.is(':hidden')).toBeTruthy(); - }); - - setTimeout(function () { - title.focus(); - }, 10); - - group.collapsible('destroy'); - expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); }); it('check if content gets updated via Ajax when title is clicked', function () { @@ -243,6 +205,7 @@ define([ group.collapsible('destroy'); expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); }); }); }); diff --git a/dev/tests/js/jasmine/tests/lib/mage/menu.test.js b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js index a2b7e98425969..69d8af4ff3dba 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/menu.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js @@ -30,9 +30,9 @@ define([ $menuItems = $menu.find('li'), $submenu = $menuItems.find('ul'); - $menu.menu({ + menu.menu({ expanded: true - }); + }, $menu); expect($submenu.hasClass('expanded')).toBe(true); }); }); diff --git a/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js index 061563f8a0e3a..a6138df073434 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js @@ -89,31 +89,5 @@ define([ $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'); - }); }); }); diff --git a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js index 12138e5939a7b..ccf3591be0dfe 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js @@ -255,4 +255,891 @@ define([ }); }); + describe('Testing validate-no-html-tags', function () { + it('validate-no-html-tags', function () { + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, '
    abc
    ')).toEqual(false); + }); + }); + + describe('Testing allow-container-className', function () { + it('allow-container-className', function () { + var radio = $(''), + checkbox = $(''), + radio2 = $(''), + checkbox2 = $(''); + + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, radio[0])).toEqual(true); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, checkbox[0])).toEqual(true); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, radio2[0])).toEqual(false); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, checkbox2[0])).toEqual(false); + }); + }); + + describe('Testing validate-select', function () { + it('validate-select', function () { + expect($.validator.methods['validate-select'] + .call($.validator.prototype, '')).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, 'none')).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, 'abc')).toEqual(true); + }); + }); + + describe('Testing validate-no-empty', function () { + it('validate-no-empty', function () { + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, '')).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, 'test')).toEqual(true); + }); + }); + + describe('Testing validate-alphanum-with-spaces', function () { + it('validate-alphanum-with-spaces', function () { + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, 'abc ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' 123 ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' abc123 ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' !@# ')).toEqual(false); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' abc.123 ')).toEqual(false); + }); + }); + + describe('Testing validate-phoneStrict', function () { + it('validate-phoneStrict', function () { + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '5121231234')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '512.123.1234')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + }); + }); + + describe('Testing validate-phoneLax', function () { + it('validate-phoneLax', function () { + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '5121231234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '512.123.1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)1231234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)_123_1234')).toEqual(false); + }); + }); + + describe('Testing validate-fax', function () { + it('validate-fax', function () { + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '5121231234')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '512.123.1234')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + }); + }); + + describe('Testing validate-email', function () { + it('validate-email', function () { + expect($.validator.methods['validate-email'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc@124.en')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc.abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc-abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc_abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc_abc@abc')).toEqual(false); + }); + }); + + describe('Testing validate-emailSender', function () { + it('validate-emailSender', function () { + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc@124.en')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc.abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc-abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc_abc@abc.commmmm')).toEqual(true); + }); + }); + + describe('Testing validate-password', function () { + it('validate-password', function () { + expect($.validator.methods['validate-password'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'abc ')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, ' abc ')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'dddd')).toEqual(false); + }); + }); + + describe('Testing validate-admin-password', function () { + it('validate-admin-password', function () { + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'abc ')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, ' abc ')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'dddd')).toEqual(false); + }); + }); + + describe('Testing validate-url', function () { + it('validate-url', function () { + expect($.validator.methods['validate-url'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://www.google.com')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080/index.php')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://app-spot.com/index.php')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://app-spot_space.com/index.php')).toEqual(true); + }); + }); + + describe('Testing validate-clean-url', function () { + it('validate-clean-url', function () { + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://www.google.com')).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080/index.php')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1')).toEqual(false); + }); + }); + + describe('Testing validate-xml-identifier', function () { + it('validate-xml-identifier', function () { + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc_123')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc-123')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, '123-abc')).toEqual(false); + }); + }); + + describe('Testing validate-ssn', function () { + it('validate-ssn', function () { + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '123-13-1234')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '012-12-1234')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '23-12-1234')).toEqual(false); + }); + }); + + describe('Testing validate-zip-us', function () { + it('validate-zip-us', function () { + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '12345-1234')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '02345')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '1234')).toEqual(false); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '1234-1234')).toEqual(false); + }); + }); + + describe('Testing validate-date-au', function () { + it('validate-date-au', function () { + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '01/01/2012')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '30/01/2012')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '01/30/2012')).toEqual(false); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '1/1/2012')).toEqual(false); + }); + }); + + describe('Testing validate-currency-dollar', function () { + it('validate-currency-dollar', function () { + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$123')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1,123.00')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1234')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-not-negative-number', function () { + it('validate-not-negative-number', function () { + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '0')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1,234.1234')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-greater-than-zero', function () { + it('validate-greater-than-zero', function () { + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '0')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1,234.1234')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-css-length', function () { + it('validate-css-length', function () { + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '0')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1,234.1234')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-data', function () { + it('validate-data', function () { + expect($.validator.methods['validate-data'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, '123abc')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, ' abc')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc123')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc-123')).toEqual(false); + }); + }); + + describe('Testing validate-one-required-by-name', function () { + it('validate-one-required-by-name', function () { + var radio = $(''), + radio2 = $(''), + checkbox = $(''), + checkbox2 = $(''), + $test = $('
    '), + prevForm = $.validator.prototype.currentForm; + + $.validator.prototype.currentForm = $test[0]; + + $test.append(radio); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, radio[0], true)).toEqual(false); + $test.append(radio2); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, radio2[0], true)).toEqual(true); + $test.append(checkbox); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, checkbox[0], true)).toEqual(false); + $test.append(checkbox2); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, checkbox2[0], true)).toEqual(true); + + $.validator.prototype.currentForm = prevForm; + }); + }); + + describe('Testing less-than-equals-to', function () { + it('less-than-equals-to', function () { + var elm1 = $(''), + elm2 = $(''), + elm3 = $(''), + elm4 = $(''), + elm5 = $(''), + elm6 = $(''), + elm7 = $(''), + elm8 = $(''); + + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(false); + elm1[0].value = 4; + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm3[0].value, elm3, elm4)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm5[0].value, elm5, elm6)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm7[0].value, elm7, elm8)).toEqual(true); + }); + }); + + describe('Testing greater-than-equals-to', function () { + it('greater-than-equals-to', function () { + var elm1 = $(''), + elm2 = $(''), + elm3 = $(''), + elm4 = $(''), + elm5 = $(''), + elm6 = $(''), + elm7 = $(''), + elm8 = $(''); + + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(false); + elm1[0].value = 9; + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm3[0].value, elm3, elm4)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm5[0].value, elm5, elm6)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm7[0].value, elm7, elm8)).toEqual(true); + }); + }); + + describe('Testing validate-cc-type-select', function () { + it('validate-cc-type-select', function () { + var visaValid = $(''), + visaInvalid = $(''), + mcValid = $(''), + mcInvalid = $(''), + aeValid = $(''), + aeInvalid = $(''), + diValid = $(''), + diInvalid = $(''), + dnValid = $(''), + dnInvalid = $(''), + jcbValid = $(''), + jcbInvalid = $(''); + + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'VI', null, visaValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'VI', null, visaInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'MC', null, mcValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'MC', null, mcInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'AE', null, aeValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'AE', null, aeInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DI', null, diValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DI', null, diInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DN', null, dnValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DN', null, dnInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'JCB', null, jcbValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'JCB', null, jcbInvalid)).toEqual(false); + }); + }); + + describe('Testing validate-cc-number', function () { + it('validate-cc-number', function () { + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '4916835098995909', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '5265071363284878', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011120623356953', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '371293266574617', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '4916835098995901', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '5265071363284870', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011120623356951', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '371293266574619', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '2221220000000003', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '2721220000000008', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601109020000000003', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011111144444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011222233334444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011522233334447', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601174455555553', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011745555555550', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601177455555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601182455555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601187999555558', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601287999555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6444444444444443', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6644444444444441', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3044444444444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3064444444444449', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3095444444444442', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3096444444444441', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3696444444444445', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3796444444444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3896444444444443', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3528444444444449', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3529444444444448', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6221262244444440', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6229981111111111', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6249981111111117', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6279981111111110', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6282981111111115', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6289981111111118', null, null)).toEqual(true); + }); + }); + + describe('Testing validate-cc-type', function () { + it('validate-cc-type', function () { + var select = $(''); + + select.val('VI'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '4916835098995909', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(false); + + select.val('MC'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '4916835098995909', null, select)).toEqual(false); + + select.val('AE'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '371293266574617', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(false); + + select.val('DI'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '6011050000000009', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '371293266574617', null, select)).toEqual(false); + + select.val('DN'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3095434000000001', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '6011050000000009', null, select)).toEqual(false); + + select.val('JCB'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3528000000000007', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3095434000000001', null, select)).toEqual(false); + }); + }); + + describe('Testing validate-cc-exp', function () { + it('validate-cc-exp', function () { + var year = $(''), + currentTime = new Date(), + currentMonth = currentTime.getMonth() + 1, + currentYear = currentTime.getFullYear(); + + year.val(currentYear); + + if (currentMonth > 1) { + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth - 1, null, year)).toEqual(false); + } + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth, null, year)).toEqual(true); + year.val(currentYear + 1); + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth, null, year)).toEqual(true); + }); + }); + + describe('Testing validate-cc-cvn', function () { + it('validate-cc-cvn', function () { + var ccType = $(''); + + ccType.val('VI'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + + ccType.val('MC'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + + ccType.val('AE'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(false); + + ccType.val('DI'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + }); + }); + + describe('Testing validate-number-range', function () { + it('validate-number-range', function () { + var el1 = $('').get(0); + + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '-1', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, null, null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '0', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, 'asds', null, null)).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '10', null, '10-20.06')).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '15', null, '10-20.06')).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '30', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '10', el1, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '15', el1, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', el1, null)).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '30', el1, null)).toEqual(true); + }); + }); + + describe('Testing validate-digits-range', function () { + it('validate-digits-range', function () { + var el1 = $('').get(0); + + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '-1', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, null, null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '0', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, 'asds', null, null)).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '10', null, '10-20')).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '15', null, '10-20')).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', null, '10-20')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', null, '10-20')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '10', el1, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '15', el1, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', el1, null)).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', el1, null)).toEqual(false); + }); + }); }); diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index fee88826be7eb..e12e7c90d4c41 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -845,7 +845,7 @@ result = true; range = param; - if (typeof range === 'object') { + if (range) { m = dataAttrRange.exec(range); if (m) { @@ -896,11 +896,13 @@ result = true; range = param; - if (typeof range === 'object') { + if (range) { m = dataAttrRange.exec(range); if (m) { result = result && $.mage.isBetween(numValue, m[1], m[2]); + } else { + result = false; } } else if (elm && elm.className) { classes = elm.className.split(' '); From faed0c5310faaf46f660c4003561154369742912 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 18 Jan 2018 16:24:32 +0200 Subject: [PATCH 30/32] magento/magento2#12342: JSTestDriver removal - Fix timeout dropdown close. --- .../js/jasmine/tests/lib/mage/dropdown.test.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js index 7279047adc53a..1d149efe040e0 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js @@ -243,7 +243,7 @@ define([ jasmine.clock().uninstall(); }); - it('check if the dialog gets closed with the specified delay', function () { + it('check if the dialog gets closed with the specified delay', function (done) { var container = $('
    '), dialog = $('
    ').attr('id', 'dialog').appendTo(container); @@ -252,8 +252,6 @@ define([ container.appendTo('body'); - jasmine.clock().install(); - dialog.dropdownDialog({ 'timeout': 5 }); @@ -263,11 +261,11 @@ define([ dialog.trigger('mouseleave'); expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); - jasmine.clock().tick(10); - expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); - dialog.dropdownDialog('destroy'); - - jasmine.clock().uninstall(); + setTimeout(function () { + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + done(); + }, 6); }); /* From ac8aa21b1b227f15b425d0defae0fe478a29def5 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 18 Jan 2018 20:22:03 +0200 Subject: [PATCH 31/32] magento/magento2#12342: JSTestDriver removal - Fix jstree override. --- lib/web/jquery/jstree/jquery.jstree.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/jquery/jstree/jquery.jstree.js b/lib/web/jquery/jstree/jquery.jstree.js index e2f6330ba45eb..4671256b4207b 100644 --- a/lib/web/jquery/jstree/jquery.jstree.js +++ b/lib/web/jquery/jstree/jquery.jstree.js @@ -28,7 +28,7 @@ "use strict"; // top wrapper to prevent multiple inclusion (is this OK?) -(function () { if(jQuery && jQuery.jstree) { return; } +(function () { var is_ie6 = false, is_ie7 = false, is_ff2 = false; /* From 64f9c6d7d34abfaff72e006ab93fa46ba8335f2d Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Fri, 19 Jan 2018 18:16:29 +0200 Subject: [PATCH 32/32] magento/magento2#12342: JSTestDriver removal - Fix validation. --- lib/web/mage/validation.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index 5f4137bb06db4..ac99b04ad1b7a 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -845,11 +845,13 @@ result = true; range = param; - if (range) { + if (typeof range === 'string') { m = dataAttrRange.exec(range); if (m) { result = result && $.mage.isBetween(numValue, m[1], m[2]); + } else { + result = false; } } else if (elm && elm.className) { classes = elm.className.split(' '); @@ -896,7 +898,7 @@ result = true; range = param; - if (range) { + if (typeof range === 'string') { m = dataAttrRange.exec(range); if (m) {