123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- QUnit.module( "rules" );
- QUnit.test( "rules() - internal - input", function( assert ) {
- var element = $( "#firstname" );
- $( "#testForm1" ).validate();
- assert.deepEqual( element.rules(), { required: true, minlength: 2 } );
- } );
- QUnit.test( "rules(), ignore method:false", function( assert ) {
- var element = $( "#firstnamec" );
- $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: { required: false, minlength: 2 }
- }
- } );
- assert.deepEqual( element.rules(), { minlength: 2 } );
- } );
- QUnit.test( "rules() HTML5 required (no value)", function( assert ) {
- var element = $( "#testForm11text1" );
- $( "#testForm11" ).validate();
- assert.deepEqual( element.rules(), { required: true } );
- } );
- QUnit.test( "rules() - internal - select", function( assert ) {
- var element = $( "#meal" );
- $( "#testForm3" ).validate();
- assert.deepEqual( element.rules(), { required: true } );
- } );
- QUnit.test( "rules() - external", function( assert ) {
- var element = $( "#text1" );
- $( "#form" ).validate( {
- rules: {
- action: { date: true, min: 5 }
- }
- } );
- assert.deepEqual( element.rules(), { date: true, min: 5 } );
- } );
- QUnit.test( "rules() - external - complete form", function( assert ) {
- assert.expect( 1 );
- var methods = $.extend( {}, $.validator.methods ),
- messages = $.extend( {}, $.validator.messages ),
- v;
- $.validator.addMethod( "verifyTest", function() {
- assert.ok( true, "method executed" );
- return true;
- } );
- v = $( "#form" ).validate( {
- rules: {
- action: { verifyTest: true }
- }
- } );
- v.form();
- $.validator.methods = methods;
- $.validator.messages = messages;
- } );
- QUnit.test( "rules() - internal - input", function( assert ) {
- var element = $( "#form8input" );
- $( "#testForm8" ).validate();
- assert.deepEqual( element.rules(), { required: true, number: true, rangelength: [ 2, 8 ] } );
- } );
- QUnit.test( "rules(), merge min/max to range, minlength/maxlength to rangelength", function( assert ) {
- jQuery.validator.autoCreateRanges = true;
- $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: {
- min: -15,
- max: 0
- },
- lastname: {
- minlength: 0,
- maxlength: 10
- }
- }
- } );
- assert.deepEqual( $( "#firstnamec" ).rules(), { range: [ -15, 0 ] } );
- assert.deepEqual( $( "#lastnamec" ).rules(), { rangelength: [ 0, 10 ] } );
- jQuery.validator.autoCreateRanges = false;
- } );
- QUnit.test( "rules(), guarantee that required is at front", function( assert ) {
- $( "#testForm1" ).validate();
- var v = $( "#v2" ).validate(),
- v1 = $( "#subformRequired" ).validate();
- function flatRules( element ) {
- var result = [];
- jQuery.each( $( element ).rules(), function( key ) { result.push( key ); } );
- return result.join( " " );
- }
- assert.equal( flatRules( "#firstname" ), "required minlength" );
- assert.equal( flatRules( "#v2-i6" ), "required minlength maxlength" );
- assert.equal( flatRules( "#co_name" ), "required maxlength" );
- v.destroy();
- v1.destroy();
- jQuery.validator.autoCreateRanges = true;
- v = $( "#v2" ).validate();
- assert.equal( flatRules( "#v2-i6" ), "required rangelength" );
- v1 = $( "#subformRequired" ).validate( {
- rules: {
- co_name: "required"
- }
- } );
- $( "#co_name" ).removeClass();
- assert.equal( flatRules( "#co_name" ), "required maxlength" );
- jQuery.validator.autoCreateRanges = false;
- } );
- QUnit.test( "rules(), evaluate dynamic parameters", function( assert ) {
- assert.expect( 2 );
- $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: {
- min: function( element ) {
- assert.equal( $( "#firstnamec" )[ 0 ], element );
- return 12;
- }
- }
- }
- } );
- assert.deepEqual( $( "#firstnamec" ).rules(), { min: 12 } );
- } );
- QUnit.test( "rules(), class and attribute combinations", function( assert ) {
- $.validator.addMethod( "customMethod1", function() {
- return false;
- }, "" );
- $.validator.addMethod( "customMethod2", function() {
- return false;
- }, "" );
- $( "#v2" ).validate( {
- rules: {
- "v2-i7": {
- required: true,
- minlength: 2,
- customMethod: true
- }
- }
- } );
- assert.deepEqual( $( "#v2-i1" ).rules(), { required: true } );
- assert.deepEqual( $( "#v2-i2" ).rules(), { required: true, email: true } );
- assert.deepEqual( $( "#v2-i3" ).rules(), { url: true } );
- assert.deepEqual( $( "#v2-i4" ).rules(), { required: true, minlength: 2 } );
- assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" } );
- jQuery.validator.autoCreateRanges = true;
- assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, customMethod1: "123", rangelength: [ 2, 5 ] } );
- assert.deepEqual( $( "#v2-i6" ).rules(), { required: true, customMethod2: true, rangelength: [ 2, 5 ] } );
- jQuery.validator.autoCreateRanges = false;
- assert.deepEqual( $( "#v2-i7" ).rules(), { required: true, minlength: 2, customMethod: true } );
- delete $.validator.methods.customMethod1;
- delete $.validator.messages.customMethod1;
- delete $.validator.methods.customMethod2;
- delete $.validator.messages.customMethod2;
- delete $.validator.classRuleSettings.customMethod2;
- } );
- QUnit.test( "rules(), dependency checks", function( assert ) {
- var v = $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: {
- min: {
- param: 5,
- depends: function( el ) {
- return ( /^a/ ).test( $( el ).val() );
- }
- }
- },
- lastname: {
- max: {
- param: 12
- },
- email: {
- depends: function() { return true; }
- }
- }
- }
- } ),
- rules = $( "#firstnamec" ).rules();
- assert.equal( v.objectLength( rules ), 0 );
- $( "#firstnamec" ).val( "ab" );
- assert.deepEqual( $( "#firstnamec" ).rules(), { min: 5 } );
- assert.deepEqual( $( "#lastnamec" ).rules(), { max: 12, email: true } );
- } );
- QUnit.test( "rules(), add and remove", function( assert ) {
- $.validator.addMethod( "customMethod1", function() {
- return false;
- }, "" );
- $( "#v2" ).validate();
- $( "#v2-i5" ).removeClass( "required" ).removeAttr( "minlength maxlength" );
- assert.deepEqual( $( "#v2-i5" ).rules(), { customMethod1: "123" } );
- $( "#v2-i5" ).addClass( "required" ).attr( {
- minlength: 2,
- maxlength: 5
- } );
- assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" } );
- $( "#v2-i5" ).addClass( "email" ).attr( { min: 5 } );
- assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" } );
- $( "#v2-i5" ).removeClass( "required email" ).removeAttr( "minlength maxlength customMethod1 min" );
- assert.deepEqual( $( "#v2-i5" ).rules(), {} );
- delete $.validator.methods.customMethod1;
- delete $.validator.messages.customMethod1;
- } );
- QUnit.test( "rules(), add and remove static rules", function( assert ) {
- $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: "required date"
- }
- } );
- assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, date: true } );
- $( "#firstnamec" ).rules( "remove", "date" );
- assert.deepEqual( $( "#firstnamec" ).rules(), { required: true } );
- $( "#firstnamec" ).rules( "add", "email" );
- assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, email: true } );
- $( "#firstnamec" ).rules( "remove", "required" );
- assert.deepEqual( $( "#firstnamec" ).rules(), { email: true } );
- assert.deepEqual( $( "#firstnamec" ).rules( "remove" ), { email: true } );
- assert.deepEqual( $( "#firstnamec" ).rules(), {} );
- $( "#firstnamec" ).rules( "add", "required email" );
- assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, email: true } );
- assert.deepEqual( $( "#lastnamec" ).rules(), {} );
- $( "#lastnamec" ).rules( "add", "required" );
- $( "#lastnamec" ).rules( "add", {
- minlength: 2
- } );
- assert.deepEqual( $( "#lastnamec" ).rules(), { required: true, minlength: 2 } );
- var removedRules = $( "#lastnamec" ).rules( "remove", "required email" );
- assert.deepEqual( $( "#lastnamec" ).rules(), { minlength: 2 } );
- $( "#lastnamec" ).rules( "add", removedRules );
- assert.deepEqual( $( "#lastnamec" ).rules(), { required: true, minlength: 2 } );
- } );
- QUnit.test( "rules(), add messages", function( assert ) {
- $( "#firstnamec" ).attr( "title", null );
- var v = $( "#testForm1clean" ).validate( {
- rules: {
- firstnamec: "required"
- }
- } );
- $( "#testForm1clean" ).valid();
- $( "#firstnamec" ).valid();
- assert.deepEqual( v.settings.messages.firstname, undefined );
- $( "#firstnamec" ).rules( "add", {
- messages: {
- required: "required"
- }
- } );
- $( "#firstnamec" ).valid();
- assert.deepEqual( v.errorList[ 0 ] && v.errorList[ 0 ].message, "required" );
- $( "#firstnamec" ).val( "test" );
- $( "#firstnamec" ).valid();
- assert.equal( v.errorList.length, 0 );
- } );
- QUnit.test( "rules(), rangelength attribute as array", function( assert ) {
- $( "#testForm13" ).validate();
- assert.deepEqual( $( "#cars-select" ).rules(), {
- required: true,
- rangelength: [ 2, 3 ]
- } );
- } );
- QUnit.test( "rules(), global/local normalizer", function( assert ) {
- var username = $( "#usernamec" ),
- urlc = $( "#urlc" ),
- lastname = $( "#lastnamec" ),
- v;
- username.val( "\t\t \r" );
- urlc.val( "" );
- v = $( "#testForm1clean" ).validate( {
- // Using the normalizer to trim the value of all elements before validating them.
- normalizer: function( value ) {
- // This normalizer should only be called for the username element, and nothing else.
- assert.notEqual( this, urlc[ 0 ], "This normalizer should not be called for urlc element." );
- assert.equal( this, username[ 0 ], "`this` in this normalizer should be the username element." );
- // Trim the value of the input
- return $.trim( value );
- },
- rules: {
- username: {
- required: true
- },
- urlc: {
- required: true,
- url: true,
- // Using the normalizer to append https:// if it's not
- // present on the input value
- normalizer: function( value ) {
- assert.equal( this, urlc[ 0 ], "`this` in the normalizer should be the urlc element." );
- var url = value;
- // Check if it doesn't start with http:// or https:// or ftp://
- if ( url && url.substr( 0, 7 ) !== "http://" &&
- url.substr( 0, 8 ) !== "https://" &&
- url.substr( 0, 6 ) !== "ftp://" ) {
- // Then prefix with http:// or even https://
- url = "https://" + url;
- }
- // Return the new url
- return url;
- }
- },
- lastname: {
- required: true,
- normalizer: function( value ) {
- assert.equal( this, lastname[ 0 ], "`this` in the normalizer should be the lastname element." );
- // Return null in order to make sure an exception is thrown
- // when normalizer returns a non string value.
- value = null;
- return value;
- }
- }
- }
- } );
- // Validate only the username and the url elements.
- username.valid();
- assert.equal( v.invalidElements()[ 0 ], username[ 0 ], "The username should be invalid" );
- urlc.valid();
- assert.equal( v.invalidElements()[ 0 ], urlc[ 0 ], "The url should be invalid" );
- assert.equal( v.numberOfInvalids(), 2, "There is two invalid elements" );
- username.val( "something" );
- urlc.val( "google.com" );
- username.trigger( "keyup" );
- urlc.trigger( "keyup" );
- assert.equal( v.numberOfInvalids(), 0, "All elements are valid" );
- assert.equal( v.size(), 0, "All elements are valid" );
- // Validate the lastname element, which will throw an exception
- assert.throws( function() {
- v.check( lastname[ 0 ] );
- }, function( err ) {
- return err.name === "TypeError" && err.message === "The normalizer should return a string value.";
- }, "This should throw a TypeError exception." );
- } );
- QUnit.test( "rules() - on unexpected input", function( assert ) {
- var emptySet = $( "#firstname .mynonexistantclass" ),
- nonFormElement = $( "div#foo" ),
- result;
- result = emptySet.rules( "add", "whatever" );
- assert.deepEqual( result, undefined, "can work on an empty set without a js error" );
- result = nonFormElement.rules( "add", "whatever" );
- assert.deepEqual( result, undefined, "can work on a non-form element" );
- } );
|