Blame | Letzte Änderung | Log anzeigen | RSS feed
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-i9": {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 ] } );assert.deepEqual( $( "#v2-i7" ).rules(), { required: true, number: true } );assert.deepEqual( $( "#v2-i8" ).rules(), { required: true, number: true } );jQuery.validator.autoCreateRanges = false;assert.deepEqual( $( "#v2-i9" ).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 inputreturn $.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 valuenormalizer: 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 urlreturn url;}},lastname: {required: true,normalizer: function() {assert.equal( this, lastname[ 0 ], "`this` in the normalizer should be the lastname element." );// The normalizer can return any valuereturn null;}}}} );// 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" );lastname.valid();assert.equal( v.numberOfInvalids(), 1, "Only one element is invalid" );assert.equal( v.size(), 1, "Only one element is invalid" );} );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" );} );QUnit.test( "required method should return false for undefined & null values", function( assert ) {var username = $( "#usernamec" ),urlc = $( "#urlc" ),v = $( "#testForm1clean" ).validate( {rules: {username: {required: true,normalizer: function() { return null; }},urlc: {required: true,normalizer: function() { return undefined; }}}} );assert.notOk( v.element( username ), "The username element should be invalid" );assert.notOk( v.element( urlc ), "The urlc element should be invalid" );} );