// 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 COUNT = 6;
function verifyDisplayedItem(flipView, rawData) {
LiveUnit.LoggingCore.logComment("Verifying displayed page is correct");
LiveUnit.Assert.isTrue(currentPageInView(flipView));
flipView.itemTemplate.verifyOutput(getDisplayedElement(flipView), rawData);
}
function eventsTest(element, flipView, rawData, complete, useL0DomEvent, pageAlreadyCompleted: boolean) {
var gotVisibilityChangedTrue;
var gotVisibilityChangedFalse;
var outgoingElement;
var expectedIncomingElement;
function resetResults() {
gotVisibilityChangedTrue = false;
gotVisibilityChangedFalse = false;
outgoingElement = null;
expectedIncomingElement = null;
}
function verifyExpectedResults(targetIndex) {
LiveUnit.Assert.isTrue(gotVisibilityChangedTrue);
LiveUnit.Assert.isTrue(gotVisibilityChangedFalse);
verifyDisplayedItem(flipView, rawData[targetIndex]);
LiveUnit.Assert.isFalse(elementInView(flipView, outgoingElement));
resetResults();
}
function customAnimation(outgoing, incoming) {
outgoing = getElementFromContainer(outgoing);
incoming = getElementFromContainer(incoming);
LiveUnit.LoggingCore.logComment("Navigation animation triggered");
LiveUnit.Assert.areEqual(expectedIncomingElement, incoming);
expectedIncomingElement = null;
outgoingElement = outgoing;
return WinJS.Promise.timeout(25);
}
flipView.setCustomAnimations({
next: customAnimation,
previous: customAnimation,
jump: customAnimation
});
function pageVisibilityHandler(e) {
if (e.detail.visible) {
LiveUnit.Assert.isFalse(gotVisibilityChangedTrue);
gotVisibilityChangedTrue = true;
expectedIncomingElement = e.target;
} else {
LiveUnit.Assert.isFalse(gotVisibilityChangedFalse);
gotVisibilityChangedFalse = true;
LiveUnit.Assert.areEqual(outgoingElement, e.target);
}
}
if (useL0DomEvent) {
flipView.onpagevisibilitychanged = pageVisibilityHandler;
} else {
flipView.addEventListener("pagevisibilitychanged", pageVisibilityHandler, false);
}
var tests = [
function () {
LiveUnit.Assert.areEqual(0, flipView.currentPage);
resetResults();
verifyDisplayedItem(flipView, rawData[0]);
LiveUnit.Assert.isTrue(flipView.next());
},
function () {
LiveUnit.Assert.areEqual(1, flipView.currentPage);
verifyExpectedResults(1);
LiveUnit.Assert.isTrue(flipView.next());
},
function () {
LiveUnit.Assert.areEqual(2, flipView.currentPage);
verifyExpectedResults(2);
flipView.currentPage = 5;
},
function () {
LiveUnit.Assert.areEqual(5, flipView.currentPage);
verifyExpectedResults(5);
flipView.currentPage = 6;
return true;
},
function () {
LiveUnit.Assert.areEqual(5, flipView.currentPage);
verifyDisplayedItem(flipView, rawData[5]);
LiveUnit.Assert.isFalse(gotVisibilityChangedTrue);
LiveUnit.Assert.isFalse(gotVisibilityChangedFalse);
LiveUnit.Assert.isFalse(flipView.next());
return true;
},
function () {
LiveUnit.Assert.areEqual(5, flipView.currentPage);
verifyDisplayedItem(flipView, rawData[5]);
LiveUnit.Assert.isFalse(gotVisibilityChangedTrue);
LiveUnit.Assert.isFalse(gotVisibilityChangedFalse);
flipView.currentPage = 0;
},
function () {
LiveUnit.Assert.areEqual(0, flipView.currentPage);
verifyExpectedResults(0);
complete();
}
];
runFlipViewTests(flipView, tests, pageAlreadyCompleted);
}
export class FlipViewEventsTests {
setUp() {
LiveUnit.LoggingCore.logComment("In setup");
var newNode = document.createElement("div");
newNode.id = "BasicFlipView";
newNode.style.width = "400px";
newNode.style.height = "400px";
document.body.appendChild(newNode);
}
tearDown() {
LiveUnit.LoggingCore.logComment("In tearDown");
var element = document.getElementById("BasicFlipView");
if (element) {
WinJS.Utilities.disposeSubTree(element);
document.body.removeChild(element);
}
}
}
function generate(name, executeTest: Function) {
function generateTest(orientation, useL0DomEvent) {
FlipViewEventsTests.prototype[name + "_" + orientation + (useL0DomEvent ? "_useL0DomEvent" : "")] = function (complete) {
var element = document.getElementById("BasicFlipView");
var testData = createArraySource(COUNT, ["400px"], ["400px"]);
var rawData = testData.rawData;
var options = { itemDataSource: testData.dataSource, itemTemplate: basicInstantRenderer, orientation: orientation };
var flipView: WinJS.UI.PrivateFlipView;
// Creating a new FlipView in the DOM will result in it handling an initial async resize event.
// Wait for this to fire before continuing the test, so we don't detect any false positives
// caused by resize handling code running in the middle of a test.
flipView = > new WinJS.UI.FlipView(element, options);
var initialResizePromise = new WinJS.Promise((c) => {
flipView._elementResizeInstrument.addEventListener("resize", c);
});
var pageCompletedPromise = new WinJS.Promise((c) => {
flipView.addEventListener("pagecompleted", c);
});
WinJS.Promise
.join([
initialResizePromise,
pageCompletedPromise
])
.then(() => {
executeTest(element, flipView, rawData, complete, useL0DomEvent, /* pageAlreadyCompleted */ true);
});
};
}
[true, false].forEach(function (useL0DomEvent) {
generateTest("horizontal", useL0DomEvent);
generateTest("vertical", useL0DomEvent);
});
}
generate("testFlipViewPageEvents", eventsTest);
}
LiveUnit.registerTestClass("WinJSTests.FlipViewEventsTests");