// 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 tooltipUtils = TooltipUtils;
var commonUtils = Helper;
function testTooltip_Infotip(signalTestCaseCompleted, showInfotip, useTouch, toleranceDisplayTime, toleranceInvokeTime) {
LiveUnit.LoggingCore.logComment("Window size: " + window.innerWidth + " " + window.innerHeight);
// Set up the anchor/trigger element.
var element = document.getElementById(tooltipUtils.defaultElementID);
tooltipUtils.positionElement(element, "center");
// set up the tooltip
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { infotip: showInfotip, innerHTML: "tooltip" });
var triggerTime;
var beforeopenTime;
var openedTime;
var beforecloseTime;
var closedTime;
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
// We don't want to make these perf tests, since there's other delay times due to logging, etc.,
// so use "tolerance" to make sure the events are fired within a reasonable amount of time.
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip((useTouch ? "touch" : "mouse"), element, tooltip);
triggerTime = (new Date()).getTime();
break;
case "beforeopen":
beforeopenTime = (new Date()).getTime();
break;
case "opened":
openedTime = (new Date()).getTime();
if (useTouch) {
// Touch will display the tooltip forever, so let's just immediately dismiss it.
if (tooltipUtils.pointerOverSupported) {
commonUtils.touchOver(element, null);
} else {
commonUtils.touchUp(element);
}
}
break;
case "beforeclose":
beforecloseTime = (new Date()).getTime();
break;
case "closed":
closedTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment("triggerTime " + triggerTime);
LiveUnit.LoggingCore.logComment("beforeopenTime " + beforeopenTime);
LiveUnit.LoggingCore.logComment("openedTime " + openedTime);
LiveUnit.LoggingCore.logComment("beforecloseTime " + beforecloseTime);
LiveUnit.LoggingCore.logComment("closedTime " + closedTime);
// Tooltip timings:
// Infotip = false
// Type of input Show Re-show Hide
// Touch 400 ms after finger down 0 Finger-up
// Mouse 2*SPI_GETMOUSEHOVERTIME 600ms SPI_GETMESSAGEDURATION (5s default)
// KB 2*SPI_GETMOUSEHOVERTIME 800ms SPI_GETMESSAGEDURATION
//
// Infotip = true
// Touch 1.2 s after finger down 400ms Finger-up
// Mouse 2.5*SPI_GETMOUSEHOVERTIME 800ms 3 * SPI_GETMESSAGEDURATION
// Keyboard 2.5*SPI_GETMOUSEHOVERTIME 1s 3 * SPI_GETMESSAGEDURATION
var invokeTime = (beforeopenTime - triggerTime);
LiveUnit.LoggingCore.logComment("Invoke time: " + invokeTime);
var expectedInvokeTime;
if (showInfotip) {
expectedInvokeTime = useTouch ? tooltipUtils.DELAY_INITIAL_TOUCH_LONG : (2.5 * tooltipUtils.DEFAULT_MOUSE_HOVER_TIME);
}
else {
expectedInvokeTime = useTouch ? tooltipUtils.DELAY_INITIAL_TOUCH_SHORT : (2.0 * tooltipUtils.DEFAULT_MOUSE_HOVER_TIME);
}
LiveUnit.LoggingCore.logComment("Expected invoke time: " + expectedInvokeTime);
LiveUnit.Assert.isTrue(invokeTime > (expectedInvokeTime - toleranceInvokeTime));
LiveUnit.Assert.isTrue(invokeTime < (expectedInvokeTime + toleranceInvokeTime));
if (!useTouch) {
// We don't care about this time for touch, since the tooltip displays as long as we touch down.
// So there's no special duration to measure.
var displayTime = (beforecloseTime - openedTime);
LiveUnit.LoggingCore.logComment("Display time: " + displayTime);
var expectedDisplayTime = showInfotip ? (tooltipUtils.DEFAULT_MESSAGE_DURATION * 3) : tooltipUtils.DEFAULT_MESSAGE_DURATION;
LiveUnit.LoggingCore.logComment("Expected display time: " + expectedDisplayTime);
LiveUnit.Assert.isTrue(displayTime > (expectedDisplayTime - toleranceDisplayTime));
LiveUnit.Assert.isTrue(displayTime < (expectedDisplayTime + toleranceDisplayTime));
}
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
export class TooltipInfotipTests {
setUp() {
tooltipUtils.setUp();
}
tearDown() {
tooltipUtils.cleanUp();
}
testTooltip_InfotipTrue(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, true, false, 5000, 500);
}
testTooltip_InfotipFalse(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, false, false, 5000, 500);
}
testTooltip_InfotipTrueUsingTouch(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, true, true, 5000, 500);
}
testTooltip_InfotipFalseUsingTouch(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, false, true, 5000, 500);
}
testTooltip_InfotipTrueIDX(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, true, false, 1000, 150);
}
testTooltip_InfotipFalseIDX(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, false, false, 1000, 150);
}
testTooltip_InfotipTrueUsingTouchIDX(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, true, true, 1000, 150);
}
testTooltip_InfotipFalseUsingTouchIDX(signalTestCaseCompleted) {
testTooltip_Infotip(signalTestCaseCompleted, false, true, 1000, 150);
}
};
}
// Register the object as a test class by passing in the name
LiveUnit.registerTestClass("WinJSTests.TooltipInfotipTests");