module("rules"); test("rules() - internal - input", function () { var element = $('#firstname'); var v = $('#testForm1').validate(); deepEqual(element.rules(), { required: true, minlength: 2 }); }); test("rules(), ignore method:false", function () { var element = $('#firstnamec'); var v = $('#testForm1clean').validate({ rules: { firstname: { required: false, minlength: 2 } } }); deepEqual(element.rules(), { minlength: 2 }); }); test("rules() HTML5 required (no value)", function () { var element = $('#testForm11text1'); var v = $('#testForm11').validate(); deepEqual(element.rules(), { required: true }); }); test("rules() - internal - select", function () { var element = $('#meal'); var v = $('#testForm3').validate(); deepEqual(element.rules(), {required: true}); }); test("rules() - external", function () { var element = $('#text1'); var v = $('#form').validate({ rules: { action: {date: true, min: 5} } }); deepEqual(element.rules(), {date: true, min: 5}); }); test("rules() - external - complete form", function () { expect(1); var methods = $.extend({}, $.validator.methods); var messages = $.extend({}, $.validator.messages); $.validator.addMethod("verifyTest", function () { ok(true, "method executed"); return true; }); var v = $('#form').validate({ rules: { action: {verifyTest: true} } }); v.form(); $.validator.methods = methods; $.validator.messages = messages; }); test("rules() - internal - input", function () { var element = $('#form8input'); var v = $('#testForm8').validate(); deepEqual(element.rules(), {required: true, number: true, rangelength: [2, 8]}); }); test("rules(), merge min/max to range, minlength/maxlength to rangelength", function () { jQuery.validator.autoCreateRanges = true; var v = $("#testForm1clean").validate({ rules: { firstname: { min: 5, max: 12 }, lastname: { minlength: 2, maxlength: 8 } } }); deepEqual($("#firstnamec").rules(), {range: [5, 12]}); deepEqual($("#lastnamec").rules(), {rangelength: [2, 8]}); jQuery.validator.autoCreateRanges = false; }); test("rules(), guarantee that required is at front", function () { $("#testForm1").validate(); var v = $("#v2").validate(); $("#subformRequired").validate(); function flatRules(element) { var result = []; jQuery.each($(element).rules(), function (key, value) { result.push(key); }); return result.join(" "); } equal("required minlength", flatRules("#firstname")); equal("required minlength maxlength", flatRules("#v2-i6")); equal("required maxlength", flatRules("#co_name")); QUnit.reset(); jQuery.validator.autoCreateRanges = true; v = $("#v2").validate(); equal("required rangelength", flatRules("#v2-i6")); $("#subformRequired").validate({ rules: { co_name: "required" } }); $("#co_name").removeClass(); equal("required maxlength", flatRules("#co_name")); jQuery.validator.autoCreateRanges = false; }); test("rules(), evaluate dynamic parameters", function () { expect(2); var v = $("#testForm1clean").validate({ rules: { firstname: { min: function (element) { equal($("#firstnamec")[0], element); return 12; } } } }); deepEqual($("#firstnamec").rules(), {min: 12}); }); test("rules(), class and attribute combinations", function () { $.validator.addMethod("customMethod1", function () { return false; }, ""); $.validator.addMethod("customMethod2", function () { return false; }, ""); var v = $("#v2").validate({ rules: { 'v2-i7': { required: true, minlength: 2, customMethod: true } } }); deepEqual($("#v2-i1").rules(), { required: true }); deepEqual($("#v2-i2").rules(), { required: true, email: true }); deepEqual($("#v2-i3").rules(), { url: true }); deepEqual($("#v2-i4").rules(), { required: true, minlength: 2 }); deepEqual($("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" }); jQuery.validator.autoCreateRanges = true; deepEqual($("#v2-i5").rules(), { required: true, customMethod1: "123", rangelength: [2, 5] }); deepEqual($("#v2-i6").rules(), { required: true, customMethod2: true, rangelength: [2, 5] }); jQuery.validator.autoCreateRanges = false; 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; }); test("rules(), dependency checks", function () { var v = $("#testForm1clean").validate({ rules: { firstname: { min: { param: 5, depends: function (el) { return (/^a/).test($(el).val()); } } }, lastname: { max: { param: 12 }, email: { depends: function () { return true; } } } } }); var rules = $("#firstnamec").rules(); equal(0, v.objectLength(rules)); $("#firstnamec").val('ab'); deepEqual($("#firstnamec").rules(), {min: 5}); deepEqual($("#lastnamec").rules(), {max: 12, email: true}); }); test("rules(), add and remove", function () { $.validator.addMethod("customMethod1", function () { return false; }, ""); $("#v2").validate(); var removedAttrs = $("#v2-i5").removeClass("required").removeAttrs("minlength maxlength"); deepEqual($("#v2-i5").rules(), { customMethod1: "123" }); $("#v2-i5").addClass("required").attr(removedAttrs); deepEqual($("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" }); $("#v2-i5").addClass("email").attr({min: 5}); deepEqual($("#v2-i5").rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" }); $("#v2-i5").removeClass("required email").removeAttrs("minlength maxlength customMethod1 min"); deepEqual($("#v2-i5").rules(), {}); delete $.validator.methods.customMethod1; delete $.validator.messages.customMethod1; }); test("rules(), add and remove static rules", function () { var v = $("#testForm1clean").validate({ rules: { firstname: "required date" } }); deepEqual($("#firstnamec").rules(), { required: true, date: true }); $("#firstnamec").rules("remove", "date"); deepEqual($("#firstnamec").rules(), { required: true }); $("#firstnamec").rules("add", "email"); deepEqual($("#firstnamec").rules(), { required: true, email: true }); $("#firstnamec").rules("remove", "required"); deepEqual($("#firstnamec").rules(), { email: true }); deepEqual($("#firstnamec").rules("remove"), { email: true }); deepEqual($("#firstnamec").rules(), { }); $("#firstnamec").rules("add", "required email"); deepEqual($("#firstnamec").rules(), { required: true, email: true }); deepEqual($("#lastnamec").rules(), {}); $("#lastnamec").rules("add", "required"); $("#lastnamec").rules("add", { minlength: 2 }); deepEqual($("#lastnamec").rules(), { required: true, minlength: 2 }); var removedRules = $("#lastnamec").rules("remove", "required email"); deepEqual($("#lastnamec").rules(), { minlength: 2 }); $("#lastnamec").rules("add", removedRules); deepEqual($("#lastnamec").rules(), { required: true, minlength: 2 }); }); test("rules(), add messages", function () { $("#firstnamec").attr("title", null); var v = $("#testForm1clean").validate({ rules: { firstname: "required" } }); $("#testForm1clean").valid(); $("#firstnamec").valid(); deepEqual(v.settings.messages.firstname, undefined); $("#firstnamec").rules("add", { messages: { required: "required" } }); $("#firstnamec").valid(); deepEqual(v.errorList[0] && v.errorList[0].message, "required"); $("#firstnamec").val("test"); $("#firstnamec").valid(); equal(v.errorList.length, 0); });