Subversion-Projekte lars-tiefland.zeldi.de_alt

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
2 lars 1
QUnit.module( "rules" );
2
 
3
QUnit.test( "rules() - internal - input", function( assert ) {
4
	var element = $( "#firstname" );
5
 
6
	$( "#testForm1" ).validate();
7
 
8
	assert.deepEqual( element.rules(), { required: true, minlength: 2 } );
9
} );
10
 
11
QUnit.test( "rules(), ignore method:false", function( assert ) {
12
	var element = $( "#firstnamec" );
13
 
14
	$( "#testForm1clean" ).validate( {
15
		rules: {
16
			firstnamec: { required: false, minlength: 2 }
17
		}
18
	} );
19
 
20
	assert.deepEqual( element.rules(), { minlength: 2 } );
21
} );
22
 
23
QUnit.test( "rules() HTML5 required (no value)", function( assert ) {
24
	var element = $( "#testForm11text1" );
25
 
26
	$( "#testForm11" ).validate();
27
 
28
	assert.deepEqual( element.rules(), { required: true } );
29
} );
30
 
31
QUnit.test( "rules() - internal - select", function( assert ) {
32
	var element = $( "#meal" );
33
 
34
	$( "#testForm3" ).validate();
35
 
36
	assert.deepEqual( element.rules(), { required: true } );
37
} );
38
 
39
QUnit.test( "rules() - external", function( assert ) {
40
	var element = $( "#text1" );
41
 
42
	$( "#form" ).validate( {
43
		rules: {
44
			action: { date: true, min: 5 }
45
		}
46
	} );
47
 
48
	assert.deepEqual( element.rules(), { date: true, min: 5 } );
49
} );
50
 
51
QUnit.test( "rules() - external - complete form", function( assert ) {
52
	assert.expect( 1 );
53
 
54
	var methods = $.extend( {}, $.validator.methods ),
55
		messages = $.extend( {}, $.validator.messages ),
56
		v;
57
 
58
	$.validator.addMethod( "verifyTest", function() {
59
		assert.ok( true, "method executed" );
60
		return true;
61
	} );
62
	v = $( "#form" ).validate( {
63
		rules: {
64
			action: { verifyTest: true }
65
		}
66
	} );
67
	v.form();
68
 
69
	$.validator.methods = methods;
70
	$.validator.messages = messages;
71
} );
72
 
73
QUnit.test( "rules() - internal - input", function( assert ) {
74
	var element = $( "#form8input" );
75
 
76
	$( "#testForm8" ).validate();
77
 
78
	assert.deepEqual( element.rules(), { required: true, number: true, rangelength: [ 2, 8 ] } );
79
} );
80
 
81
QUnit.test( "rules(), merge min/max to range, minlength/maxlength to rangelength", function( assert ) {
82
	jQuery.validator.autoCreateRanges = true;
83
 
84
	$( "#testForm1clean" ).validate( {
85
		rules: {
86
			firstnamec: {
87
				min: -15,
88
				max: 0
89
			},
90
			lastname: {
91
				minlength: 0,
92
				maxlength: 10
93
			}
94
		}
95
	} );
96
 
97
	assert.deepEqual( $( "#firstnamec" ).rules(), { range: [ -15, 0 ] } );
98
	assert.deepEqual( $( "#lastnamec" ).rules(), { rangelength: [ 0, 10 ] } );
99
 
100
	jQuery.validator.autoCreateRanges = false;
101
} );
102
 
103
QUnit.test( "rules(), guarantee that required is at front", function( assert ) {
104
	$( "#testForm1" ).validate();
105
	var v = $( "#v2" ).validate(),
106
		v1 = $( "#subformRequired" ).validate();
107
	function flatRules( element ) {
108
		var result = [];
109
		jQuery.each( $( element ).rules(), function( key ) { result.push( key ); } );
110
		return result.join( " " );
111
	}
112
	assert.equal( flatRules( "#firstname" ), "required minlength" );
113
	assert.equal( flatRules( "#v2-i6" ), "required minlength maxlength" );
114
	assert.equal( flatRules( "#co_name" ), "required maxlength" );
115
 
116
	v.destroy();
117
	v1.destroy();
118
	jQuery.validator.autoCreateRanges = true;
119
	v = $( "#v2" ).validate();
120
	assert.equal( flatRules( "#v2-i6" ), "required rangelength" );
121
 
122
	v1 = $( "#subformRequired" ).validate( {
123
		rules: {
124
			co_name: "required"
125
		}
126
	} );
127
	$( "#co_name" ).removeClass();
128
	assert.equal( flatRules( "#co_name" ), "required maxlength" );
129
	jQuery.validator.autoCreateRanges = false;
130
} );
131
 
132
QUnit.test( "rules(), evaluate dynamic parameters", function( assert ) {
133
	assert.expect( 2 );
134
 
135
	$( "#testForm1clean" ).validate( {
136
		rules: {
137
			firstnamec: {
138
				min: function( element ) {
139
					assert.equal( $( "#firstnamec" )[ 0 ], element );
140
					return 12;
141
				}
142
			}
143
		}
144
	} );
145
 
146
	assert.deepEqual( $( "#firstnamec" ).rules(), { min: 12 } );
147
} );
148
 
149
QUnit.test( "rules(), class and attribute combinations", function( assert ) {
150
 
151
	$.validator.addMethod( "customMethod1", function() {
152
		return false;
153
	}, "" );
154
	$.validator.addMethod( "customMethod2", function() {
155
		return false;
156
	}, "" );
157
 
158
	$( "#v2" ).validate( {
159
		rules: {
160
			"v2-i9": {
161
				required: true,
162
				minlength: 2,
163
				customMethod: true
164
			}
165
		}
166
	} );
167
 
168
	assert.deepEqual( $( "#v2-i1" ).rules(), { required: true } );
169
	assert.deepEqual( $( "#v2-i2" ).rules(), { required: true, email: true } );
170
	assert.deepEqual( $( "#v2-i3" ).rules(), { url: true } );
171
	assert.deepEqual( $( "#v2-i4" ).rules(), { required: true, minlength: 2 } );
172
	assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" } );
173
	jQuery.validator.autoCreateRanges = true;
174
	assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, customMethod1: "123", rangelength: [ 2, 5 ] } );
175
	assert.deepEqual( $( "#v2-i6" ).rules(), { required: true, customMethod2: true, rangelength: [ 2, 5 ] } );
176
	assert.deepEqual( $( "#v2-i7" ).rules(), { required: true, number: true } );
177
	assert.deepEqual( $( "#v2-i8" ).rules(), { required: true, number: true } );
178
	jQuery.validator.autoCreateRanges = false;
179
	assert.deepEqual( $( "#v2-i9" ).rules(), { required: true, minlength: 2, customMethod: true } );
180
 
181
	delete $.validator.methods.customMethod1;
182
	delete $.validator.messages.customMethod1;
183
	delete $.validator.methods.customMethod2;
184
	delete $.validator.messages.customMethod2;
185
	delete $.validator.classRuleSettings.customMethod2;
186
} );
187
 
188
QUnit.test( "rules(), dependency checks", function( assert ) {
189
	var v = $( "#testForm1clean" ).validate( {
190
			rules: {
191
				firstnamec: {
192
					min: {
193
						param: 5,
194
						depends: function( el ) {
195
							return ( /^a/ ).test( $( el ).val() );
196
						}
197
					}
198
				},
199
				lastname: {
200
					max: {
201
						param: 12
202
					},
203
					email: {
204
						depends: function() { return true; }
205
					}
206
				}
207
			}
208
		} ),
209
		rules = $( "#firstnamec" ).rules();
210
 
211
	assert.equal( v.objectLength( rules ), 0 );
212
 
213
	$( "#firstnamec" ).val( "ab" );
214
	assert.deepEqual( $( "#firstnamec" ).rules(), { min: 5 } );
215
 
216
	assert.deepEqual( $( "#lastnamec" ).rules(), { max: 12, email: true } );
217
} );
218
 
219
QUnit.test( "rules(), add and remove", function( assert ) {
220
	$.validator.addMethod( "customMethod1", function() {
221
		return false;
222
	}, "" );
223
	$( "#v2" ).validate();
224
	$( "#v2-i5" ).removeClass( "required" ).removeAttr( "minlength maxlength" );
225
	assert.deepEqual( $( "#v2-i5" ).rules(), { customMethod1: "123" } );
226
 
227
	$( "#v2-i5" ).addClass( "required" ).attr( {
228
		minlength: 2,
229
		maxlength: 5
230
	} );
231
	assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" } );
232
 
233
	$( "#v2-i5" ).addClass( "email" ).attr( { min: 5 } );
234
	assert.deepEqual( $( "#v2-i5" ).rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" } );
235
 
236
	$( "#v2-i5" ).removeClass( "required email" ).removeAttr( "minlength maxlength customMethod1 min" );
237
	assert.deepEqual( $( "#v2-i5" ).rules(), {} );
238
 
239
	delete $.validator.methods.customMethod1;
240
	delete $.validator.messages.customMethod1;
241
} );
242
 
243
QUnit.test( "rules(), add and remove static rules", function( assert ) {
244
 
245
	$( "#testForm1clean" ).validate( {
246
		rules: {
247
			firstnamec: "required date"
248
		}
249
	} );
250
 
251
	assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, date: true } );
252
 
253
	$( "#firstnamec" ).rules( "remove", "date" );
254
	assert.deepEqual( $( "#firstnamec" ).rules(), { required: true } );
255
	$( "#firstnamec" ).rules( "add", "email" );
256
	assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, email: true } );
257
 
258
	$( "#firstnamec" ).rules( "remove", "required" );
259
	assert.deepEqual( $( "#firstnamec" ).rules(), { email: true } );
260
 
261
	assert.deepEqual( $( "#firstnamec" ).rules( "remove" ), { email: true } );
262
	assert.deepEqual( $( "#firstnamec" ).rules(), {} );
263
 
264
	$( "#firstnamec" ).rules( "add", "required email" );
265
	assert.deepEqual( $( "#firstnamec" ).rules(), { required: true, email: true } );
266
 
267
	assert.deepEqual( $( "#lastnamec" ).rules(), {} );
268
	$( "#lastnamec" ).rules( "add", "required" );
269
	$( "#lastnamec" ).rules( "add", {
270
		minlength: 2
271
	} );
272
	assert.deepEqual( $( "#lastnamec" ).rules(), { required: true, minlength: 2 } );
273
 
274
	var removedRules = $( "#lastnamec" ).rules( "remove", "required email" );
275
	assert.deepEqual( $( "#lastnamec" ).rules(), { minlength: 2 } );
276
	$( "#lastnamec" ).rules( "add", removedRules );
277
	assert.deepEqual( $( "#lastnamec" ).rules(), { required: true, minlength: 2 } );
278
} );
279
 
280
QUnit.test( "rules(), add messages", function( assert ) {
281
	$( "#firstnamec" ).attr( "title", null );
282
	var v = $( "#testForm1clean" ).validate( {
283
		rules: {
284
			firstnamec: "required"
285
		}
286
	} );
287
	$( "#testForm1clean" ).valid();
288
	$( "#firstnamec" ).valid();
289
	assert.deepEqual( v.settings.messages.firstname, undefined );
290
 
291
	$( "#firstnamec" ).rules( "add", {
292
		messages: {
293
			required: "required"
294
		}
295
	} );
296
 
297
	$( "#firstnamec" ).valid();
298
	assert.deepEqual( v.errorList[ 0 ] && v.errorList[ 0 ].message, "required" );
299
 
300
	$( "#firstnamec" ).val( "test" );
301
	$( "#firstnamec" ).valid();
302
	assert.equal( v.errorList.length, 0 );
303
} );
304
 
305
QUnit.test( "rules(), rangelength attribute as array", function( assert ) {
306
	$( "#testForm13" ).validate();
307
	assert.deepEqual( $( "#cars-select" ).rules(), {
308
		required: true,
309
		rangelength: [ 2, 3 ]
310
	} );
311
} );
312
 
313
QUnit.test( "rules(), global/local normalizer", function( assert ) {
314
	var username = $( "#usernamec" ),
315
		urlc = $( "#urlc" ),
316
		lastname = $( "#lastnamec" ),
317
		v;
318
 
319
	username.val( "\t\t \r" );
320
	urlc.val( "" );
321
 
322
	v = $( "#testForm1clean" ).validate( {
323
 
324
		// Using the normalizer to trim the value of all elements before validating them.
325
		normalizer: function( value ) {
326
 
327
			// This normalizer should only be called for the username element, and nothing else.
328
			assert.notEqual( this, urlc[ 0 ], "This normalizer should not be called for urlc element." );
329
			assert.equal( this, username[ 0 ], "`this` in this normalizer should be the username element." );
330
 
331
			// Trim the value of the input
332
			return $.trim( value );
333
		},
334
 
335
		rules: {
336
			username: {
337
				required: true
338
			},
339
			urlc: {
340
				required: true,
341
				url: true,
342
 
343
				// Using the normalizer to append https:// if it's not
344
				// present on the input value
345
				normalizer: function( value ) {
346
					assert.equal( this, urlc[ 0 ], "`this` in the normalizer should be the urlc element." );
347
 
348
					var url = value;
349
 
350
					// Check if it doesn't start with http:// or https:// or ftp://
351
					if ( url && url.substr( 0, 7 ) !== "http://" &&
352
						url.substr( 0, 8 ) !== "https://" &&
353
						url.substr( 0, 6 ) !== "ftp://" ) {
354
 
355
						// Then prefix with http:// or even https://
356
						url = "https://" + url;
357
					}
358
 
359
					// Return the new url
360
					return url;
361
				}
362
			},
363
			lastname: {
364
				required: true,
365
				normalizer: function() {
366
					assert.equal( this, lastname[ 0 ], "`this` in the normalizer should be the lastname element." );
367
 
368
					// The normalizer can return any value
369
					return null;
370
				}
371
			}
372
		}
373
	} );
374
 
375
	// Validate only the username and the url elements.
376
	username.valid();
377
	assert.equal( v.invalidElements()[ 0 ], username[ 0 ], "The username should be invalid" );
378
 
379
	urlc.valid();
380
	assert.equal( v.invalidElements()[ 0 ], urlc[ 0 ], "The url should be invalid" );
381
 
382
	assert.equal( v.numberOfInvalids(), 2, "There is two invalid elements" );
383
 
384
	username.val( "something" );
385
	urlc.val( "google.com" );
386
 
387
	username.trigger( "keyup" );
388
	urlc.trigger( "keyup" );
389
 
390
	lastname.valid();
391
 
392
	assert.equal( v.numberOfInvalids(), 1, "Only one element is invalid" );
393
	assert.equal( v.size(), 1, "Only one element is invalid" );
394
} );
395
 
396
QUnit.test( "rules() - on unexpected input", function( assert ) {
397
	var emptySet = $( "#firstname .mynonexistantclass" ),
398
		nonFormElement = $( "div#foo" ),
399
		result;
400
 
401
	result = emptySet.rules( "add", "whatever" );
402
	assert.deepEqual( result, undefined, "can work on an empty set without a js error" );
403
 
404
	result = nonFormElement.rules( "add", "whatever" );
405
	assert.deepEqual( result, undefined, "can work on a non-form element" );
406
} );
407
 
408
QUnit.test( "required method should return false for undefined & null values", function( assert ) {
409
	var username = $( "#usernamec" ),
410
		urlc = $( "#urlc" ),
411
		v = $( "#testForm1clean" ).validate( {
412
			rules: {
413
				username: {
414
					required: true,
415
					normalizer: function() { return null; }
416
				},
417
				urlc: {
418
					required: true,
419
					normalizer: function() { return undefined; }
420
				}
421
			}
422
		} );
423
 
424
	assert.notOk( v.element( username ), "The username element should be invalid" );
425
	assert.notOk( v.element( urlc ), "The urlc element should be invalid" );
426
} );