Administrator
2022-09-14 58d006e05dcf2a20d0ec5367dd03d66a61db6849
提交 | 用户 | 时间
58d006 1 module("rules");
A 2
3 test("rules() - internal - input", function() {
4     var element = $('#firstname');
5     var v = $('#testForm1').validate();
6     deepEqual( element.rules(), { required: true, minlength: 2 } );
7 });
8
9 test("rules(), ignore method:false", function() {
10     var element = $('#firstnamec');
11     var v = $('#testForm1clean').validate({
12         rules: {
13             firstname: { required: false, minlength: 2 }
14         }
15     });
16     deepEqual( element.rules(), { minlength: 2 } );
17 });
18
19 test("rules() HTML5 required (no value)", function() {
20     var element = $('#testForm11text1');
21     var v = $('#testForm11').validate();
22     deepEqual( element.rules(), { required: true } );
23 });
24
25 test("rules() - internal - select", function() {
26     var element = $('#meal');
27     var v = $('#testForm3').validate();
28     deepEqual( element.rules(), {required: true} );
29 });
30
31 test("rules() - external", function() {
32     var element = $('#text1');
33     var v = $('#form').validate({
34         rules: {
35             action: {date: true, min: 5}
36         }
37     });
38     deepEqual( element.rules(), {date: true, min: 5} );
39 });
40
41 test("rules() - external - complete form", function() {
42     expect(1);
43
44     var methods = $.extend({}, $.validator.methods);
45     var messages = $.extend({}, $.validator.messages);
46
47     $.validator.addMethod("verifyTest", function() {
48         ok( true, "method executed" );
49         return true;
50     });
51     var v = $('#form').validate({
52         rules: {
53             action: {verifyTest: true}
54         }
55     });
56     v.form();
57
58     $.validator.methods = methods;
59     $.validator.messages = messages;
60 });
61
62 test("rules() - internal - input", function() {
63     var element = $('#form8input');
64     var v = $('#testForm8').validate();
65     deepEqual( element.rules(), {required: true, number: true, rangelength: [2, 8]});
66 });
67
68 test("rules(), merge min/max to range, minlength/maxlength to rangelength", function() {
69     jQuery.validator.autoCreateRanges = true;
70     var v = $("#testForm1clean").validate({
71         rules: {
72             firstname: {
73                 min: 5,
74                 max: 12
75             },
76             lastname: {
77                 minlength: 2,
78                 maxlength: 8
79             }
80         }
81     });
82     deepEqual( $("#firstnamec").rules(), {range: [5, 12]});
83
84     deepEqual( $("#lastnamec").rules(), {rangelength: [2, 8]} );
85     jQuery.validator.autoCreateRanges = false;
86 });
87
88 test("rules(), guarantee that required is at front", function() {
89     $("#testForm1").validate();
90     var v = $("#v2").validate();
91     $("#subformRequired").validate();
92     function flatRules(element) {
93         var result = [];
94         jQuery.each($(element).rules(), function(key, value) { result.push(key); });
95         return result.join(" ");
96     }
97     equal( "required minlength", flatRules("#firstname") );
98     equal( "required minlength maxlength", flatRules("#v2-i6") );
99     equal( "required maxlength", flatRules("#co_name") );
100
101     QUnit.reset();
102     jQuery.validator.autoCreateRanges = true;
103     v = $("#v2").validate();
104     equal( "required rangelength", flatRules("#v2-i6") );
105
106     $("#subformRequired").validate({
107         rules: {
108             co_name: "required"
109         }
110     });
111     $("#co_name").removeClass();
112     equal( "required maxlength", flatRules("#co_name") );
113     jQuery.validator.autoCreateRanges = false;
114 });
115
116 test("rules(), evaluate dynamic parameters", function() {
117     expect(2);
118     var v = $("#testForm1clean").validate({
119         rules: {
120             firstname: {
121                 min: function(element) {
122                     equal( $("#firstnamec")[0], element );
123                     return 12;
124                 }
125             }
126         }
127     });
128     deepEqual( $("#firstnamec").rules(), {min:12});
129 });
130
131 test("rules(), class and attribute combinations", function() {
132
133     $.validator.addMethod("customMethod1", function() {
134         return false;
135     }, "");
136     $.validator.addMethod("customMethod2", function() {
137         return false;
138     }, "");
139     var v = $("#v2").validate({
140         rules: {
141             'v2-i7': {
142                 required: true,
143                 minlength: 2,
144                 customMethod: true
145             }
146         }
147     });
148     deepEqual( $("#v2-i1").rules(), { required: true });
149     deepEqual( $("#v2-i2").rules(), { required: true, email: true });
150     deepEqual( $("#v2-i3").rules(), { url: true });
151     deepEqual( $("#v2-i4").rules(), { required: true, minlength: 2 });
152     deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" });
153     jQuery.validator.autoCreateRanges = true;
154     deepEqual( $("#v2-i5").rules(), { required: true, customMethod1: "123", rangelength: [2, 5] });
155     deepEqual( $("#v2-i6").rules(), { required: true, customMethod2: true, rangelength: [2, 5] });
156     jQuery.validator.autoCreateRanges = false;
157     deepEqual( $("#v2-i7").rules(), { required: true, minlength: 2, customMethod: true });
158
159     delete $.validator.methods.customMethod1;
160     delete $.validator.messages.customMethod1;
161     delete $.validator.methods.customMethod2;
162     delete $.validator.messages.customMethod2;
163 });
164
165 test("rules(), dependency checks", function() {
166     var v = $("#testForm1clean").validate({
167         rules: {
168             firstname: {
169                 min: {
170                     param: 5,
171                     depends: function(el) {
172                         return (/^a/).test($(el).val());
173                     }
174                 }
175             },
176             lastname: {
177                 max: {
178                     param: 12
179                 },
180                 email: {
181                     depends: function() { return true; }
182                 }
183             }
184         }
185     });
186
187     var rules = $("#firstnamec").rules();
188     equal( 0, v.objectLength(rules) );
189
190     $("#firstnamec").val('ab');
191     deepEqual( $("#firstnamec").rules(), {min:5});
192
193     deepEqual( $("#lastnamec").rules(), {max:12, email:true});
194 });
195
196 test("rules(), add and remove", function() {
197     $.validator.addMethod("customMethod1", function() {
198         return false;
199     }, "");
200     $("#v2").validate();
201     var removedAttrs = $("#v2-i5").removeClass("required").removeAttrs("minlength maxlength");
202     deepEqual( $("#v2-i5").rules(), { customMethod1: "123" });
203
204     $("#v2-i5").addClass("required").attr(removedAttrs);
205     deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" });
206
207     $("#v2-i5").addClass("email").attr({min: 5});
208     deepEqual( $("#v2-i5").rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" });
209
210     $("#v2-i5").removeClass("required email").removeAttrs("minlength maxlength customMethod1 min");
211     deepEqual( $("#v2-i5").rules(), {});
212
213     delete $.validator.methods.customMethod1;
214     delete $.validator.messages.customMethod1;
215 });
216
217 test("rules(), add and remove static rules", function() {
218     var v = $("#testForm1clean").validate({
219         rules: {
220             firstname: "required date"
221         }
222     });
223     deepEqual( $("#firstnamec").rules(), { required: true, date: true } );
224
225     $("#firstnamec").rules("remove", "date");
226     deepEqual( $("#firstnamec").rules(), { required: true } );
227     $("#firstnamec").rules("add", "email");
228     deepEqual( $("#firstnamec").rules(), { required: true, email: true } );
229
230     $("#firstnamec").rules("remove", "required");
231     deepEqual( $("#firstnamec").rules(), { email: true } );
232
233     deepEqual( $("#firstnamec").rules("remove"), { email: true } );
234     deepEqual( $("#firstnamec").rules(), { } );
235
236     $("#firstnamec").rules("add", "required email");
237     deepEqual( $("#firstnamec").rules(), { required: true, email: true } );
238
239
240     deepEqual( $("#lastnamec").rules(), {} );
241     $("#lastnamec").rules("add", "required");
242     $("#lastnamec").rules("add", {
243         minlength: 2
244     });
245     deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } );
246
247
248     var removedRules = $("#lastnamec").rules("remove", "required email");
249     deepEqual( $("#lastnamec").rules(), { minlength: 2 } );
250     $("#lastnamec").rules("add", removedRules);
251     deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } );
252 });
253
254 test("rules(), add messages", function() {
255     $("#firstnamec").attr("title", null);
256     var v = $("#testForm1clean").validate({
257         rules: {
258             firstname: "required"
259         }
260     });
261     $("#testForm1clean").valid();
262     $("#firstnamec").valid();
263     deepEqual( v.settings.messages.firstname, undefined );
264
265     $("#firstnamec").rules("add", {
266         messages: {
267             required: "required"
268         }
269     });
270
271     $("#firstnamec").valid();
272     deepEqual( v.errorList[0] && v.errorList[0].message, "required" );
273
274     $("#firstnamec").val("test");
275     $("#firstnamec").valid();
276     equal(v.errorList.length, 0);
277 });