upload tizen1.0 source
[framework/web/web-ui-fw.git] / libs / js / jquery-mobile-1.0.1pre / tests / unit / listview / listview_core.js
1 /*
2  * mobile listview unit tests
3  */
4
5 // TODO split out into seperate test files
6 (function($){
7   var home = $.mobile.path.parseUrl( location.href ).pathname;
8
9         $.mobile.defaultTransition = "none";
10
11         module( "Basic Linked list", {
12                 setup: function(){
13                         $.testHelper.openPage( "#basic-linked-test" );
14                 }
15         });
16
17         asyncTest( "The page should enhanced correctly", function(){
18                 setTimeout(function() {
19                         ok($('#basic-linked-test .ui-li').length, ".ui-li classes added to li elements");
20                         start();
21                 }, 800);
22         });
23
24         asyncTest( "Slides to the listview page when the li a is clicked", function() {
25                 $.testHelper.pageSequence([
26                         function(){
27                                 $.testHelper.openPage("#basic-linked-test");
28                         },
29
30                         function(){
31                                 $('#basic-linked-test li a').first().click();
32                         },
33
34                         function(){
35                                 ok($('#basic-link-results').hasClass('ui-page-active'));
36                                 start();
37                         }
38                 ]);
39         });
40
41         asyncTest( "Slides back to main page when back button is clicked", function() {
42                 $.testHelper.pageSequence([
43                         function(){
44                                 $.testHelper.openPage("#basic-link-results");
45                         },
46
47                         function(){
48                                 window.history.back();
49                         },
50
51                         function(){
52                                 ok($('#basic-linked-test').hasClass('ui-page-active'));
53                                 start();
54                         }
55                 ]);
56         });
57
58         asyncTest( "Presence of ui-li-has- classes", function(){
59                 $.testHelper.pageSequence( [
60                         function() {
61                                 $.testHelper.openPage( "#ui-li-has-test" );
62                         },
63
64                         function() {
65                                 var page = $( ".ui-page-active" ),
66                                         items = page.find( "li" );
67
68                                 ok(  items.eq( 0 ).hasClass( "ui-li-has-count"), "First LI should have ui-li-has-count class" );
69                                 ok(  items.eq( 0 ).hasClass( "ui-li-has-arrow"), "First LI should have ui-li-has-arrow class" );
70                                 ok( !items.eq( 1 ).hasClass( "ui-li-has-count"), "Second LI should NOT have ui-li-has-count class" );
71                                 ok(  items.eq( 1 ).hasClass( "ui-li-has-arrow"), "Second LI should have ui-li-has-arrow class" );
72                                 ok( !items.eq( 2 ).hasClass( "ui-li-has-count"), "Third LI should NOT have ui-li-has-count class" );
73                                 ok( !items.eq( 2 ).hasClass( "ui-li-has-arrow"), "Third LI should NOT have ui-li-has-arrow class" );
74                                 ok(  items.eq( 3 ).hasClass( "ui-li-has-count"), "Fourth LI should have ui-li-has-count class" );
75                                 ok( !items.eq( 3 ).hasClass( "ui-li-has-arrow"), "Fourth LI should NOT have ui-li-has-arrow class" );
76                                 ok( !items.eq( 4 ).hasClass( "ui-li-has-count"), "Fifth LI should NOT have ui-li-has-count class" );
77                                 ok( !items.eq( 4 ).hasClass( "ui-li-has-arrow"), "Fifth LI should NOT have ui-li-has-arrow class" );
78                                 start();
79                         }
80                 ]);
81         });
82
83         module('Nested List Test');
84
85         asyncTest( "Changes page to nested list test and enhances", function() {
86                 $.testHelper.pageSequence([
87                         function(){
88                                 $.testHelper.openPage("#nested-list-test");
89                         },
90
91                         function(){
92                                 ok($('#nested-list-test').hasClass('ui-page-active'), "makes nested list test page active");
93                                 ok($(':jqmData(url="nested-list-test&ui-page=0-0")').length == 1, "Adds first UL to the page");
94                                 ok($(':jqmData(url="nested-list-test&ui-page=0-1")').length == 1, "Adds second nested UL to the page");
95                                 start();
96                         }
97                 ]);
98         });
99
100         asyncTest( "change to nested page when the li a is clicked", function() {
101
102                 $.testHelper.pageSequence([
103                         function(){
104                                 $.testHelper.openPage("#nested-list-test");
105                         },
106
107                         function(){
108                                 $('.ui-page-active li:eq(1) a:eq(0)').click();
109                         },
110
111                         function(){
112                                 var $new_page = $(':jqmData(url="nested-list-test&ui-page=0-0")');
113
114                                 ok($new_page.hasClass('ui-page-active'), 'Makes the nested page the active page.');
115                                 ok($('.ui-listview', $new_page).find(":contains('Rhumba of rattlesnakes')").length == 1, "The current page should have the proper text in the list.");
116                                 ok($('.ui-listview', $new_page).find(":contains('Shoal of Bass')").length == 1, "The current page should have the proper text in the list.");
117                                 start();
118                         }
119                 ]);
120         });
121
122         asyncTest( "should go back to top level when the back button is clicked", function() {
123                 $.testHelper.pageSequence([
124                         function(){
125                                 $.testHelper.openPage("#nested-list-test&ui-page=0-0");
126                         },
127
128                         function(){
129                                 window.history.back();
130                         },
131
132                         function(){
133                                 ok($('#nested-list-test').hasClass('ui-page-active'), 'Transitions back to the parent nested page');
134                                 start();
135                         }
136                 ]);
137         });
138
139         test( "nested list title should use first text node, regardless of line breaks", function(){
140                 ok($('#nested-list-test .linebreaknode').text() === "More animals", 'Text should be "More animals"');
141         });
142
143         asyncTest( "Multiple nested lists on a page with same labels", function() {
144                 $.testHelper.pageSequence([
145                         function(){
146                                 // https://github.com/jquery/jquery-mobile/issues/1617
147                                 $.testHelper.openPage("#nested-lists-test");
148                         },
149
150                         function(){
151                                 // Click on the link of the third li element
152                                 $('.ui-page-active li:eq(2) a:eq(0)').click();
153                         },
154
155                         function(){
156                                 equal($('.ui-page-active .ui-content .ui-listview li').text(), "Item A-3-0Item A-3-1Item A-3-2", 'Text should be "Item A-3-0Item A-3-1Item A-3-2"');
157                                 start();
158                         }
159                 ]);
160         });
161
162         module('Ordered Lists');
163
164         asyncTest( "changes to the numbered list page and enhances it", function() {
165                 $.testHelper.pageSequence([
166                         function(){
167                                 $.testHelper.openPage("#numbered-list-test");
168                         },
169
170                         function(){
171                                 var $new_page = $('#numbered-list-test');
172                                 ok($new_page.hasClass('ui-page-active'), "Makes the new page active when the hash is changed.");
173                                 ok($('.ui-link-inherit', $new_page).first().text() == "Number 1", "The text of the first LI should be Number 1");
174                                 start();
175                         }
176                 ]);
177         });
178
179         asyncTest( "changes to number 1 page when the li a is clicked", function() {
180                 $.testHelper.pageSequence([
181                         function(){
182                                 $('#numbered-list-test li a').first().click();
183                         },
184
185                         function(){
186                                 ok($('#numbered-list-results').hasClass('ui-page-active'), "The new numbered page was transitioned correctly.");
187                                 start();
188                         }
189                 ]);
190         });
191
192         asyncTest( "takes us back to the numbered list when the back button is clicked", function() {
193                 $.testHelper.pageSequence([
194                         function(){
195                                 $.testHelper.openPage('#numbered-list-test');
196                         },
197
198                         function(){
199                                 $.testHelper.openPage('#numbered-list-results');
200                         },
201
202                         function(){
203                                 window.history.back();
204                         },
205
206                         function(){
207                                 ok($('#numbered-list-test').hasClass('ui-page-active'));
208                                 start();
209                         }
210                 ]);
211         });
212
213         module('Read only list');
214
215         asyncTest( "changes to the read only page when hash is changed", function() {
216                 $.testHelper.pageSequence([
217                         function(){
218                                 $.testHelper.openPage("#read-only-list-test");
219                         },
220
221                         function(){
222                                 var $new_page = $('#read-only-list-test');
223                                 ok($new_page.hasClass('ui-page-active'), "makes the read only page the active page");
224                                 ok($('li', $new_page).first().text() === "Read", "The first LI has the proper text.");
225                                 start();
226                         }
227                 ]);
228         });
229
230         module('Split view list');
231
232         asyncTest( "changes the page to the split view list and enhances it correctly.", function() {
233                 $.testHelper.pageSequence([
234                         function(){
235                                 $.testHelper.openPage("#split-list-test");
236                         },
237
238                         function(){
239                                 var $new_page = $('#split-list-test');
240                                 ok($('.ui-li-link-alt', $new_page).length == 3);
241                                 ok($('.ui-link-inherit', $new_page).length == 3);
242                                 start();
243                         }
244                 ]);
245         });
246
247         asyncTest( "change the page to the split view page 1 when the first link is clicked", function() {
248                 $.testHelper.pageSequence([
249                         function(){
250                                 $.testHelper.openPage("#split-list-test");
251                         },
252
253                         function(){
254                                 $('.ui-page-active .ui-li a:eq(0)').click();
255                         },
256
257                         function(){
258                                 ok($('#split-list-link1').hasClass('ui-page-active'));
259                                 start();
260                         }
261                 ]);
262         });
263
264         asyncTest( "Slide back to the parent list view when the back button is clicked", function() {
265                 $.testHelper.pageSequence([
266                         function(){
267                                 $.testHelper.openPage("#split-list-test");
268                         },
269
270                         function(){
271                                 $('.ui-page-active .ui-listview a:eq(0)').click();
272                         },
273
274                         function(){
275                                 history.back();
276                         },
277
278                         function(){
279                                 ok($('#split-list-test').hasClass('ui-page-active'));
280                                 start();
281                         }
282                 ]);
283         });
284
285         asyncTest( "Clicking on the icon (the second link) should take the user to other a href of this LI", function() {
286                 $.testHelper.pageSequence([
287                         function(){
288                                 $.testHelper.openPage("#split-list-test");
289                         },
290
291                         function(){
292                                 $('.ui-page-active .ui-li-link-alt:eq(0)').click();
293                         },
294
295                         function(){
296                                 ok($('#split-list-link2').hasClass('ui-page-active'));
297                                 start();
298                         }
299                 ]);
300         });
301
302         module( "List Dividers" );
303
304         asyncTest( "Makes the list divider page the active page and enhances it correctly.", function() {
305                 $.testHelper.pageSequence([
306                         function(){
307                                 $.testHelper.openPage("#list-divider-test");
308                         },
309
310                         function(){
311                                 var $new_page = $('#list-divider-test');
312                                 ok($new_page.find('.ui-li-divider').length == 2);
313                                 ok($new_page.hasClass('ui-page-active'));
314                                 start();
315                         }
316                 ]);
317         });
318
319         module( "Search Filter");
320
321         var searchFilterId = "#search-filter-test";
322
323
324         asyncTest( "Filter downs results when the user enters information", function() {
325                 var $searchPage = $(searchFilterId);
326                 $.testHelper.pageSequence([
327                         function() {
328                                 $.testHelper.openPage(searchFilterId);
329                         },
330
331                         function() {
332                                 $searchPage.find('input').val('at');
333                                 $searchPage.find('input').trigger('change');
334
335                                 same($searchPage.find('li.ui-screen-hidden').length, 2);
336                                 start();
337                         }
338                 ]);
339         });
340
341         asyncTest( "Redisplay results when user removes values", function() {
342                 var $searchPage = $(searchFilterId);
343                 $.testHelper.pageSequence([
344                         function() {
345                                 $.testHelper.openPage(searchFilterId);
346                         },
347
348                         function() {
349                                 $searchPage.find('input').val('a');
350                                 $searchPage.find('input').trigger('change');
351
352                                 same($searchPage.find("li[style^='display: none;']").length, 0);
353                                 start();
354                         }
355                 ]);
356         });
357
358     asyncTest( "Filter works fine with \\W- or regexp-special-characters", function() {
359         var $searchPage = $(searchFilterId);
360         $.testHelper.pageSequence([
361             function() {
362                 $.testHelper.openPage(searchFilterId);
363             },
364
365             function() {
366                 $searchPage.find('input').val('*');
367                 $searchPage.find('input').trigger('change');
368
369                 same($searchPage.find('li.ui-screen-hidden').length, 4);
370                 start();
371             }
372         ]);
373     });
374
375         test( "Refresh applies thumb styling", function(){
376                 var ul = $('.ui-page-active ul');
377
378                 ul.append("<li id='fiz'><img/></li>");
379                 ok(!ul.find("#fiz img").hasClass("ui-li-thumb"));
380                 ul.listview('refresh');
381                 ok(ul.find("#fiz img").hasClass("ui-li-thumb"));
382         });
383
384         asyncTest( "Filter downs results and dividers when the user enters information", function() {
385                 var     $searchPage = $("#search-filter-with-dividers-test");
386                 $.testHelper.pageSequence([
387                         function() {
388                                 $.testHelper.openPage("#search-filter-with-dividers-test");
389                         },
390
391                         // wait for the page to become active/enhanced
392                         function(){
393                                 $searchPage.find('input').val('at');
394                                 $searchPage.find('input').trigger('change');
395                                 setTimeout(function() {
396                                         //there should be four hidden list entries
397                                         same($searchPage.find('li.ui-screen-hidden').length, 4);
398
399                                         //there should be two list entries that are list dividers and hidden
400                                         same($searchPage.find('li.ui-screen-hidden:jqmData(role=list-divider)').length, 2);
401
402                                         //there should be two list entries that are not list dividers and hidden
403                                         same($searchPage.find('li.ui-screen-hidden:not(:jqmData(role=list-divider))').length, 2);
404                                         start();
405                                 }, 1000);
406                         }
407                 ]);
408         });
409
410         asyncTest( "Redisplay results when user removes values", function() {
411                 $.testHelper.pageSequence([
412                         function() {
413                                 $.testHelper.openPage("#search-filter-with-dividers-test");
414                         },
415
416                         function() {
417                                 $('.ui-page-active input').val('a');
418                                 $('.ui-page-active input').trigger('change');
419
420                                 setTimeout(function() {
421                                         same($('.ui-page-active input').val(), 'a');
422                                         same($('.ui-page-active li[style^="display: none;"]').length, 0);
423                                         start();
424                                 }, 1000);
425                         }
426                 ]);
427         });
428
429         asyncTest( "Dividers are hidden when preceding hidden rows and shown when preceding shown rows", function () {
430                 $.testHelper.pageSequence([
431                         function() {
432                                 $.testHelper.openPage("#search-filter-with-dividers-test");
433                         },
434
435                         function() {
436                                 var $page = $('.ui-page-active');
437
438                                 $page.find('input').val('at');
439                                 $page.find('input').trigger('change');
440
441                                 setTimeout(function() {
442                                         same($page.find('li:jqmData(role=list-divider):hidden').length, 2);
443                                         same($page.find('li:jqmData(role=list-divider):hidden + li:not(:jqmData(role=list-divider)):hidden').length, 2);
444                                         same($page.find('li:jqmData(role=list-divider):not(:hidden) + li:not(:jqmData(role=list-divider)):not([:hidden)').length, 2);
445                                         start();
446                                 }, 1000);
447                         }
448                 ]);
449         });
450
451         asyncTest( "Inset List View should refresh corner classes after filtering", 4 * 2, function () {
452                 var checkClasses = function() {
453                         var $page = $( ".ui-page-active" ),
454                                 $li = $page.find( "li:visible" );
455                         ok($li.first().hasClass( "ui-corner-top" ), $li.length+" li elements: First visible element should have class ui-corner-top");
456                         ok($li.last().hasClass( "ui-corner-bottom" ), $li.length+" li elements: Last visible element should have class ui-corner-bottom");
457                 };
458
459                 $.testHelper.pageSequence([
460                         function() {
461                                 $.testHelper.openPage("#search-filter-inset-test");
462                         },
463
464                         function() {
465                                 var $page = $('.ui-page-active');
466                                 $.testHelper.sequence([
467                                         function() {
468                                                 checkClasses();
469
470                                                 $page.find('input').val('man');
471                                                 $page.find('input').trigger('change');
472                                         },
473
474                                         function() {
475                                                 checkClasses();
476
477                                                 $page.find('input').val('at');
478                                                 $page.find('input').trigger('change');
479                                         },
480
481                                         function() {
482                                                 checkClasses();
483
484                                                 $page.find('input').val('catwoman');
485                                                 $page.find('input').trigger('change');
486                                         },
487
488                                         function() {
489                                                 checkClasses();
490                                                 start();
491                                         }
492                                 ], 50);
493                         }
494                 ]);
495         });
496
497         module( "Programmatically generated list items", {
498                 setup: function(){
499                         var item,
500                                 data = [
501                                         {
502                                                 id: 1,
503                                                 label: "Item 1"
504                                         },
505                                         {
506                                                 id: 2,
507                                                 label: "Item 2"
508                                         },
509                                         {
510                                                 id: 3,
511                                                 label: "Item 3"
512                                         },
513                                         {
514                                                 id: 4,
515                                                 label: "Item 4"
516                                         }
517                                 ];
518
519                         $( "#programmatically-generated-list-items" ).html("");
520
521                         for ( var i = 0, len = data.length; i < len; i++ ) {
522                                 item = $( '<li id="myItem' + data[i].id + '">' );
523                                 label = $( "<strong>" + data[i].label + "</strong>").appendTo( item );
524                                 $( "#programmatically-generated-list-items" ).append( item );
525                         }
526                 }
527         });
528
529         asyncTest( "Corner styling on programmatically created list items", function() {
530                 // https://github.com/jquery/jquery-mobile/issues/1470
531                 $.testHelper.pageSequence([
532                         function() {
533                                 $.testHelper.openPage( "#programmatically-generated-list" );
534                         },
535                         function() {
536                                 ok(!$( "#programmatically-generated-list-items li:first-child" ).hasClass( "ui-corner-bottom" ), "First list item should not have class ui-corner-bottom" );
537                                 start();
538                         }
539                 ]);
540         });
541
542         module("Programmatic list items manipulation");
543
544         asyncTest("Removing list items", 4, function() {
545                 $.testHelper.pageSequence([
546                         function() {
547                                 $.testHelper.openPage("#removing-items-from-list-test");
548                         },
549
550                         function() {
551                                 var ul = $('#removing-items-from-list-test ul');
552                                 ul.find("li").first().remove();
553                                 equal(ul.find("li").length, 3, "There should be only 3 list items left");
554
555                                 ul.listview('refresh');
556                                 ok(ul.find("li").first().hasClass("ui-corner-top"), "First list item should have class ui-corner-top");
557
558                                 ul.find("li").last().remove();
559                                 equal(ul.find("li").length, 2, "There should be only 2 list items left");
560
561                                 ul.listview('refresh');
562                                 ok(ul.find("li").last().hasClass("ui-corner-bottom"), "Last list item should have class ui-corner-bottom");
563                                 start();
564                         }
565                 ]);
566         });
567
568         module("Rounded corners");
569
570         asyncTest("Top and bottom corners rounded in inset list", 14, function() {
571                 $.testHelper.pageSequence([
572                         function() {
573                                 $.testHelper.openPage("#corner-rounded-test");
574                         },
575
576                         function() {
577                                 var ul = $('#corner-rounded-test ul');
578
579                                 for( var t = 0; t<3; t++){
580                                         ul.append("<li>Item " + t + "</li>");
581                                         ul.listview('refresh');
582                                         equals(ul.find(".ui-corner-top").length, 1, "There should be only one element with class ui-corner-top");
583                                         equals(ul.find("li:visible").first()[0], ul.find(".ui-corner-top")[0], "First list item should have class ui-corner-top in list with " + ul.find("li").length + " item(s)");
584                                         equals(ul.find(".ui-corner-bottom").length, 1, "There should be only one element with class ui-corner-bottom");
585                                         equals(ul.find("li:visible").last()[0], ul.find(".ui-corner-bottom")[0], "Last list item should have class ui-corner-bottom in list with " + ul.find("li").length + " item(s)");
586                                 }
587
588                                 ul.find( "li" ).first().hide();
589                                 ul.listview( "refresh" );
590                                 equals(ul.find("li:visible").first()[0], ul.find(".ui-corner-top")[0], "First visible list item should have class ui-corner-top");
591
592                                 ul.find( "li" ).last().hide();
593                                 ul.listview( "refresh" );
594                                 equals(ul.find("li:visible").last()[0], ul.find(".ui-corner-bottom")[0], "Last visible list item should have class ui-corner-bottom");
595
596                                 start();
597                         }
598                 ]);
599         });
600
601         test( "Listview will create when inside a container that receives a 'create' event", function(){
602                 ok( !$("#enhancetest").appendTo(".ui-page-active").find(".ui-listview").length, "did not have enhancements applied" );
603                 ok( $("#enhancetest").trigger("create").find(".ui-listview").length, "enhancements applied" );
604         });
605
606         module( "Cached Linked List" );
607
608         var findNestedPages = function(selector){
609                 return $( selector + " #topmost" ).listview( 'childPages' );
610         };
611
612         asyncTest( "nested pages are removed from the dom by default", function(){
613                 $.testHelper.pageSequence([
614                         function(){
615                                 //reset for relative url refs
616                                 $.testHelper.openPage( "#" + home );
617                         },
618
619                         function(){
620                                 $.testHelper.openPage( "#cache-tests/uncached-nested.html" );
621                         },
622
623                         function(){
624                                 ok( findNestedPages( "#uncached-nested-list" ).length > 0, "verify that there are nested pages" );
625                                 $.testHelper.openPage( "#" + home );
626                         },
627
628                         function() {
629                                 $.testHelper.openPage( "#cache-tests/clear.html" );
630                         },
631
632                         function(){
633                                 same( findNestedPages( "#uncached-nested-list" ).length, 0 );
634                                 start();
635                         }
636                 ]);
637         });
638
639         asyncTest( "nested pages preserved when parent page is cached", function(){
640
641                 $.testHelper.pageSequence([
642                         function(){
643                                 //reset for relative url refs
644                                 $.testHelper.openPage( "#" + home );
645                         },
646
647                         function(){
648                                 $.testHelper.openPage( "#cache-tests/cached-nested.html" );
649                         },
650
651                         function(){
652                                 ok( findNestedPages( "#cached-nested-list" ).length > 0, "verify that there are nested pages" );
653                                 $.testHelper.openPage( "#" + home );
654                         },
655
656                         function() {
657                                 $.testHelper.openPage( "#cache-tests/clear.html" );
658                         },
659
660                         function(){
661                                 ok( findNestedPages( "#cached-nested-list" ).length > 0, "nested pages remain" );
662                                 start();
663                         }
664                 ]);
665         });
666
667         asyncTest( "parent page is not removed when visiting a sub page", function(){
668                 $.testHelper.pageSequence([
669                         function(){
670                                 //reset for relative url refs
671                                 $.testHelper.openPage( "#" + home );
672                         },
673
674                         function(){
675                                 $.testHelper.openPage( "#cache-tests/cached-nested.html" );
676                         },
677
678                         function(){
679                                 same( $("#cached-nested-list").length, 1 );
680                                 $.testHelper.openPage( "#" + home );
681                         },
682
683                         function() {
684                                 $.testHelper.openPage( "#cache-tests/clear.html" );
685                         },
686
687                         function(){
688                                 same( $("#cached-nested-list").length, 1 );
689                                 start();
690                         }
691                 ]);
692         });
693
694         asyncTest( "filterCallback can be altered after widget creation", function(){
695                 var listPage = $( "#search-filter-test" );
696                 expect( listPage.find("li").length );
697
698                 $.testHelper.pageSequence( [
699                         function(){
700                                 //reset for relative url refs
701                                 $.testHelper.openPage( "#" + home );
702                         },
703
704                         function() {
705                                 $.testHelper.openPage( "#search-filter-test" );
706                         },
707
708                         function() {
709                                 // set the listview instance callback
710                                 listPage.find( "ul" ).listview( "option", "filterCallback", function() {
711                                         ok(true, "custom callback invoked");
712                                 });
713
714                                 // trigger a change in the search filter
715                                 listPage.find( "input" ).val( "foo" ).trigger( "change" );
716
717                                 //NOTE beware a poossible issue with timing here
718                                 start();
719                         }
720                 ]);
721         });
722
723         asyncTest( "nested pages hash key is always in the hash (replaceState)", function(){
724                 $.testHelper.pageSequence([
725                         function(){
726                                 //reset for relative url refs
727                                 $.testHelper.openPage( "#" + home );
728                         },
729
730                         function(){
731                                 // https://github.com/jquery/jquery-mobile/issues/1617
732                                 $.testHelper.openPage("#nested-lists-test");
733                         },
734
735                         function(){
736                                 // Click on the link of the third li element
737                                 $('.ui-page-active li:eq(2) a:eq(0)').click();
738                         },
739
740                         function(){
741                                 ok( location.hash.search($.mobile.subPageUrlKey) >= 0 );
742                                 start();
743                         }
744                 ]);
745         });
746
747         asyncTest( "embedded listview page with nested pages is not removed from the dom", function() {
748                 $.testHelper.pageSequence([
749                         function() {
750                                 // open the nested list page
751                                 same( $("div#nested-list-test").length, 1 );
752                                 $( "a#nested-list-test-anchor" ).click();
753                         },
754
755                         function() {
756                                 // go back to the origin page
757                                 window.history.back();
758                         },
759
760                         function() {
761                                 // make sure the page is still in place
762                                 same( $("div#nested-list-test").length, 1 );
763                                 start();
764                         }
765                 ]);
766         });
767
768
769         asyncTest( "list inherits theme from parent", function() {
770                 $.testHelper.pageSequence([
771                         function() {
772                                 $.testHelper.openPage("#list-theme-inherit");
773                         },
774
775                         function() {
776                                 var theme = $.mobile.activePage.jqmData('theme');
777                                 ok( $.mobile.activePage.find("ul > li").hasClass("ui-body-b"), "theme matches the parent");
778                                 window.history.back();
779                         },
780
781                         start
782                 ]);
783         });
784 })(jQuery);