diff options
author | Alexander Schmitz <arschmitz@gmail.com> | 2014-08-22 23:39:35 -0400 |
---|---|---|
committer | Alexander Schmitz <arschmitz@gmail.com> | 2015-10-07 10:57:59 -0400 |
commit | 40a9d1dfdb6a341904ae7bcd4600b0ef201d14df (patch) | |
tree | b4eaf29211bd94d9f947e8f0613f7798efe98126 /tests/unit/controlgroup | |
parent | 6e2bbcaa5e19bb933d8024ff5d6fcff34f91e034 (diff) | |
download | jquery-ui-40a9d1dfdb6a341904ae7bcd4600b0ef201d14df.tar.gz jquery-ui-40a9d1dfdb6a341904ae7bcd4600b0ef201d14df.zip |
Controlgroup: Inital commit of new widget
This widget replaces the buttonset widget
Diffstat (limited to 'tests/unit/controlgroup')
-rw-r--r-- | tests/unit/controlgroup/common.js | 26 | ||||
-rw-r--r-- | tests/unit/controlgroup/controlgroup.html | 39 | ||||
-rw-r--r-- | tests/unit/controlgroup/controlgroup_core.js | 77 | ||||
-rw-r--r-- | tests/unit/controlgroup/core.js | 69 | ||||
-rw-r--r-- | tests/unit/controlgroup/methods.js | 150 | ||||
-rw-r--r-- | tests/unit/controlgroup/options.js | 108 |
6 files changed, 469 insertions, 0 deletions
diff --git a/tests/unit/controlgroup/common.js b/tests/unit/controlgroup/common.js new file mode 100644 index 000000000..421e92e71 --- /dev/null +++ b/tests/unit/controlgroup/common.js @@ -0,0 +1,26 @@ +define( [ + "lib/common", + "ui/controlgroup", + "ui/checkboxradio", + "ui/selectmenu", + "ui/button" +], function( common ) { + +common.testWidget( "controlgroup", { + defaults: { + disabled: null, + items: { + "button": "input[type=button], input[type=submit], input[type=reset], button, a", + "checkboxradio": "input[type='checkbox'], input[type='radio']", + "selectmenu": "select" + }, + direction: "horizontal", + excludeInvisible: true, + classes: {}, + + // Callbacks + create: null + } +}); + +} ); diff --git a/tests/unit/controlgroup/controlgroup.html b/tests/unit/controlgroup/controlgroup.html new file mode 100644 index 000000000..df77ed64d --- /dev/null +++ b/tests/unit/controlgroup/controlgroup.html @@ -0,0 +1,39 @@ +<!doctype html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>jQuery UI Controlgroup Test Suite</title> + + <script src="../../../external/requirejs/require.js"></script> + <script src="../../lib/css.js" data-modules="core button checboxradio selectmenu controlgroup"></script> + <script src="../../lib/bootstrap.js" data-modules="common core methods options"></script> +</head> +<body> + +<div id="qunit"></div> +<div id="qunit-fixture"> + <div class="controlgroup"> + <button style="display:none">Button with icon only</button> + <select> + <option>Fast</option> + <option>Medium</option> + <option>Slow</option> + </select> + <label for="checkbox">Checkbox</label> + <input type="checkbox" value="checkbox" id="checkbox" /> + <select> + <option>Fast</option> + <option>Medium</option> + <option>Slow</option> + </select> + <div class="test"></div> + <button>Button with icon on the bottom</button> + <select> + <option>Fast</option> + <option>Medium</option> + <option>Slow</option> + </select> + </div> +</div> +</body> +</html> diff --git a/tests/unit/controlgroup/controlgroup_core.js b/tests/unit/controlgroup/controlgroup_core.js index e69de29bb..2177c767b 100644 --- a/tests/unit/controlgroup/controlgroup_core.js +++ b/tests/unit/controlgroup/controlgroup_core.js @@ -0,0 +1,77 @@ +module( "Controlgroup: Core" ); + +function hasCornerClass( element ) { + return !!element.attr( "class" ).match( /ui-corner/g ); +} + +test( "selectmenu: open/close corners", function( assert ) { + expect( 1 ); + var element = $( ".controlgroup" ).controlgroup(), + selects = element.find( "select" ), + selectButton = selects.eq( 0 ).selectmenu( "widget" ); + + expect( 12 ); + + selects.eq( 0 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-tl", + "Horizontal: First selectmenu gets ui-corner-tl when opened" ); + + selects.eq( 0 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-left", + "Horizontal: First selectmenu gets ui-corner-left when closed" ); + + selectButton = selects.eq( 1 ).selectmenu( "widget" ); + selects.eq( 1 ).selectmenu( "open" ); + strictEqual( hasCornerClass( selectButton ), false, + "Horizontal: Middle selectmenu does not get corner class when opened" ); + + selects.eq( 1 ).selectmenu( "close" ); + strictEqual( hasCornerClass( selectButton ), false, + "Horizontal: Middle selectmenu does not get corner class when closed" ); + + selectButton = selects.eq( 2 ).selectmenu( "widget" ); + selects.eq( 2 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-tr", + "Horizontal: Last selectmenu gets ui-corner-tr when opened" ); + + selects.eq( 2 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-right", + "Horizontal: Last selectmenu gets ui-corner-right when closed" ); + + element.controlgroup( "option", "direction", "vertical" ); + selectButton = selects.eq( 0 ).selectmenu( "widget" ); + selects.eq( 0 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-top", + "vertical: First selectmenu gets ui-corner-top when opened" ); + + selects.eq( 0 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-top", + "vertical: First selectmenu gets ui-corner-top when closed" ); + + selectButton = selects.eq( 1 ).selectmenu( "widget" ); + selects.eq( 1 ).selectmenu( "open" ); + strictEqual( hasCornerClass( selectButton ), false, + "vertical: Middle selectmenu does not get corner class when opened" ); + + selects.eq( 1 ).selectmenu( "close" ); + strictEqual( hasCornerClass( selectButton ), false, + "vertical: Middle selectmenu does not get corner class when closed" ); + + selectButton = selects.eq( 2 ).selectmenu( "widget" ); + selects.eq( 2 ).selectmenu( "open" ); + strictEqual( hasCornerClass( selectButton ), false, + "vertical: Last selectmenu does not get corner class when opened" ); + + selects.eq( 2 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-bottom", + "vertical: Last selectmenu gets ui-corner-bottom when closed" ); +}); +test( "invisibles excluded from corner classes", function( assert ) { + expect( 2 ); + var element = $( ".controlgroup" ).controlgroup(), + buttons = element.children( ".ui-button" ); + strictEqual( hasCornerClass( buttons.eq( 0 ) ), false, + "ExcludeInvisible: true: Hidden first element does not get a corner class" ); + assert.hasClasses( buttons.eq( 1 ), "ui-corner-left", + "ExcludeInvisible: true: First button is hidden second button get corner class" ); +});
\ No newline at end of file diff --git a/tests/unit/controlgroup/core.js b/tests/unit/controlgroup/core.js new file mode 100644 index 000000000..f84136b2f --- /dev/null +++ b/tests/unit/controlgroup/core.js @@ -0,0 +1,69 @@ +define( [ + "jquery", + "ui/controlgroup", + "ui/checkboxradio", + "ui/selectmenu", + "ui/button" +], function( $ ) { + +module( "Controlgroup: Core" ); + +test( "selectmenu: open/close corners", function( assert ) { + expect( 1 ); + var element = $( ".controlgroup" ).controlgroup(), + selects = element.find( "select" ), + selectButton = selects.eq( 0 ).selectmenu( "widget" ); + + expect( 12 ); + + selects.eq( 0 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-tl", + "Horizontal: First selectmenu gets ui-corner-tl when opened" ); + + selects.eq( 0 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-left", + "Horizontal: First selectmenu gets ui-corner-left when closed" ); + + selectButton = selects.eq( 1 ).selectmenu( "widget" ); + selects.eq( 1 ).selectmenu( "open" ); + assert.lacksClassStart( selectButton, "ui-corner" ); + + selects.eq( 1 ).selectmenu( "close" ); + assert.lacksClassStart( selectButton, "ui-corner" ); + + selectButton = selects.eq( 2 ).selectmenu( "widget" ); + selects.eq( 2 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-tr", + "Horizontal: Last selectmenu gets ui-corner-tr when opened" ); + + selects.eq( 2 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-right", + "Horizontal: Last selectmenu gets ui-corner-right when closed" ); + + element.controlgroup( "option", "direction", "vertical" ); + selectButton = selects.eq( 0 ).selectmenu( "widget" ); + selects.eq( 0 ).selectmenu( "open" ); + assert.hasClasses( selectButton, "ui-corner-top", + "vertical: First selectmenu gets ui-corner-top when opened" ); + + selects.eq( 0 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-top", + "vertical: First selectmenu gets ui-corner-top when closed" ); + + selectButton = selects.eq( 1 ).selectmenu( "widget" ); + selects.eq( 1 ).selectmenu( "open" ); + assert.lacksClassStart( selectButton, "ui-corner" ); + + selects.eq( 1 ).selectmenu( "close" ); + assert.lacksClassStart( selectButton, "ui-corner" ); + + selectButton = selects.eq( 2 ).selectmenu( "widget" ); + selects.eq( 2 ).selectmenu( "open" ); + assert.lacksClassStart( selectButton, "ui-corner" ); + + selects.eq( 2 ).selectmenu( "close" ); + assert.hasClasses( selectButton, "ui-corner-bottom", + "vertical: Last selectmenu gets ui-corner-bottom when closed" ); +}); + +} ); diff --git a/tests/unit/controlgroup/methods.js b/tests/unit/controlgroup/methods.js new file mode 100644 index 000000000..c691e4c46 --- /dev/null +++ b/tests/unit/controlgroup/methods.js @@ -0,0 +1,150 @@ +define( [ + "jquery", + "ui/controlgroup", + "ui/checkboxradio", + "ui/selectmenu", + "ui/button" +], function( $ ) { + +module( "Controlgroup: methods" ); + +test( "destroy", function( assert ) { + expect( 1 ); + assert.domEqual( ".controlgroup", function() { + $( ".controlgroup" ).controlgroup().controlgroup( "destroy" ); + }); +}); +test( "disable", function( assert ) { + expect( 2 ); + var element = $( ".controlgroup" ).controlgroup().controlgroup( "disable" ); + assert.lacksClasses( element, "ui-state-disabled", + "The widget does not get the disabled class, because we disable each child widget" ); + strictEqual( element.find( ".ui-state-disabled" ).length, 6, + "Child widgets are disabled" ); +}); + +test( "enable", function( assert ) { + expect( 2 ); + var element = $( ".controlgroup" ).controlgroup().controlgroup( "enable" ); + assert.lacksClasses( element, "ui-state-disabled", + "ui-state-disabled is not present on widget after enabling" ); + strictEqual( element.find( "ui-state-disabled" ).length, 0, + "Child widgets are disabled" ); +}); + +var tests = { + "checkboxradio": "<input type='checkbox'>", + "selectmenu": "<select><option>foo</option></select>", + "button": "<button>" + }, + orientations = { + "horizontal": [ + "ui-corner-left", + false, + false, + "ui-corner-right" + ], + "vertical": [ + "ui-corner-top", + false, + false, + "ui-corner-bottom" + ] + }; + +// Iterate through supported element markup +$.each( tests, function( widget, html ) { + + // Check in both horizontal and vertical orientations + $.each( orientations, function( name, classes ) { + + test( "refresh: " + widget + ": " + name, function( assert ) { + expect( 41 ); + + var i, control, currentClasses, + controls = [], + element = $( "<div>" ).controlgroup({ + direction: name + }).appendTo( "body" ); + + // checks the elements with in the controlgroup against the expected class list + function checkCornerClasses( classList ) { + for ( var j = 0; j < 4; j++ ) { + if ( classList[ j ] ) { + assert.hasClasses( controls[ j ][ widget ]( "widget" ), classList[ j ] ); + } else { + assert.lacksClassStart( controls[ j ][ widget ]( "widget" ), "ui-corner" ); + } + } + } + + function showElements( index, value ) { + $( value )[ widget ]( "widget" ).show(); + } + + // Hide each element and check the corner classes + function iterateHidden( excludeInvisible ) { + for ( i = 0; i < 4; i++ ) { + + $( controls ).each( showElements ); + + controls[ i ][ widget ]( "widget" ).hide(); + + currentClasses = classes.slice( 0 ); + if ( excludeInvisible ) { + if ( i === 0 ) { + currentClasses[ i + 1 ] = classes[ i ]; + currentClasses[ i ] = false; + } else if ( i === 3 ) { + currentClasses[ i - 1 ] = classes[ i ]; + currentClasses[ i ] = false; + } + } + element.controlgroup( "refresh" ); + checkCornerClasses( currentClasses ); + } + } + + // Add a label for each element and then append the element to the control group + for ( i = 0; i < 4; i++ ) { + control = $( html ).attr( "id", "id" + i ) + .add( $( "<label>" ).clone().attr( "for", "id" + i ) ); + + controls.push( control ); + element.append( control ); + } + + // Refresh the controlgroup now that its populated + element.controlgroup( "refresh" ); + for ( i = 0; i < 4; i++ ) { + strictEqual( controls[ i ].is( ":ui-" + widget ), true, + name + ": " + widget + " " + i + ": is a " + widget + " widget" ); + } + + // Check that we have the right classes + checkCornerClasses( classes ); + + // hide each element and then check its classes + iterateHidden( true ); + + // Set the exclude option to false so we no longer care about hidden + element.controlgroup( "option", "excludeInvisible", false ); + + // Iterate hiding the elements again and check their corner classes + iterateHidden(); + + // Disable the first control + controls[ 0 ].prop( "disabled", true ); + + element.controlgroup( "refresh" ); + + assert.hasClasses( controls[ 0 ][ widget ]( "widget" ), "ui-state-disabled" ); + + // remove the controlgroup before we start the next set + element.remove(); + + }); + }); +}); + +} ); diff --git a/tests/unit/controlgroup/options.js b/tests/unit/controlgroup/options.js new file mode 100644 index 000000000..82375381a --- /dev/null +++ b/tests/unit/controlgroup/options.js @@ -0,0 +1,108 @@ +define( [ + "jquery", + "ui/controlgroup", + "ui/checkboxradio", + "ui/selectmenu", + "ui/button" +], function( $ ) { + +module( "Controlgroup: options" ); + +test( "disabled", function( assert ) { + expect( 4 ); + var element = $( ".controlgroup" ).controlgroup().controlgroup( "option", "disabled", true ); + assert.lacksClasses( element, "ui-state-disabled" ); + equal( element.find( ".ui-state-disabled" ).length, 6, "Child widgets are disabled" ); + + element.controlgroup( "option", "disabled", false ); + assert.lacksClasses( element, "ui-state-disabled" ); + strictEqual( element.find( ".ui-state-disabled" ).length, 0, "Child widgets are not disabled" ); + +}); + +test( "items - null", function() { + expect( 2 ); + var element = $( ".controlgroup" ).controlgroup({ + items: { + "button": null, + "selectmenu": null, + "checkboxradio": null + } + }); + + strictEqual( element.children( ".ui-button" ).length, 0, + "Child widgets are not called when selector is null" ); + + element.controlgroup( "option", "items", { + "button": "button" + }); + strictEqual( element.children( ".ui-button" ).length, 2, + "Correct child widgets are called when selector is updated" ); +}); + +test( "items: custom selector", function() { + expect( 1 ); + var element = $( ".controlgroup" ).controlgroup({ + items: { + "button": ".button" + } + }); + strictEqual( element.children( ".ui-button" ).length, 4, + "Correct child widgets are called when custom selector used" ); +}); + +$.widget( "ui.test", { + _create: function (){ + this.element.addClass( "ui-test ui-button" ); + }, + + // Controlgroup requires a refresh method to exist + refresh: $.noop +}); +test( "items: custom widget", function() { + expect( 2 ); + var element = $( ".controlgroup" ).controlgroup({ + items: { + "test": ".test" + } + }); + + strictEqual( element.children( ".ui-button" ).length, 7, + "Correct child widgets are called when custom selector used" ); + strictEqual( element.children( ".ui-test" ).length, 1, + "Custom widget called" ); +}); + +test( "excludeInvisible", function( assert ) { + expect( 4 ); + var element = $( ".controlgroup" ).controlgroup({ + excludeInvisible: false + }), + buttons = element.children( ".ui-button" ); + + assert.lacksClassStart( buttons.eq( 1 ), "ui-corner" ); + assert.hasClasses( buttons.eq( 0 ), "ui-corner-left", + "ExcludeInvisible: false: First button hidden second button doesn't get a corner class" ); + + element.controlgroup( "option", "excludeInvisible", true ); + assert.lacksClassStart( buttons.eq( 0 ), "ui-corner" ); + assert.hasClasses( buttons.eq( 1 ), "ui-corner-left", + "ExcludeInvisible: true: First button is hidden second button get corner class" ); +}); + +test( "direction", function( assert ) { + expect( 6 ); + var element = $( ".controlgroup" ).controlgroup(), + buttons = element.children( ".ui-button" ).filter( ":visible" ); + + assert.hasClasses( element, "ui-controlgroup-horizontal" ); + assert.hasClasses( buttons.first(), "ui-corner-left" ); + assert.hasClasses( buttons.last(), "ui-corner-right" ); + + element.controlgroup( "option", "direction", "vertical" ); + assert.hasClasses( element, "ui-controlgroup-vertical" ); + assert.hasClasses( buttons.first(), "ui-corner-top" ); + assert.hasClasses( buttons.last(), "ui-corner-bottom" ); +}); + +} ); |