From a667b6374e0c8cb8c9fd4fdb5ccdc35cf0ff8967 Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com>
Date: Thu, 18 Jan 2018 12:10:51 +0200
Subject: [PATCH] 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 00661de6d81..00000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
-/**
- * @category    mage.validation
- * @package     test
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Validation</title>
-    <base href="../../../"/>
-    <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../lib/web/jquery.js"></script>
-
-    <script src="../../../lib/web/jquery/jquery-ui.js"></script>
-    <script type="text/javascript" src="../../../lib/web/mage/mage.js"></script>
-    <script type="text/javascript" src="../../../lib/web/mage/translate.js"></script>
-    <script src="../../../lib/web/jquery/jquery.validate.js"></script>
-    <script type="text/javascript" src="../../../lib/web/mage/validation.js"></script>
-    <script type="text/javascript" src="../../../lib/web/mage/validation/validation.js"></script>
-    <script type="text/javascript" src="../../../lib/web/mage/bootstrap.js"></script>
-    <script type="text/javascript" src="testsuite/mage/validation/test-validation.js"></script>
-
-
-</head>
-<body>
-<div id="qunit"></div>
-<div id="qunit-fixture">
-</div>
-</body>
-</html>
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 602ba4b8d3e..00000000000
--- 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, "<div>abc</div>"),false);
-
-});
-
-test( "testAllowContainerClassName", function() {
-    expect(4);
-    var radio = $('<input type="radio" class="change-container-classname"/>');
-    radio.appendTo("#qunit-fixture");
-    equal($.validator.methods['allow-container-className'].call(this, radio[0]),true);
-    var checkbox = $('<input type="checkbox" class="change-container-classname"/>');
-    equal($.validator.methods['allow-container-className'].call(this, checkbox[0]),true);
-    var radio2 = $('<input type="radio"/>');
-    equal($.validator.methods['allow-container-className'].call(this, radio2[0]),false);
-    var checkbox2 = $('<input type="checkbox"/>');
-    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 = $('<input type="radio" name="radio"/>');
-    radio.appendTo("#qunit-fixture");
-    ok(!$.validator.methods['validate-one-required-by-name'].call(this,
-        null, radio[0]));
-    var radio2 = $('<input type="radio" name="radio" checked/>');
-    radio2.appendTo("#qunit-fixture");
-    ok($.validator.methods['validate-one-required-by-name'].call(this,
-        null, radio2[0]));
-
-    var checkbox = $('<input type="checkbox" name="checkbox"/>');
-    checkbox.appendTo("#qunit-fixture");
-    ok(!$.validator.methods['validate-one-required-by-name'].call(this,
-        null, checkbox[0]));
-    var checkbox2 = $('<input type="checkbox" name="checkbox" checked/>');
-    checkbox2.appendTo("#qunit-fixture");
-    ok($.validator.methods['validate-one-required-by-name'].call(this,
-        null, checkbox2[0]));
-});
-
-test( "testLessThanEqualsTo", function() {
-    expect(5);
-    var elm1 =  $('<input type="text" value=6 id="element1" />');
-    var elm2 =  $('<input type="text" value=5 id="element2" />');
-    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 =  $('<input type="text" id="element3" />');
-    var elm4=  $('<input type="text" value=5 id="element4" />');
-    ok($.validator.methods['less-than-equals-to'].call(this, elm3[0].value,
-        elm3, elm4));
-
-    var elm5 =  $('<input type="text" id="element6" />');
-    var elm6=  $('<input type="text" value=6 id="element5" />');
-    ok($.validator.methods['less-than-equals-to'].call(this, elm5[0].value,
-        elm5, elm6));
-
-    var elm7 =  $('<input type="text" value=20 id="element7" />');
-    var elm8=  $('<input type="text" value=100 id="element8" />');
-    ok($.validator.methods['less-than-equals-to'].call(this, elm7[0].value,
-        elm7, elm8));
-});
-
-test( "testGreaterThanEqualsTo", function() {
-    expect(5);
-
-    var elm1 =  $('<input type="text" value=6 id="element1" />');
-    var elm2 =  $('<input type="text" value=7 id="element2" />');
-    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 =  $('<input type="text" id="element3" />');
-    var elm4=  $('<input type="text" value=5 id="element4" />');
-    ok($.validator.methods['greater-than-equals-to'].call(this, elm3[0].value,
-        elm3, elm4));
-
-    var elm5 =  $('<input type="text" id="element6" />');
-    var elm6=  $('<input type="text" value=6 id="element5" />');
-    ok($.validator.methods['greater-than-equals-to'].call(this, elm5[0].value,
-        elm5, elm6));
-
-    var elm7 =  $('<input type="text" value=100 id="element7" />');
-    var elm8=  $('<input type="text" value=20 id="element8" />');
-    ok($.validator.methods['greater-than-equals-to'].call(this, elm7[0].value,
-        elm7, elm8));
-});
-
-test( "testValidateGroupedQty", function() {
-    expect(5);
-    var div1 = $('<div id="div1"/>');
-    $('<input type="text"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-                             .appendTo(div1);
-    $('<input type="text"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-                             .appendTo(div1);
-    $('<input type="text"/>').appendTo(div1);
-
-    ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div1[0]));
-
-    var div2 = $('<div id="div2"/>');
-    $('<input type="text"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div2);
-    $('<input type="text" value="a"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div2);
-    $('<input type="text"/>').appendTo(div2);
-    ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div2[0]));
-
-    var div3 = $('<div id="div3"/>');
-    $('<input type="text"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div3);
-    $('<input type="text" value="-6"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div3);
-    $('<input type="text"/>').appendTo(div3);
-    ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div3[0]));
-
-    var div4 = $('<div id="div4"/>');
-    $('<input type="text"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div4);
-    $('<input type="text" value="6"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div4);
-    $('<input type="text"/>').appendTo(div4);
-    ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div4[0]));
-
-    var div5 = $('<div id="div5"/>');
-    $('<input type="text" value=""/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div5);
-    $('<input type="text" value="6"/>').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}")
-        .appendTo(div5);
-    $('<input type="text"/>').appendTo(div5);
-    ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div5[0]));
-
-});
-
-test( "testValidateCCTypeSelect", function() {
-    expect(14);
-     var visaValid = $('<input id="visa-valid" type="text" value="4916808263499650"/>');
-     var visaInvalid = $('<input id="visa-invalid" type="text" value="1234567890123456"/>');
-     var mcValid = $('<input id="mc-valid" type="text" value="5203731841177490"/>');
-     var mcInvalid = $('<input id="mc-invalid" type="text" value="1111222233334444"/>');
-     var aeValid = $('<input id="ae-valid" type="text" value="376244899619217"/>');
-     var aeInvalid = $('<input id="ae-invalid" type="text" value="123451234512345"/>');
-
-    var diValid = $('<input id="di-valid" type="text" value="6011050000000009"/>');
-    var diInvalid = $('<input id="di-invalid" type="text" value="6011199900000005"/>');
-    var dnValid = $('<input id="dn-valid" type="text" value="3095434000000001"/>');
-    var dnInvalid = $('<input id="dn-invalid" type="text" value="3799999900000003"/>');
-    var jcbValid = $('<input id="jcb-valid" type="text" value="3528000000000007"/>');
-    var jcbInvalid = $('<input id="jcb-invalid" type="text" value="359000001111118"/>');
-    var upValid = $('<input id="up-valid" type="text" value="6221260000000000"/>');
-    var upInvalid = $('<input id="up-invalid" type="text" value="6229260000000002"/>');
-
-    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 id="cc-type">' +
-        '<option value="">' +
-        '</option><option value="VI">' +
-        '</option><option value="MC">' +
-        '</option><option value="AE">' +
-        '</option><option value="DI">' +
-        '</option><option value="DN">' +
-        '</option><option value="JCB">' +
-        '</option><option value="UP">' +
-        '</option>' +
-        '</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 = $('<input id="year" type="text" value="4916808263499650"/>'),
-        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 = $('<select id="cc-type">'+
-     '<option value=""></option>'+
-     '<option value="VI"></option>'+
-     '<option value="MC"></option>'+
-     '<option value="AE"></option>'+
-     '<option value="DI"></option>'+
-     '</select>');
-
-    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 = $('<input type="text" value="" class="validate-number-range number-range-10-20 number-range-10-100.20">').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 = $('<input type="text" value="" class="validate-digits-range digits-range-10-20 digits-range-10-100.20">').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 9460bcaa563..84880e6af72 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 = $('<input name="test-suggest" id="suggest" />');
 
             $('body').append($suggest);
+            $('body').append('<script type="text/template" id="test-template">' +
+                '<div><%= data.test %></div>' +
+                '</script>');
         });
 
         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: '<li/>'
+            });
 
             expect($suggest.is(':mage-suggest')).toBe(true);
         });
 
         it('Check suggest create', function () {
             var options = {
+                    template: '#test-template',
+                    choiceTemplate: '<li/>',
                     controls: {
                         selector: '.test',
                         eventsMap: {
@@ -80,6 +89,8 @@ define([
 
         it('Check suggest render', function () {
             var options = {
+                    template: '#test-template',
+                    choiceTemplate: '<li/>',
                     dropdownWrapper: '<div class="wrapper-test"></div>',
                     className: 'test-suggest',
                     inputWrapper: '<div class="test-input-wrapper"></div>'
@@ -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: '<li/>'
+                }).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: '<li/>'
             }).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: '<li/>'
+                }),
                 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: '<li/>',
                     inputWrapper: '<div class="test-input-wrapper"></div>',
                     valueField: null
                 },
@@ -167,8 +188,14 @@ define([
             $(suggestSelector).val(value);
             $('body').append('<div id="suggest-div">' + value + '</div>');
 
-            suggestInstance = $(suggestSelector).suggest().data('mage-suggest');
-            suggestDivInstance = $('#suggest-div').suggest().data('mage-suggest');
+            suggestInstance = $(suggestSelector).suggest({
+                template: '#test-template',
+                choiceTemplate: '<li/>'
+            }).data('mage-suggest');
+            suggestDivInstance = $('#suggest-div').suggest({
+                template: '#test-template',
+                choiceTemplate: '<li/>'
+            }).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: '<li/>',
                     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: '<li/>'
+                }).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: '<li/>'
+                }).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: '<li/>',
                     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: '<li/>'
+            }).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: '<li/>',
                     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: '<li/>'
+                }).data('mage-suggest'),
                 testElement = $('<div/>');
 
             expect(suggestInstance._readItemData(testElement)).toEqual(suggestInstance._nonSelectedItem);
@@ -324,7 +369,8 @@ define([
 
         it('Check suggest template', function () {
             var suggestInstance = $(suggestSelector).suggest({
-                    template: '<div><%= data.test %></div>'
+                    template: '<div><%= data.test %></div>',
+                    choiceTemplate: '<li/>'
                 }).data('mage-suggest'),
                 tmpl = suggestInstance.templates[suggestInstance.templateName],
                 html = $('<div/>').append(tmpl({
@@ -340,7 +386,8 @@ define([
                 '</script>');
 
             suggestInstance = $(suggestSelector).suggest({
-                template: '#test-template'
+                template: '#test-template',
+                choiceTemplate: '<li/>'
             }).data('mage-suggest');
             tmpl = suggestInstance.templates[suggestInstance.templateName];
             html = $('<div />').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: '<li/>'
+            }).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: '<li/>'
+                }).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: '<li/>'
+                }).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: '<li/>'
+                }).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: '<li/>',
                     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: '<li/>',
                     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 fb1518442c8..d6c95d2887e 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 = $('<div id="7"></div>'),
-                title = $('<div data-role="title"></div>').appendTo(group),
-                content = $('<div data-role="content"></div>').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 a2b7e984259..69d8af4ff3d 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 061563f8a0e..a6138df0734 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 12138e5939a..ccf3591be0d 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, '<div>abc</div>')).toEqual(false);
+        });
+    });
+
+    describe('Testing allow-container-className', function () {
+        it('allow-container-className', function () {
+            var radio = $('<input type="radio" class="change-container-classname"/>'),
+                checkbox = $('<input type="checkbox" class="change-container-classname"/>'),
+                radio2 = $('<input type="radio"/>'),
+                checkbox2 = $('<input type="checkbox"/>');
+
+            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 = $('<input type="radio" name="radio"/>'),
+                radio2 = $('<input type="radio" name="radio" checked/>'),
+                checkbox = $('<input type="checkbox" name="checkbox"/>'),
+                checkbox2 = $('<input type="checkbox" name="checkbox" checked/>'),
+                $test = $('<div id="test-block" />'),
+                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 =  $('<input type="text" value="6" id="element1" />'),
+                elm2 =  $('<input type="text" value="5" id="element2" />'),
+                elm3 =  $('<input type="text" id="element3" />'),
+                elm4 =  $('<input type="text" value=5 id="element4" />'),
+                elm5 =  $('<input type="text" id="element6" />'),
+                elm6 =  $('<input type="text" value=6 id="element5" />'),
+                elm7 =  $('<input type="text" value=20 id="element7" />'),
+                elm8 =  $('<input type="text" value=100 id="element8" />');
+
+            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 =  $('<input type="text" value=6 id="element1" />'),
+                elm2 =  $('<input type="text" value=7 id="element2" />'),
+                elm3 =  $('<input type="text" id="element3" />'),
+                elm4 =  $('<input type="text" value=5 id="element4" />'),
+                elm5 =  $('<input type="text" id="element6" />'),
+                elm6 =  $('<input type="text" value=6 id="element5" />'),
+                elm7 =  $('<input type="text" value=100 id="element7" />'),
+                elm8 =  $('<input type="text" value=20 id="element8" />');
+
+            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 = $('<input id="visa-valid" type="text" value="4916808263499650"/>'),
+                visaInvalid = $('<input id="visa-invalid" type="text" value="1234567890123456"/>'),
+                mcValid = $('<input id="mc-valid" type="text" value="5203731841177490"/>'),
+                mcInvalid = $('<input id="mc-invalid" type="text" value="1111222233334444"/>'),
+                aeValid = $('<input id="ae-valid" type="text" value="376244899619217"/>'),
+                aeInvalid = $('<input id="ae-invalid" type="text" value="123451234512345"/>'),
+                diValid = $('<input id="di-valid" type="text" value="6011050000000009"/>'),
+                diInvalid = $('<input id="di-invalid" type="text" value="6011199900000005"/>'),
+                dnValid = $('<input id="dn-valid" type="text" value="3095434000000001"/>'),
+                dnInvalid = $('<input id="dn-invalid" type="text" value="3799999900000003"/>'),
+                jcbValid = $('<input id="jcb-valid" type="text" value="3528000000000007"/>'),
+                jcbInvalid = $('<input id="jcb-invalid" type="text" value="359000001111118"/>');
+
+            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 id="cc-type">' +
+                '<option value="">' +
+                '</option><option value="VI">' +
+                '</option><option value="MC">' +
+                '</option><option value="AE">' +
+                '</option><option value="DI">' +
+                '</option><option value="DN">' +
+                '</option><option value="JCB">' +
+                '</option><option value="UP">' +
+                '</option>' +
+                '</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 = $('<input id="year" type="text" value="4916808263499650"/>'),
+                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 = $('<select id="cc-type">' +
+                '<option value=""></option>' +
+                '<option value="VI"></option>' +
+                '<option value="MC"></option>' +
+                '<option value="AE"></option>' +
+                '<option value="DI"></option>' +
+                '</select>');
+
+            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 = $('<input type="text" value="" ' +
+                'class="validate-number-range number-range-10-20 number-range-10-100.20">').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 = $('<input type="text" value="" ' +
+                'class="validate-digits-range digits-range-10-20 digits-range-10-100.20">').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 fee88826be7..e12e7c90d4c 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(' ');
-- 
GitLab