123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- QUnit.module( "placement" );
- QUnit.test( "elements() order", function( assert ) {
- var container = $( "#orderContainer" ),
- v = $( "#elementsOrder" ).validate( {
- errorLabelContainer: container,
- wrap: "li"
- } );
- assert.deepEqual(
- v.elements().map( function() {
- return $( this ).attr( "id" );
- } ).get(),
- [
- "order1",
- "order2",
- "order3",
- "order4",
- "order5",
- "order6"
- ],
- "elements must be in document order"
- );
- v.form();
- assert.deepEqual(
- container.children().map( function() {
- return $( this ).attr( "id" );
- } ).get(),
- [
- "order1-error",
- "order2-error",
- "order3-error",
- "order4-error",
- "order5-error",
- "order6-error"
- ],
- "labels in error container must be in document order"
- );
- } );
- QUnit.test( "error containers, simple", function( assert ) {
- assert.expect( 14 );
- var container = $( "#simplecontainer" ),
- v = $( "#form" ).validate( {
- errorLabelContainer: container,
- showErrors: function() {
- container.find( "h3" ).html( jQuery.validator.format( "There are {0} errors in your form.", this.size() ) );
- this.defaultShowErrors();
- }
- } );
- v.prepareForm();
- assert.ok( v.valid(), "form is valid" );
- assert.equal( container.find( ".error:not(input)" ).length, 0, "There should be no error labels" );
- assert.equal( container.find( "h3" ).html(), "" );
- v.prepareForm();
- v.errorList = [
- {
- message: "bar",
- element: {
- name: "foo"
- }
- },
- {
- message: "necessary",
- element: {
- name: "required"
- }
- }
- ];
- assert.ok( !v.valid(), "form is not valid after adding errors manually" );
- v.showErrors();
- assert.equal( container.find( ".error:not(input)" ).length, 2, "There should be two error labels" );
- assert.ok( container.is( ":visible" ), "Check that the container is visible" );
- container.find( ".error:not(input)" ).each( function() {
- assert.ok( $( this ).is( ":visible" ), "Check that each label is visible" );
- } );
- assert.equal( container.find( "h3" ).html(), "There are 2 errors in your form." );
- v.prepareForm();
- assert.ok( v.valid(), "form is valid after a reset" );
- v.showErrors();
- assert.equal( container.find( ".error:not(input)" ).length, 2, "There should still be two error labels" );
- assert.ok( container.is( ":hidden" ), "Check that the container is hidden" );
- container.find( ".error:not(input)" ).each( function() {
- assert.ok( $( this ).is( ":hidden" ), "Check that each label is hidden" );
- } );
- } );
- QUnit.test( "error containers, with labelcontainer I", function( assert ) {
- assert.expect( 16 );
- var container = $( "#container" ),
- labelcontainer = $( "#labelcontainer" ),
- v = $( "#form" ).validate( {
- errorContainer: container,
- errorLabelContainer: labelcontainer,
- wrapper: "li"
- } );
- assert.ok( v.valid(), "form is valid" );
- assert.equal( container.find( ".error:not(input)" ).length, 0, "There should be no error labels in the container" );
- assert.equal( labelcontainer.find( ".error:not(input)" ).length, 0, "There should be no error labels in the labelcontainer" );
- assert.equal( labelcontainer.find( "li" ).length, 0, "There should be no lis labels in the labelcontainer" );
- v.errorList = [
- {
- message: "bar",
- element: {
- name: "foo"
- }
- },
- {
- name: "required",
- message: "necessary",
- element: {
- name: "required"
- }
- }
- ];
- assert.ok( !v.valid(), "form is not valid after adding errors manually" );
- v.showErrors();
- assert.equal( container.find( ".error:not(input)" ).length, 0, "There should be no error label in the container" );
- assert.equal( labelcontainer.find( ".error:not(input)" ).length, 2, "There should be two error labels in the labelcontainer" );
- assert.equal( labelcontainer.find( "li" ).length, 2, "There should be two error lis in the labelcontainer" );
- assert.ok( container.is( ":visible" ), "Check that the container is visible" );
- assert.ok( labelcontainer.is( ":visible" ), "Check that the labelcontainer is visible" );
- labelcontainer.find( ".error:not(input)" ).each( function() {
- assert.ok( $( this ).is( ":visible" ), "Check that each label is visible1" );
- assert.equal( $( this ).parent()[ 0 ].tagName.toLowerCase(), "li", "Check that each label is wrapped in an li" );
- assert.ok( $( this ).parent( "li" ).is( ":visible" ), "Check that each parent li is visible" );
- } );
- } );
- QUnit.test( "errorcontainer, show/hide only on submit", function( assert ) {
- assert.expect( 14 );
- var container = $( "#container" ),
- labelContainer = $( "#labelcontainer" ),
- v = $( "#testForm1" ).bind( "invalid-form.validate", function() {
- assert.ok( true, "invalid-form event triggered called" );
- } ).validate( {
- errorContainer: container,
- errorLabelContainer: labelContainer,
- showErrors: function() {
- container.html( jQuery.validator.format( "There are {0} errors in your form.", this.numberOfInvalids() ) );
- assert.ok( true, "showErrors called" );
- this.defaultShowErrors();
- }
- } );
- assert.equal( container.html(), "", "must be empty" );
- assert.equal( labelContainer.html(), "", "must be empty" );
- // Validate whole form, both showErrors and invalidHandler must be called once
- // preferably invalidHandler first, showErrors second
- assert.ok( !v.form(), "invalid form" );
- assert.equal( labelContainer.find( ".error:not(input)" ).length, 2 );
- assert.equal( container.html(), "There are 2 errors in your form." );
- assert.ok( labelContainer.is( ":visible" ), "must be visible" );
- assert.ok( container.is( ":visible" ), "must be visible" );
- $( "#firstname" ).val( "hix" ).keyup();
- $( "#testForm1" ).triggerHandler( "keyup", [
- jQuery.event.fix( {
- type: "keyup",
- target: $( "#firstname" )[ 0 ]
- } )
- ] );
- assert.equal( labelContainer.find( ".error:visible" ).length, 1 );
- assert.equal( container.html(), "There are 1 errors in your form." );
- $( "#lastname" ).val( "abc" );
- assert.ok( v.form(), "Form now valid, trigger showErrors but not invalid-form" );
- } );
- QUnit.test( "test label used as error container", function( assert ) {
- assert.expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
- form.validate( {
- errorPlacement: function( error, element ) {
- // Append error within linked label
- $( "label[for='" + element.attr( "id" ) + "']" ).append( error );
- },
- errorElement: "span"
- } );
- assert.ok( !field.valid() );
- assert.equal( field.next( "label" ).contents().first().text(), "Field Label", "container label isn't disrupted" );
- assert.hasError( field, "missing" );
- assert.ok( !field.attr( "aria-describedby" ), "field does not require aria-describedby attribute" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.equal( field.next( "label" ).contents().first().text(), "Field Label", "container label isn't disrupted" );
- assert.ok( !field.attr( "aria-describedby" ), "field does not require aria-describedby attribute" );
- assert.noErrorFor( field );
- } );
- QUnit.test( "test error placed adjacent to descriptive label", function( assert ) {
- assert.expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
- form.validate( {
- errorElement: "span"
- } );
- assert.ok( !field.valid() );
- assert.equal( form.find( "label" ).length, 1 );
- assert.equal( form.find( "label" ).text(), "Field Label", "container label isn't disrupted" );
- assert.hasError( field, "missing" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.equal( form.find( "label" ).length, 1 );
- assert.equal( form.find( "label" ).text(), "Field Label", "container label isn't disrupted" );
- assert.noErrorFor( field );
- } );
- QUnit.test( "test descriptive label used alongside error label", function( assert ) {
- assert.expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
- form.validate( {
- errorElement: "label"
- } );
- assert.ok( !field.valid() );
- assert.equal( form.find( "label.title" ).length, 1 );
- assert.equal( form.find( "label.title" ).text(), "Field Label", "container label isn't disrupted" );
- assert.hasError( field, "missing" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.equal( form.find( "label.title" ).length, 1 );
- assert.equal( form.find( "label.title" ).text(), "Field Label", "container label isn't disrupted" );
- assert.noErrorFor( field );
- } );
- QUnit.test( "test custom errorElement", function( assert ) {
- assert.expect( 4 );
- var form = $( "#userForm" ),
- field = $( "#username" );
- form.validate( {
- messages: {
- username: "missing"
- },
- errorElement: "label"
- } );
- assert.ok( !field.valid() );
- assert.hasError( field, "missing", "Field should have error 'missing'" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.noErrorFor( field, "Field should not have a visible error" );
- } );
- QUnit.test( "test existing label used as error element", function( assert ) {
- assert.expect( 4 );
- var form = $( "#testForm14" ),
- field = $( "#testForm14text" );
- form.validate( { errorElement: "label" } );
- assert.ok( !field.valid() );
- assert.hasError( field, "required" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.noErrorFor( field );
- } );
- QUnit.test( "test existing non-label used as error element", function( assert ) {
- assert.expect( 4 );
- var form = $( "#testForm15" ),
- field = $( "#testForm15text" );
- form.validate( { errorElement: "span" } );
- assert.ok( !field.valid() );
- assert.hasError( field, "required" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.noErrorFor( field );
- } );
- QUnit.test( "test aria-describedby with input names contains CSS-selector meta-characters", function( assert ) {
- var form = $( "#testForm21" ),
- field = $( "#testForm21\\!\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\`\\{\\|\\}\\~" );
- assert.equal( field.attr( "aria-describedby" ), undefined );
- form.validate( {
- errorElement: "span",
- errorPlacement: function() {
- // Do something
- }
- } );
- // Validate the element
- assert.ok( !field.valid() );
- assert.equal( field.attr( "aria-describedby" ), "testForm21!#$%&'()*+,./:;<=>?@[\\]^`{|}~-error" );
- // Re-run validation
- field.val( "some" );
- field.trigger( "keyup" );
- field.val( "something" );
- field.trigger( "keyup" );
- assert.equal( field.attr( "aria-describedby" ), "testForm21!#$%&'()*+,./:;<=>?@[\\]^`{|}~-error", "`aria-describedby` should remain the same as before." );
- // Re-run validation
- field.val( "something something" );
- field.trigger( "keyup" );
- assert.ok( field.valid() );
- assert.equal( field.attr( "aria-describedby" ), "testForm21!#$%&'()*+,./:;<=>?@[\\]^`{|}~-error", "`aria-describedby` should remain the same as before." );
- } );
- QUnit.test( "test existing non-error aria-describedby", function( assert ) {
- assert.expect( 8 );
- var form = $( "#testForm17" ),
- field = $( "#testForm17text" );
- assert.equal( field.attr( "aria-describedby" ), "testForm17text-description" );
- form.validate( { errorElement: "span" } );
- assert.ok( !field.valid() );
- assert.equal( field.attr( "aria-describedby" ), "testForm17text-description testForm17text-error" );
- assert.hasError( field, "required" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.noErrorFor( field );
- assert.strictEqual( $( "#testForm17text-description" ).text(), "This is where you enter your data" );
- assert.strictEqual( $( "#testForm17text-error" ).text(), "", "Error label is empty for valid field" );
- } );
- QUnit.test( "test pre-assigned non-error aria-describedby", function( assert ) {
- assert.expect( 7 );
- var form = $( "#testForm17" ),
- field = $( "#testForm17text" );
- // Pre-assign error identifier
- field.attr( "aria-describedby", "testForm17text-description testForm17text-error" );
- form.validate( { errorElement: "span" } );
- assert.ok( !field.valid() );
- assert.equal( field.attr( "aria-describedby" ), "testForm17text-description testForm17text-error" );
- assert.hasError( field, "required" );
- field.val( "foo" );
- assert.ok( field.valid() );
- assert.noErrorFor( field );
- assert.strictEqual( $( "#testForm17text-description" ).text(), "This is where you enter your data" );
- assert.strictEqual( $( "#testForm17text-error" ).text(), "", "Error label is empty for valid field" );
- } );
- QUnit.test( "test id/name containing brackets", function( assert ) {
- var form = $( "#testForm18" ),
- field = $( "#testForm18\\[text\\]" );
- form.validate( {
- errorElement: "span"
- } );
- form.valid();
- field.valid();
- assert.hasError( field, "required" );
- } );
- QUnit.test( "test id/name containing $", function( assert ) {
- var form = $( "#testForm19" ),
- field = $( "#testForm19\\$text" );
- form.validate( {
- errorElement: "span"
- } );
- field.valid();
- assert.hasError( field, "required" );
- } );
- QUnit.test( "test id/name containing single quotes", function( assert ) {
- var v = $( "#testForm20" ).validate(),
- textElement = $( "#testForm20\\[\\'textinput\\'\\]" ),
- checkboxElement = $( "#testForm20\\[\\'checkboxinput\\'\\]" ),
- radioElement = $( "#testForm20\\[\\'radioinput\\'\\]" );
- v.form();
- assert.equal( v.numberOfInvalids(), 3, "There is three invalid elements" );
- assert.equal( v.invalidElements()[ 0 ], textElement[ 0 ], "The element should be invalid" );
- assert.equal( v.invalidElements()[ 1 ], checkboxElement[ 0 ], "The text element should be invalid" );
- assert.equal( v.invalidElements()[ 2 ], radioElement[ 0 ], "The text element should be invalid" );
- } );
- QUnit.test( "#1632: Error hidden, but input error class not removed", function( assert ) {
- var v = $( "#testForm23" ).validate( {
- rules: {
- box1: {
- required: {
- depends: function() {
- return !!$( "#box2" ).val();
- }
- }
- },
- box2: {
- required: {
- depends: function() {
- return !!$( "#box1" ).val();
- }
- }
- }
- }
- } ),
- box1 = $( "#box1" ),
- box2 = $( "#box2" );
- box1.val( "something" );
- v.form();
- assert.equal( v.numberOfInvalids(), 1, "There is only one invlid element" );
- assert.equal( v.invalidElements()[ 0 ], box2[ 0 ], "The box2 element should be invalid" );
- box1.val( "" );
- v.form();
- assert.equal( v.numberOfInvalids(), 0, "There is no error" );
- assert.equal( box2.hasClass( "error" ), false, "Box2 should not have an error class" );
- } );
|