// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // // /// /// /// module WinJSTests { "use strict"; var pageSelectedEvent = "pagecompleted"; // Create NavigationTests object export class NavigationTests { // // Function: SetUp // setUp() { LiveUnit.LoggingCore.logComment("In setup"); Helper.getIEInfo(); // We want to recreate the flipper element between each test so we start fresh. FlipperUtils.addFlipperDom(); } // // Function: tearDown // tearDown() { LiveUnit.LoggingCore.logComment("In tearDown"); // We want to tear town the flipper element between each test so we start fresh. FlipperUtils.removeFlipperDom(); } // // Test: testFlipperNext // testFlipperNext = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var currentPage = flipper.currentPage; LiveUnit.LoggingCore.logComment("Current Page Before Next: " + currentPage); LiveUnit.Assert.isTrue(currentPage === 0, "Flipper didn't start at Index 0"); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); if (!FlipperUtils.ensureNext(flipper, signalTestCaseCompleted)) { LiveUnit.Assert.fail("Unable to flip to next."); } }); flipper.addEventListener(pageSelectedEvent, verify); } // // Test: testFlipperPrevious // testFlipperPrevious = function (signalTestCaseCompleted) { var startPage = 5; var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID(), { currentPage: startPage }); var currentPage = flipper.currentPage; LiveUnit.Assert.areEqual(currentPage, startPage, "Failed to instantiate flipper with " + " a start page of " + startPage); LiveUnit.LoggingCore.logComment("Current Page Before Previous: " + currentPage); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); if (!FlipperUtils.ensurePrevious(flipper, signalTestCaseCompleted)) { LiveUnit.Assert.fail("Unable to flip to previous."); } }); flipper.addEventListener(pageSelectedEvent, verify); } // // Test: testFlipperCurrentPage via setting currentPage // testFlipperCurrentPage = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var cachedPage = 2; var currentPage = flipper.currentPage; LiveUnit.LoggingCore.logComment("Attempting to flip to page in cache (" + cachedPage + ")..."); LiveUnit.LoggingCore.logComment("Current page before flip: " + currentPage); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); FlipperUtils.ensureCurrentPage(flipper, cachedPage, LiveUnit.GetWrappedCallback(TestCurrentPageInitial)); }); flipper.addEventListener(pageSelectedEvent, verify); function TestCurrentPageInitial() { currentPage = flipper.currentPage; LiveUnit.LoggingCore.logComment("Current page after flip: " + currentPage); LiveUnit.Assert.areEqual(cachedPage, flipper.currentPage, "Page after flip should be: " + cachedPage); LiveUnit.LoggingCore.logComment("Attempt to flip to adjacent page..."); FlipperUtils.ensureCurrentPage(flipper, cachedPage + 1, LiveUnit.GetWrappedCallback(TestCurrentPageAdjacent)); function TestCurrentPageAdjacent() { currentPage = flipper.currentPage; var notCachedPage = currentPage - (cachedPage + 1); LiveUnit.LoggingCore.logComment("Current page after flip: " + currentPage); LiveUnit.Assert.areEqual(cachedPage + 1, currentPage, "Page after flip should be: " + (cachedPage + 1)); LiveUnit.LoggingCore.logComment("Attempt to flip to page outside of cache: " + notCachedPage); FlipperUtils.ensureCurrentPage(flipper, notCachedPage, LiveUnit.GetWrappedCallback(TestCurrentPageNotCached)); function TestCurrentPageNotCached() { LiveUnit.LoggingCore.logComment("Current page after flip: " + flipper.currentPage); LiveUnit.Assert.areEqual(notCachedPage, flipper.currentPage, "Page after flip should be: " + notCachedPage); signalTestCaseCompleted(); } } } } // // Test: testFlipperJumpToSamePage via setting currentPage // testFlipperJumpToSamePage = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var page = flipper.currentPage; var eventTriggered = false; var pageVisibilityEventTriggered = LiveUnit.GetWrappedCallback(function () { eventTriggered = true; flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Current Page: " + flipper.currentPage); LiveUnit.LoggingCore.logComment("Tried to jump to page " + page); LiveUnit.LoggingCore.logComment("Event for pagevisibility was fired which should not have occured."); }); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); LiveUnit.LoggingCore.logComment("Attempting to flip to same page (same as current): " + page); flipper.addEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); flipper.currentPage = page; }); flipper.addEventListener(pageSelectedEvent, verify); setTimeout(LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); if (eventTriggered) { LiveUnit.Assert.fail("Event for pagevisibility was fired which should not have occured."); } else { LiveUnit.LoggingCore.logComment("It appears that currentPage did not trigger the " + " pagevisibility event as expected."); signalTestCaseCompleted(); } }), FlipperUtils.NAVIGATION_TIMEOUT); } // // Test: testFlipperNextBorder // testFlipperNextBorder = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID(), { currentPage: 6 }); var curPage = flipper.currentPage; var eventTriggered = false; var returnValue; var pageVisibilityEventTriggered = LiveUnit.GetWrappedCallback(function () { eventTriggered = true; flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Current Page: " + flipper.currentPage); LiveUnit.LoggingCore.logComment("Tried to flip to next page."); }); if (curPage != 6) { LiveUnit.Assert.fail("Unable to stage for border test"); } var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); LiveUnit.LoggingCore.logComment("Current Page Before flipping to Next page: " + curPage); flipper.addEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); returnValue = flipper.next(); }); flipper.addEventListener(pageSelectedEvent, verify); setTimeout(LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Next method returned: " + returnValue); if (eventTriggered) { LiveUnit.Assert.fail("Event for pagevisibility was fired which should not have occured."); } else { LiveUnit.LoggingCore.logComment("It appears that next() did not trigger the pagevisibility event as expected."); } if (returnValue) { LiveUnit.Assert.fail("Next method should not have returned " + returnValue); } else { LiveUnit.LoggingCore.logComment("Current Page After Attempt To Flip: " + flipper.currentPage); LiveUnit.Assert.areEqual(flipper.currentPage, curPage, "Should not be able to flip past last page."); LiveUnit.LoggingCore.logComment("SUCCESS: Unable to flip to Next page."); signalTestCaseCompleted(); } }), FlipperUtils.NAVIGATION_TIMEOUT); } // // Test: testFlipperPreviousBorder // testFlipperPreviousBorder = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var curPage = flipper.currentPage; var eventTriggered = false; var returnValue; var pageVisibilityEventTriggered = LiveUnit.GetWrappedCallback(function () { eventTriggered = true; flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Current Page: " + flipper.currentPage); LiveUnit.LoggingCore.logComment("Tried to flip to next page."); }); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); LiveUnit.LoggingCore.logComment("Current Page Before flipping to Previous page: " + curPage); flipper.addEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); returnValue = flipper.previous(); }); flipper.addEventListener(pageSelectedEvent, verify); setTimeout(LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Previous method returned: " + returnValue); if (eventTriggered) { LiveUnit.Assert.fail("Event for pagevisibility was fired which should not have occured."); } else { LiveUnit.LoggingCore.logComment("It appears that previous() did not trigger the pagevisibility event as expected."); } if (returnValue) { LiveUnit.Assert.fail("Previous method should not have returned " + returnValue); } else { LiveUnit.LoggingCore.logComment("Current Page After Attempt To Flip: " + flipper.currentPage); LiveUnit.Assert.areEqual(flipper.currentPage, curPage, "Should not be able to flip before first page."); LiveUnit.LoggingCore.logComment("SUCCESS: Unable to flip to Previous page."); signalTestCaseCompleted(); } }), FlipperUtils.NAVIGATION_TIMEOUT); } // // Test: testFlipperJumpToInvalidPage via currentPage // testFlipperJumpToInvalidPage = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var startPage = flipper.currentPage; var page = 500; var eventTriggered = false; var pageVisibilityEventTriggered = LiveUnit.GetWrappedCallback(function () { eventTriggered = true; flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Current Page: " + flipper.currentPage); LiveUnit.LoggingCore.logComment("Tried to jump to page " + page); }); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); flipper.addEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); LiveUnit.LoggingCore.logComment("Attempt to set currentPage: " + page); LiveUnit.LoggingCore.logComment("Current Page Before Flip: " + flipper.currentPage); flipper.currentPage = page; }); flipper.addEventListener(pageSelectedEvent, verify); setTimeout(LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener("pagevisibilitychanged", pageVisibilityEventTriggered, false); if (eventTriggered) { // There are 7 pages in the flipper var lastPageIndex = 6; LiveUnit.Assert.areEqual(lastPageIndex, flipper.currentPage, "Current page: " + flipper.currentPage + " after navigating to an out of range index is not the last page: " + lastPageIndex); signalTestCaseCompleted(); } else { LiveUnit.LoggingCore.logComment("It appears that setting the currentPage to " + page + " did not trigger the pagevisibility event as expected"); LiveUnit.LoggingCore.logComment("Current Page After Attempt To Flip: " + flipper.currentPage); } }), FlipperUtils.NAVIGATION_TIMEOUT); } // // Test: testFlipperJumpToRandom // testFlipperJumpToRandom = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()); var flipperSize = 7; var jumpCount = 0; var oldPage = flipper.currentPage; var pageToJumpTo = pseudorandom(flipperSize); function pseudorandom(upto) { return Math.floor(Math.random() * upto); } var nextJumpCallBack = function () { LiveUnit.Assert.areEqual(flipper.currentPage, pageToJumpTo, "Jumped from " + oldPage + " to " + pageToJumpTo); if (jumpCount < 30) { jumpCount++; oldPage = flipper.currentPage; do { pageToJumpTo = pseudorandom(flipperSize); } while (pageToJumpTo === oldPage); LiveUnit.LoggingCore.logComment("Jumping from " + oldPage + " to " + pageToJumpTo); FlipperUtils.ensureCurrentPage(flipper, pageToJumpTo, nextJumpCallBack); } else { signalTestCaseCompleted(); } }; var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); LiveUnit.Assert.areEqual(flipper.currentPage, 0, "Flipper started at current page"); LiveUnit.LoggingCore.logComment("Jumping from " + oldPage + " to " + pageToJumpTo); while (pageToJumpTo === oldPage) { pageToJumpTo = pseudorandom(flipperSize); } FlipperUtils.ensureCurrentPage(flipper, pageToJumpTo, nextJumpCallBack); }); flipper.addEventListener(pageSelectedEvent, verify); } // // Test: testFlipperItemVisible // testFlipperItemVisible = function (signalTestCaseCompleted) { var flipper = FlipperUtils.instantiate(FlipperUtils.basicFlipperID()), pages = FlipperUtils.basicFlipperHtmlIDs(); var checkVisibleItems = LiveUnit.GetWrappedCallback(function (flipDir) { var currentPage = flipper.currentPage; LiveUnit.LoggingCore.logComment("Current Page After Flip " + flipDir + ": " + currentPage); LiveUnit.LoggingCore.logComment("Check all pages, ensure " + pages[currentPage] + " is the only page that is visible via DOM."); for (var pageIndex in pages) { LiveUnit.LoggingCore.logComment("Testing " + pages[pageIndex] + " vs. " + pages[currentPage]); if (FlipperUtils.isFlipperItemVisible(pages[pageIndex])) { if (pages[pageIndex] !== pages[currentPage]) { LiveUnit.Assert.fail(pages[pageIndex] + ": Should NOT be in view, but it is."); } } else { if (pages[pageIndex] === pages[currentPage]) { LiveUnit.Assert.fail(pages[pageIndex] + ": Should be in view, but it is not."); } } } if (flipDir === 'next') { if (currentPage < pages.length - 1) { if (FlipperUtils.ensureNext(flipper, nextCompleted)) { LiveUnit.LoggingCore.logComment("Flip to next page returned true."); } else { LiveUnit.Assert.fail("Flip to next page failed."); } } else { if (FlipperUtils.ensurePrevious(flipper, previousCompleted)) { LiveUnit.LoggingCore.logComment("Flip to previous page returned true."); } else { LiveUnit.Assert.fail("Flip to previous page failed."); } } } else { if (currentPage > 0) { if (FlipperUtils.ensurePrevious(flipper, previousCompleted)) { LiveUnit.LoggingCore.logComment("Flip to previous page returned true."); } else { LiveUnit.Assert.fail("Flip to previous page failed."); } } else { signalTestCaseCompleted(); } } }); var nextCompleted = LiveUnit.GetWrappedCallback(function () { checkVisibleItems("next"); }); var previousCompleted = LiveUnit.GetWrappedCallback(function () { checkVisibleItems("previous"); }); var verify = LiveUnit.GetWrappedCallback(function () { flipper.removeEventListener(pageSelectedEvent, verify); if (FlipperUtils.ensureNext(flipper, nextCompleted)) { LiveUnit.LoggingCore.logComment("Flip to next page returned true."); } else { LiveUnit.Assert.fail("Flip to next page failed."); } }); flipper.addEventListener(pageSelectedEvent, verify); } } } // Register the object as a test class by passing in the name LiveUnit.registerTestClass("WinJSTests.NavigationTests");