Skip to content

Commit 9b18cef

Browse files
author
Gabriel Schulhof
committed
[popup unit tests] Sequence for page -> popup -> dialog -> popup (Re: jquery-archive#4806)
1 parent 922644c commit 9b18cef

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

tests/unit/popup/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
$.testHelper.asyncLoad([
1919
[
2020
"widgets/popup",
21+
"widgets/dialog"
2122
],
2223
[ "jquery.mobile.init" ],
2324
[
@@ -49,6 +50,9 @@ <h2 id="qunit-userAgent"></h2>
4950
<div data-nstest-role="popup" id="tolerance-test">
5051
<p>Tolerance test popup</p>
5152
</div>
53+
<div data-nstest-role="popup" id="popup-sequence-test">
54+
<a id="popup-sequence-test-open-dialog" href="popup-sequence-test-dialog.html">Dialog</a>
55+
</div>
5256
</div>
5357
</div>
5458
</body>

tests/unit/popup/popup_core.js

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,9 +395,77 @@
395395
ok( identical, "Going back returns $.mobile.urlHistory to its initial value" );
396396
ok( $.mobile.urlHistory.activeIndex === $.mobile.urlHistory.stack.length - 3, "Going back leaves exactly two entries ahead in $.mobile.urlHistory" );
397397

398-
setTimeout( function() { start(); }, 300 );
398+
setTimeout( function() { start(); }, 500 );
399+
},
400+
]);
401+
});
402+
403+
asyncTest( "Sequence page -> popup -> dialog -> popup works", function() {
404+
var originallyActivePage = $.mobile.activePage[ 0 ];
405+
406+
expect( 13 );
407+
$.testHelper.detailedEventCascade([
408+
function() {
409+
$( "#popup-sequence-test" ).popup( "open" );
410+
},
411+
412+
{
413+
opened: { src: $( "#popup-sequence-test" ), event: "popupafteropen.sequenceTestStep1" },
414+
hashchange: { src: $( window ), event: "hashchange.sequenceTestStep1" }
415+
},
416+
417+
function( result ) {
418+
ok( !result.opened.timedOut, "Popup has emitted 'popupafteropen'" );
419+
ok( !result.hashchange.timedOut, "A 'hashchange' event has occurred" );
420+
$( "#popup-sequence-test-open-dialog" ).click();
421+
},
422+
423+
{
424+
closed: { src: $( "#popup-sequence-test" ), event: "popupafterclose.sequenceTestStep2" },
425+
pagechange: { src: $.mobile.pageContainer, event: "pagechange.sequenceTestStep2" }
426+
},
427+
428+
function( result ) {
429+
ok( !result.closed.timedOut, "Popup has emitted 'popupafterclose'" );
430+
ok( !result.pagechange.timedOut, "A 'pagechange' event has occurred" );
431+
ok( $.mobile.activePage[ 0 ] === $( "#popup-sequence-test-dialog" )[ 0 ], "The dialog is the active page" );
432+
$( "a[href='#popup-sequence-test-popup-inside-dialog']" ).click();
399433
},
400434

435+
{
436+
opened: { src: function() { return $( "#popup-sequence-test-popup-inside-dialog" ); }, event: "popupafteropen.sequenceTestStep3" },
437+
hashchange: { src: $( window ), event: "hashchange.sequenceTestStep3" }
438+
},
439+
440+
function( result ) {
441+
ok( !result.opened.timedOut, "Popup inside dialog has emitted 'popupafteropen'" );
442+
ok( !result.hashchange.timedOut, "Popup inside dialog has caused a 'hashchange'" );
443+
window.history.back();
444+
},
445+
446+
{
447+
close: { src: function() { return $( "#popup-sequence-test-popup-inside-dialog" ); }, event: "popupafterclose.sequenceTestStep4" },
448+
hashchange: { src: $( window ), event: "hashchange.sequenceTestStep4" }
449+
},
450+
451+
function( result ) {
452+
ok( !result.close.timedOut, "Popup inside dialog has emitted 'popupafterclose'" );
453+
ok( !result.hashchange.timedOut, "The closing of the inside popup has resulted in a 'hashchange'" );
454+
ok( $.mobile.activePage[ 0 ] === $( "#popup-sequence-test-dialog" )[ 0 ], "The dialog is once more the active page" );
455+
window.history.back();
456+
},
457+
458+
{
459+
pagechange: { src: $.mobile.pageContainer, event: "pagechange.sequenceTestStep5" },
460+
hashchange: { src: $( window ), event: "hashchange.sequenceTestStep5" }
461+
},
462+
463+
function( result ) {
464+
ok( !result.pagechange.timedOut, "Going back from the dialog has resulted in a 'pagechange'" );
465+
ok( !result.hashchange.timedOut, "Going back from the dialog has resulted in a 'hashchange'" );
466+
ok( originallyActivePage === $.mobile.activePage[ 0 ], "After going back from the dialog, the originally active page is active once more" );
467+
setTimeout( function() { start(); }, 300 );
468+
}
401469
]);
402470
});
403471

0 commit comments

Comments
 (0)