define( [ "jquery", "lib/helper", "ui/widgets/tabs" ], function( $, helper ) { return $.extend( helper, { disabled: function( tabs, state ) { var expected, actual, internalState = tabs.tabs( "option", "disabled" ); if ( internalState === false ) { internalState = []; } if ( internalState === true ) { internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) { return index; } ); } expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) { if ( typeof state === "boolean" ) { return state ? 1 : 0; } else { return $.inArray( index, state ) !== -1 ? 1 : 0; } } ); actual = tabs.find( ".ui-tabs-nav li" ).map( function( index ) { var tab = $( this ), tabIsDisabled = tab.hasClass( "ui-state-disabled" ); if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) { return 1; } if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) { return 0; } // mixed state - invalid return -1; } ).get(); deepEqual( tabs.tabs( "option", "disabled" ), state ); deepEqual( actual, expected ); }, equalHeight: function( tabs, height ) { tabs.find( ".ui-tabs-panel" ).each( function() { // Handle overly-precise values var actualHeight = parseFloat( $( this ).outerHeight().toFixed( 1 ) ); equal( actualHeight, height ); } ); }, state: function( tabs ) { var expected = $.makeArray( arguments ).slice( 1 ), actual = tabs.find( ".ui-tabs-nav li" ).map( function() { var tab = $( this ), panel = $( $.ui.tabs.prototype._sanitizeSelector( "#" + tab.attr( "aria-controls" ) ) ), tabIsActive = tab.hasClass( "ui-state-active" ), panelIsActive = panel.css( "display" ) !== "none"; if ( tabIsActive && panelIsActive ) { return 1; } if ( !tabIsActive && !panelIsActive ) { return 0; } return -1; // mixed state - invalid } ).get(); deepEqual( actual, expected ); } } ); } );