imported the whole jquery-ui package, refreshed with 1.10.2
[myslice.git] / third-party / jquery-ui-1.10.2 / tests / unit / dialog / dialog_methods.js
1 /*
2  * dialog_methods.js
3  */
4 (function($) {
5
6 module("dialog: methods", {
7         teardown: function() {
8                 $("body>.ui-dialog").remove();
9         }
10 });
11
12 test("init", function() {
13         expect(6);
14
15         $("<div></div>").appendTo("body").dialog().remove();
16         ok(true, ".dialog() called on element");
17
18         $([]).dialog().remove();
19         ok(true, ".dialog() called on empty collection");
20
21         $("<div></div>").dialog().remove();
22         ok(true, ".dialog() called on disconnected DOMElement - never connected");
23
24         $("<div></div>").appendTo("body").remove().dialog().remove();
25         ok(true, ".dialog() called on disconnected DOMElement - removed");
26
27         var element = $("<div></div>").dialog();
28         element.dialog("option", "foo");
29         element.remove();
30         ok(true, "arbitrary option getter after init");
31
32         $("<div></div>").dialog().dialog("option", "foo", "bar").remove();
33         ok(true, "arbitrary option setter after init");
34 });
35
36 test("destroy", function() {
37         expect( 17 );
38
39         var element, element2;
40
41         $( "#dialog1, #form-dialog" ).hide();
42         domEqual( "#dialog1", function() {
43                 var dialog = $( "#dialog1" ).dialog().dialog( "destroy" );
44                 equal( dialog.parent()[ 0 ], $( "#qunit-fixture" )[ 0 ] );
45                 equal( dialog.index(), 0 );
46         });
47         domEqual( "#form-dialog", function() {
48                 var dialog = $( "#form-dialog" ).dialog().dialog( "destroy" );
49                 equal( dialog.parent()[ 0 ], $( "#qunit-fixture" )[ 0 ] );
50                 equal( dialog.index(), 2 );
51         });
52
53         // Ensure dimensions are restored (#8119)
54         $( "#dialog1" ).show().css({
55                 width: "400px",
56                 minHeight: "100px",
57                 height: "200px"
58         });
59         domEqual( "#dialog1", function() {
60                 $( "#dialog1" ).dialog().dialog( "destroy" );
61         });
62
63         // Don't throw errors when destroying a never opened modal dialog (#9004)
64         $( "#dialog1" ).dialog({ autoOpen: false, modal: true }).dialog( "destroy" );
65         equal( $( ".ui-widget-overlay" ).length, 0, "overlay does not exist" );
66         equal( $.ui.dialog.overlayInstances, 0, "overlayInstances equals the number of open overlays");
67
68         element = $( "#dialog1" ).dialog({ modal: true }),
69         element2 = $( "#dialog2" ).dialog({ modal: true });
70         equal( $( ".ui-widget-overlay" ).length, 2, "overlays created when dialogs are open" );
71         equal( $.ui.dialog.overlayInstances, 2, "overlayInstances equals the number of open overlays" );
72         element.dialog( "close" );
73         equal( $( ".ui-widget-overlay" ).length, 1, "overlay remains after closing one dialog" );
74         equal( $.ui.dialog.overlayInstances, 1, "overlayInstances equals the number of open overlays" );
75         element.dialog( "destroy" );
76         equal( $( ".ui-widget-overlay" ).length, 1, "overlay remains after destroying one dialog" );
77         equal( $.ui.dialog.overlayInstances, 1, "overlayInstances equals the number of open overlays" );
78         element2.dialog( "destroy" );
79         equal( $( ".ui-widget-overlay" ).length, 0, "overlays removed when all dialogs are destoryed" );
80         equal( $.ui.dialog.overlayInstances, 0, "overlayInstances equals the number of open overlays" );
81 });
82
83 asyncTest("#9000: Dialog leaves broken event handler after close/destroy in certain cases", function() {
84         expect( 1 );
85         $( "#dialog1" ).dialog({ modal:true }).dialog( "close" ).dialog( "destroy" );
86         setTimeout(function() {
87                 $( "#favorite-animal" ).focus();
88                 ok( true, "close and destroy modal dialog before its really opened" );
89                 start();
90         }, 2 );
91 });
92
93 test("#4980: Destroy should place element back in original DOM position", function(){
94         expect( 2 );
95         var container = $("<div id='container'><div id='modal'>Content</div></div>"),
96                 modal = container.find("#modal");
97         modal.dialog();
98         ok(!$.contains(container[0], modal[0]), "dialog should move modal element to outside container element");
99         modal.dialog("destroy");
100         ok($.contains(container[0], modal[0]), "dialog(destroy) should place element back in original DOM position");
101 });
102
103 test( "enable/disable disabled", function() {
104         expect( 2 );
105         var element = $( "<div></div>" ).dialog();
106         element.dialog( "disable" );
107         equal(element.dialog( "option", "disabled" ), false, "disable method doesn't do anything" );
108         ok( !element.dialog( "widget" ).hasClass( "ui-dialog-disabled" ), "disable method doesn't add ui-dialog-disabled class" );
109 });
110
111 test("close", function() {
112         expect( 3 );
113
114         var element,
115                 expected = $("<div></div>").dialog(),
116                 actual = expected.dialog("close");
117         equal(actual, expected, "close is chainable");
118
119         element = $("<div></div>").dialog();
120         ok(element.dialog("widget").is(":visible") && !element.dialog("widget").is(":hidden"), "dialog visible before close method called");
121         element.dialog("close");
122         ok(element.dialog("widget").is(":hidden") && !element.dialog("widget").is(":visible"), "dialog hidden after close method called");
123 });
124
125 test("isOpen", function() {
126         expect(4);
127
128         var element = $("<div></div>").dialog();
129         equal(element.dialog("isOpen"), true, "dialog is open after init");
130         element.dialog("close");
131         equal(element.dialog("isOpen"), false, "dialog is closed");
132         element.remove();
133
134         element = $("<div></div>").dialog({autoOpen: false});
135         equal(element.dialog("isOpen"), false, "dialog is closed after init");
136         element.dialog("open");
137         equal(element.dialog("isOpen"), true, "dialog is open");
138         element.remove();
139 });
140
141 test("moveToTop", function() {
142         expect( 5 );
143         function order() {
144                 var actual = $( ".ui-dialog" ).map(function() {
145                         return +$( this ).find( ".ui-dialog-content" ).attr( "id" ).replace( /\D+/, "" );
146                 }).get().reverse();
147                 deepEqual( actual, $.makeArray( arguments ) );
148         }
149         var dialog1, dialog2,
150                 focusOn = "dialog1";
151         dialog1 = $( "#dialog1" ).dialog({
152                 focus: function() {
153                         equal( focusOn, "dialog1" );
154                 }
155         });
156         focusOn = "dialog2";
157         dialog2 = $( "#dialog2" ).dialog({
158                 focus: function() {
159                         equal( focusOn, "dialog2" );
160                 }
161         });
162         order( 2, 1 );
163         focusOn = "dialog1";
164         dialog1.dialog( "moveToTop" );
165         order( 1, 2 );
166 });
167
168 test("open", function() {
169         expect( 3 );
170         var element,
171                 expected = $("<div></div>").dialog(),
172                 actual = expected.dialog("open");
173         equal(actual, expected, "open is chainable");
174
175         element = $("<div></div>").dialog({ autoOpen: false });
176         ok(element.dialog("widget").is(":hidden") && !element.dialog("widget").is(":visible"), "dialog hidden before open method called");
177         element.dialog("open");
178         ok(element.dialog("widget").is(":visible") && !element.dialog("widget").is(":hidden"), "dialog visible after open method called");
179 });
180
181 test("#6137: dialog('open') causes form elements to reset on IE7", function() {
182         expect(2);
183
184         var d1 = $("<form><input type='radio' name='radio' id='a' value='a' checked='checked'></input>" +
185                                 "<input type='radio' name='radio' id='b' value='b'>b</input></form>").appendTo( "body" ).dialog({autoOpen: false});
186
187         d1.find("#b").prop( "checked", true );
188         equal(d1.find("input:checked").val(), "b", "checkbox b is checked");
189
190         d1.dialog("open");
191         equal(d1.find("input:checked").val(), "b", "checkbox b is checked");
192
193         d1.remove();
194 });
195
196 asyncTest( "#8958: dialog can be opened while opening", function() {
197         expect( 1 );
198
199         var element = $( "<div>" ).dialog({
200                 autoOpen: false,
201                 modal: true,
202                 open: function() {
203                         equal( $( ".ui-widget-overlay" ).length, 1 );
204                         start();
205                 }
206         });
207
208         $( "#favorite-animal" )
209                 // We focus the input to start the test. Once it receives focus, the
210                 // dialog will open. Opening the dialog, will cause an element inside
211                 // the dialog to gain focus, thus blurring the input.
212                 .bind( "focus", function() {
213                         element.dialog( "open" );
214                 })
215                 // When the input blurs, the dialog is in the process of opening. We
216                 // try to open the dialog again, to make sure that dialogs properly
217                 // handle a call to the open() method during the process of the dialog
218                 // being opened.
219                 .bind( "blur", function() {
220                         element.dialog( "open" );
221                 })
222                 .focus();
223 });
224
225 test("#5531: dialog width should be at least minWidth on creation", function () {
226         expect( 4 );
227         var element = $("<div></div>").dialog({
228                         width: 200,
229                         minWidth: 300
230                 });
231
232         equal(element.dialog("option", "width"), 300, "width is minWidth");
233         element.dialog("option", "width", 200);
234         equal(element.dialog("option", "width"), 300, "width unchanged when set to < minWidth");
235         element.dialog("option", "width", 320);
236         equal(element.dialog("option", "width"), 320, "width changed if set to > minWidth");
237         element.remove();
238
239         element = $("<div></div>").dialog({
240                         minWidth: 300
241                 });
242         ok(element.dialog("option", "width") >=  300, "width is at least 300");
243         element.remove();
244
245 });
246
247 })(jQuery);