diff options
Diffstat (limited to 'tests/unit/datepicker/methods.js')
-rw-r--r-- | tests/unit/datepicker/methods.js | 224 |
1 files changed, 103 insertions, 121 deletions
diff --git a/tests/unit/datepicker/methods.js b/tests/unit/datepicker/methods.js index 4fc0c84ec..7061a23c3 100644 --- a/tests/unit/datepicker/methods.js +++ b/tests/unit/datepicker/methods.js @@ -1,134 +1,116 @@ define( [ "qunit", "jquery", - "./helper", + "../calendar/helper", "ui/widgets/datepicker" ], function( QUnit, $, testHelper ) { -QUnit.module( "datepicker: methods" ); +QUnit.module( "datepicker: methods", { + beforeEach: function() { + this.element = $( "#datepicker" ).datepicker( { show: false, hide: false } ); + this.widget = this.element.datepicker( "widget" ); + }, + afterEach: function() { + this.element.datepicker( "destroy" ).val( "" ); + } +} ); QUnit.test( "destroy", function( assert ) { - assert.expect( 33 ); - var inl, - inp = testHelper.init( "#inp" ); - assert.ok( inp.is( ".hasDatepicker" ), "Default - marker class set" ); - assert.ok( $.data( inp[ 0 ], testHelper.PROP_NAME ), "Default - instance present" ); - assert.ok( inp.next().is( "#alt" ), "Default - button absent" ); - inp.datepicker( "destroy" ); - inp = $( "#inp" ); - assert.ok( !inp.is( ".hasDatepicker" ), "Default - marker class cleared" ); - assert.ok( !$.data( inp[ 0 ], testHelper.PROP_NAME ), "Default - instance absent" ); - assert.ok( inp.next().is( "#alt" ), "Default - button absent" ); - - // With button - inp = testHelper.init( "#inp", { showOn: "both" } ); - assert.ok( inp.is( ".hasDatepicker" ), "Button - marker class set" ); - assert.ok( $.data( inp[ 0 ], testHelper.PROP_NAME ), "Button - instance present" ); - assert.ok( inp.next().text() === "...", "Button - button added" ); - inp.datepicker( "destroy" ); - inp = $( "#inp" ); - assert.ok( !inp.is( ".hasDatepicker" ), "Button - marker class cleared" ); - assert.ok( !$.data( inp[ 0 ], testHelper.PROP_NAME ), "Button - instance absent" ); - assert.ok( inp.next().is( "#alt" ), "Button - button removed" ); - - // With append text - inp = testHelper.init( "#inp", { appendText: "Testing" } ); - assert.ok( inp.is( ".hasDatepicker" ), "Append - marker class set" ); - assert.ok( $.data( inp[ 0 ], testHelper.PROP_NAME ), "Append - instance present" ); - assert.ok( inp.next().text() === "Testing", "Append - append text added" ); - inp.datepicker( "destroy" ); - inp = $( "#inp" ); - assert.ok( !inp.is( ".hasDatepicker" ), "Append - marker class cleared" ); - assert.ok( !$.data( inp[ 0 ], testHelper.PROP_NAME ), "Append - instance absent" ); - assert.ok( inp.next().is( "#alt" ), "Append - append text removed" ); - - // With both - inp = testHelper.init( "#inp", { showOn: "both", buttonImageOnly: true, - buttonImage: "images/calendar.gif", appendText: "Testing" } ); - assert.ok( inp.is( ".hasDatepicker" ), "Both - marker class set" ); - assert.ok( $.data( inp[ 0 ], testHelper.PROP_NAME ), "Both - instance present" ); - assert.ok( inp.next()[ 0 ].nodeName.toLowerCase() === "img", "Both - button added" ); - assert.ok( inp.next().next().text() === "Testing", "Both - append text added" ); - inp.datepicker( "destroy" ); - inp = $( "#inp" ); - assert.ok( !inp.is( ".hasDatepicker" ), "Both - marker class cleared" ); - assert.ok( !$.data( inp[ 0 ], testHelper.PROP_NAME ), "Both - instance absent" ); - assert.ok( inp.next().is( "#alt" ), "Both - button and append text absent" ); - - // Inline - inl = testHelper.init( "#inl" ); - assert.ok( inl.is( ".hasDatepicker" ), "Inline - marker class set" ); - assert.ok( inl.html() !== "", "Inline - datepicker present" ); - assert.ok( $.data( inl[ 0 ], testHelper.PROP_NAME ), "Inline - instance present" ); - assert.ok( inl.next().length === 0 || inl.next().is( "p" ), "Inline - button absent" ); - inl.datepicker( "destroy" ); - inl = $( "#inl" ); - assert.ok( !inl.is( ".hasDatepicker" ), "Inline - marker class cleared" ); - assert.ok( inl.html() === "", "Inline - datepicker absent" ); - assert.ok( !$.data( inl[ 0 ], testHelper.PROP_NAME ), "Inline - instance absent" ); - assert.ok( inl.next().length === 0 || inl.next().is( "p" ), "Inline - button absent" ); + assert.expect( 3 ); + + var input = $( "<input>" ).appendTo( "#qunit-fixture" ); + + assert.domEqual( input, function() { + input.datepicker(); + assert.ok( input.attr( "aria-owns" ), "aria-owns attribute added" ); + assert.ok( input.attr( "aria-haspopup" ), "aria-haspopup attribute added" ); + input.datepicker( "destroy" ); + } ); +} ); + +QUnit.test( "enable / disable", function( assert ) { + assert.expect( 10 ); + + this.element.datepicker( "disable" ); + assert.ok( this.element.datepicker( "option", "disabled" ), "disabled option is set" ); + assert.ok( this.widget.hasClass( "ui-datepicker-disabled" ), "has disabled widget class name" ); + assert.ok( this.element.hasClass( "ui-state-disabled" ), "has disabled state class name" ); + assert.equal( this.element.attr( "aria-disabled" ), "true", "has ARIA disabled" ); + assert.equal( this.element.attr( "disabled" ), "disabled", "input disabled" ); + + this.element.datepicker( "enable" ); + assert.ok( !this.element.datepicker( "option", "disabled" ), "enabled after enable() call" ); + assert.ok( !this.widget.hasClass( "ui-datepicker-disabled" ), "no longer has disabled widget class name" ); + assert.ok( !this.element.hasClass( "ui-state-disabled" ), "no longer has disabled state class name" ); + assert.equal( this.element.attr( "aria-disabled" ), "false", "no longer has ARIA disabled" ); + assert.equal( this.element.attr( "disabled" ), undefined, "input no longer disabled" ); } ); -QUnit.test( "enableDisable", function( assert ) { - assert.expect( 33 ); - var inl, dp, - inp = testHelper.init( "#inp" ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable - initially marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable - field initially enabled" ); - inp.datepicker( "disable" ); - assert.ok( inp.datepicker( "isDisabled" ), "Enable/disable - now marked as disabled" ); - assert.ok( inp[ 0 ].disabled, "Enable/disable - field now disabled" ); - inp.datepicker( "enable" ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable - now marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable - field now enabled" ); - inp.datepicker( "destroy" ); - - // With a button - inp = testHelper.init( "#inp", { showOn: "button" } ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable button - initially marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable button - field initially enabled" ); - assert.ok( !inp.next( "button" )[ 0 ].disabled, "Enable/disable button - button initially enabled" ); - inp.datepicker( "disable" ); - assert.ok( inp.datepicker( "isDisabled" ), "Enable/disable button - now marked as disabled" ); - assert.ok( inp[ 0 ].disabled, "Enable/disable button - field now disabled" ); - assert.ok( inp.next( "button" )[ 0 ].disabled, "Enable/disable button - button now disabled" ); - inp.datepicker( "enable" ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable button - now marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable button - field now enabled" ); - assert.ok( !inp.next( "button" )[ 0 ].disabled, "Enable/disable button - button now enabled" ); - inp.datepicker( "destroy" ); - - // With an image button - inp = testHelper.init( "#inp", { showOn: "button", buttonImageOnly: true, - buttonImage: "images/calendar.gif" } ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable image - initially marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable image - field initially enabled" ); - assert.ok( parseFloat( inp.next( "img" ).css( "opacity" ) ) === 1, "Enable/disable image - image initially enabled" ); - inp.datepicker( "disable" ); - assert.ok( inp.datepicker( "isDisabled" ), "Enable/disable image - now marked as disabled" ); - assert.ok( inp[ 0 ].disabled, "Enable/disable image - field now disabled" ); - assert.ok( parseFloat( inp.next( "img" ).css( "opacity" ) ) !== 1, "Enable/disable image - image now disabled" ); - inp.datepicker( "enable" ); - assert.ok( !inp.datepicker( "isDisabled" ), "Enable/disable image - now marked as enabled" ); - assert.ok( !inp[ 0 ].disabled, "Enable/disable image - field now enabled" ); - assert.ok( parseFloat( inp.next( "img" ).css( "opacity" ) ) === 1, "Enable/disable image - image now enabled" ); - inp.datepicker( "destroy" ); - - // Inline - inl = testHelper.init( "#inl", { changeYear: true } ); - dp = $( ".ui-datepicker-inline", inl ); - assert.ok( !inl.datepicker( "isDisabled" ), "Enable/disable inline - initially marked as enabled" ); - assert.ok( !dp.children().is( ".ui-state-disabled" ), "Enable/disable inline - not visually disabled initially" ); - assert.ok( !dp.find( "select" ).prop( "disabled" ), "Enable/disable inline - form element enabled initially" ); - inl.datepicker( "disable" ); - assert.ok( inl.datepicker( "isDisabled" ), "Enable/disable inline - now marked as disabled" ); - assert.ok( dp.children().is( ".ui-state-disabled" ), "Enable/disable inline - visually disabled" ); - assert.ok( dp.find( "select" ).prop( "disabled" ), "Enable/disable inline - form element disabled" ); - inl.datepicker( "enable" ); - assert.ok( !inl.datepicker( "isDisabled" ), "Enable/disable inline - now marked as enabled" ); - assert.ok( !dp.children().is( ".ui-state-disabled" ), "Enable/disable inline - not visiually disabled" ); - assert.ok( !dp.find( "select" ).prop( "disabled" ), "Enable/disable inline - form element enabled" ); - inl.datepicker( "destroy" ); +QUnit.test( "widget", function( assert ) { + assert.expect( 1 ); + + assert.deepEqual( $( "body > .ui-front" )[ 0 ], this.widget[ 0 ] ); + this.widget.remove(); +} ); + +QUnit.test( "open / close", function( assert ) { + assert.expect( 7 ); + + assert.ok( this.widget.is( ":hidden" ), "calendar hidden on init" ); + + this.element.datepicker( "open" ); + assert.ok( this.widget.is( ":visible" ), "open: calendar visible" ); + assert.equal( this.widget.attr( "aria-hidden" ), "false", "open: calendar aria-hidden" ); + assert.equal( this.widget.attr( "aria-expanded" ), "true", "close: calendar aria-expanded" ); + + this.element.datepicker( "close" ); + assert.ok( !this.widget.is( ":visible" ), "close: calendar hidden" ); + assert.equal( this.widget.attr( "aria-hidden" ), "true", "close: calendar aria-hidden" ); + assert.equal( this.widget.attr( "aria-expanded" ), "false", "close: calendar aria-expanded" ); +} ); + +QUnit.test( "value", function( assert ) { + assert.expect( 4 ); + + this.element.datepicker( "value", "1/1/14" ); + assert.equal( this.element.val(), "1/1/14", "input's value set" ); + + this.element.datepicker( "open" ); + assert.ok( + this.widget.find( "button[data-ui-calendar-timestamp]" ).eq( 0 ).hasClass( "ui-state-active" ), + "first day marked as selected" + ); + assert.equal( this.element.datepicker( "value" ), "1/1/14", "getter" ); + + this.element.val( "abc" ); + assert.strictEqual( this.element.datepicker( "value" ), null, "Invalid values should return null." ); +} ); + +QUnit.test( "valueAsDate", function( assert ) { + assert.expect( 5 ); + + assert.strictEqual( this.element.datepicker( "valueAsDate" ), null, "Default" ); + + this.element.datepicker( "valueAsDate", testHelper.createDate( 2014, 0, 1 ) ); + assert.equal( this.element.val(), "1/1/14", "Input's value set" ); + assert.ok( + this.widget.find( "button[data-ui-calendar-timestamp]" ).eq( 0 ).hasClass( "ui-state-active" ), + "First day marked as selected" + ); + assert.dateEqual( this.element.datepicker( "valueAsDate" ), testHelper.createDate( 2014, 0, 1 ), "Getter" ); + + this.element.val( "a/b/c" ); + assert.equal( this.element.datepicker( "valueAsDate" ), null, "Invalid dates return null" ); +} ); + +QUnit.test( "isValid", function( assert ) { + assert.expect( 2 ); + + this.element.val( "1/1/14" ); + assert.ok( this.element.datepicker( "isValid" ) ); + + this.element.val( "1/1/abc" ); + assert.ok( !this.element.datepicker( "isValid" ) ); } ); } ); |