// 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_VerifyEvents(signalTestCaseCompleted, howAddEventListeners) {
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, { 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 just use "sanity" checks to make sure the events fired after each other within 10 seconds.
switch (event.type) {
case "trigger":
// Display the tooltip
triggerTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment(triggerTime);
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
beforeopenTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment(beforeopenTime);
LiveUnit.Assert.isTrue(beforeopenTime >= triggerTime);
LiveUnit.Assert.isTrue(beforeopenTime < (triggerTime + 10000));
break;
case "opened":
openedTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment(openedTime);
LiveUnit.Assert.isTrue(openedTime >= beforeopenTime);
LiveUnit.Assert.isTrue(openedTime < (beforeopenTime + 10000));
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
beforecloseTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment(beforecloseTime);
LiveUnit.Assert.isTrue(beforecloseTime >= openedTime);
LiveUnit.Assert.isTrue(beforecloseTime < (openedTime + 10000));
break;
case "closed":
closedTime = (new Date()).getTime();
LiveUnit.LoggingCore.logComment(closedTime);
LiveUnit.Assert.isTrue(closedTime >= beforecloseTime);
LiveUnit.Assert.isTrue(closedTime < (beforecloseTime + 10000));
// Verify we actually got all the events.
LiveUnit.Assert.areNotEqual(typeof (triggerTime), 'undefined');
LiveUnit.Assert.areNotEqual(typeof (beforeopenTime), 'undefined');
LiveUnit.Assert.areNotEqual(typeof (openedTime), 'undefined');
LiveUnit.Assert.areNotEqual(typeof (beforecloseTime), 'undefined');
signalTestCaseCompleted();
break;
default:
LiveUnit.Assert.fail("Unkown event received");
break;
}
}
switch (howAddEventListeners) {
case "normal":
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
break;
case "on":
// Test that developers can register events by calling "tooltip.onXXX" in addition to
// calling tooltip.addEventListener("XXX") (see win8 bug 869083).
tooltip.onbeforeopen = LiveUnit.GetWrappedCallback(tooltipEventListener);
tooltip.onopened = LiveUnit.GetWrappedCallback(tooltipEventListener);
tooltip.onbeforeclose = LiveUnit.GetWrappedCallback(tooltipEventListener);
tooltip.onclosed = LiveUnit.GetWrappedCallback(tooltipEventListener);
tooltipUtils.fireTriggerEvent(tooltipEventListener);
break;
default:
LiveUnit.Assert.fail("Unkown parameter " + howAddEventListeners);
break;
}
}
export class TooltipDisplayingTests {
setUp() {
tooltipUtils.setUp();
}
tearDown() {
tooltipUtils.cleanUp();
}
//-----------------------------------------------------------------------------------
testTooltip_VerifyTitleAttribute(signalTestCaseCompleted) {
LiveUnit.LoggingCore.logComment("Window size: " + window.innerWidth + " " + window.innerHeight);
// Set up the anchor/trigger element.
var element = document.getElementById(tooltipUtils.defaultElementID);
element.title = "title";
tooltipUtils.positionElement(element, "center");
// set up the tooltip
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID);
// Verify the title attribute got removed during the tooltip creation, and is being used as our tooltip contents
LiveUnit.Assert.areEqual(element.title, "");
LiveUnit.Assert.areEqual(tooltip.innerHTML, "title");
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
LiveUnit.LoggingCore.logComment("tooltip text: " + tooltip.innerHTML);
LiveUnit.LoggingCore.logComment("element title: " + element.getAttribute("title"));
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "opened":
LiveUnit.Assert.areEqual(tooltip._domElement.innerHTML, "title");
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyTitleAttributeAfter(signalTestCaseCompleted) {
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, { innerHTML: "tooltip" });
// Set the title AFTER the tooltip is created.
element.title = "title";
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment("event: " + event.type);
tooltipUtils.logTooltipInformation(tooltip);
LiveUnit.LoggingCore.logComment("tooltip text: " + tooltip.innerHTML);
LiveUnit.LoggingCore.logComment("element title: " + element.title);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
// Verify the title attribute got removed.
// Win8 bug 269361: "title" attribute is only checked during tooltip creation, but could be checked before the tooltip is actually displayed
LiveUnit.Assert.areEqual(element.title, "title");
LiveUnit.Assert.areEqual(tooltip.innerHTML, "tooltip");
// Try setting the title again.
element.title = "titlebeforeopen";
break;
case "opened":
// Win8 bug 269361: "title" attribute is only checked during tooltip creation, but could be checked before the tooltip is actually displayed
LiveUnit.Assert.areEqual(element.title, "titlebeforeopen");
LiveUnit.Assert.areEqual(tooltip.innerHTML, "tooltip");
// Try setting the title again.
element.title = "titleOpened";
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
// Win8 bug 269361: "title" attribute is only checked during tooltip creation, but could be checked before the tooltip is actually displayed
LiveUnit.Assert.areEqual(element.title, "titleOpened");
LiveUnit.Assert.areEqual(tooltip.innerHTML, "tooltip");
// Try setting the title again. Even though we're getting ready to close, it's interesting to see if we can change the title attribute.
element.title = "titlebeforeclose";
break;
case "closed":
// Win8 bug 269361: "title" attribute is only checked during tooltip creation, but could be checked before the tooltip is actually displayed
LiveUnit.Assert.areEqual(element.title, "titlebeforeclose");
LiveUnit.Assert.areEqual(tooltip.innerHTML, "tooltip");
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyCustomizationInnerHTML(signalTestCaseCompleted) {
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, { innerHTML: "
opened
" });
LiveUnit.Assert.isFalse(tooltipUtils.isTooltipFullyVisible(tooltip));
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
LiveUnit.LoggingCore.logComment("tooltip property text: " + tooltip.innerHTML);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
LiveUnit.Assert.isFalse(tooltipUtils.isTooltipFullyVisible(tooltip));
break;
case "opened":
// Verify the tooltip text has changed.
LiveUnit.Assert.areEqual(tooltip._domElement.innerHTML, "opened
");
tooltip.innerHTML = "beforeclose
";
LiveUnit.Assert.areEqual(tooltip._domElement.innerHTML, "beforeclose
");
LiveUnit.Assert.isTrue(tooltipUtils.isTooltipFullyVisible(tooltip));
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
// Verify the tooltip text has changed.
LiveUnit.Assert.areEqual(tooltip._domElement.innerHTML, "beforeclose
");
tooltip.innerHTML = "closed
";
LiveUnit.Assert.areEqual(tooltip._domElement.innerHTML, "closed
");
LiveUnit.Assert.isTrue(tooltipUtils.isTooltipFullyVisible(tooltip));
break;
case "closed":
LiveUnit.Assert.isFalse(tooltipUtils.isTooltipFullyVisible(tooltip));
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyDefaultStyles(signalTestCaseCompleted) {
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, { innerHTML: "innerHTML
" });
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
break;
case "opened":
// Verify the tooltip's styles. Since this is just a DOM element, just check a few of
// them to verify the styles in .win-tooltip class are getting through.
// Try to pick a few that don't change frequently, so it won't keep breaking our tests.
LiveUnit.LoggingCore.logComment(tooltip._domElement.getAttribute("class"));
LiveUnit.Assert.areNotEqual(tooltip._domElement.getAttribute("class").indexOf("win-tooltip"), -1);
// From controls.css:
//.win-tooltip {
// display: block;
// position: fixed;
// top: 30px;
// left: 30px;
// max-width: 30em;
// margin: 0;
// padding: 7px 12px 8px 12px;
// border-style: solid;
// border-width: 2px;
// z-index: 9999;
// word-wrap: break-word;
// -ms-animation-fill-mode: both;
// WIN_TYPE_XX_SMALL
//}
var tooltipStyle = window.getComputedStyle(tooltip._domElement, null);
LiveUnit.LoggingCore.logComment(tooltipStyle.zIndex);
LiveUnit.Assert.areEqual(+tooltipStyle.zIndex, 9999);
LiveUnit.LoggingCore.logComment(tooltipStyle.position);
LiveUnit.Assert.areEqual(tooltipStyle.position, "fixed");
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
LiveUnit.LoggingCore.logComment(tooltip._domElement.getAttribute("class"));
LiveUnit.Assert.areNotEqual(tooltip._domElement.getAttribute("class").indexOf("win-tooltip"), -1);
break;
case "closed":
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyPhantomDiv(signalTestCaseCompleted) {
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, { innerHTML: "innerHTML
" });
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
LiveUnit.Assert.isNull(tooltip._phantomDiv);
break;
case "opened":
LiveUnit.Assert.isNotNull(tooltip._phantomDiv);
// Verify the tooltip's styles. Since this is just a DOM element, just check a few of
// them to verify the styles in .win-tooltip-phantom class are getting through.
LiveUnit.LoggingCore.logComment(tooltip._phantomDiv.getAttribute("class"));
LiveUnit.Assert.areNotEqual(tooltip._phantomDiv.getAttribute("class").indexOf("win-tooltip-phantom"), -1);
// From controls.css:
// position:absolute;
// background-color:transparent
// top:30px;
// left:30px;
// border-width:0px;
// padding:0px 0px 0px 0px;
// display:block;
// margin:0px 0px 0px 0px;
var tooltipStyle = window.getComputedStyle(tooltip._phantomDiv, null);
LiveUnit.LoggingCore.logComment(tooltipStyle.backgroundColor);
Helper.Assert.areColorsEqual(tooltipStyle.backgroundColor, "transparent");
// Make sure we can't tab to the phantom tooltip div
var tabindex = tooltip._phantomDiv.getAttribute("tabindex");
LiveUnit.LoggingCore.logComment("phantom tabindex: " + tabindex);
LiveUnit.Assert.isTrue(parseInt(tabindex) < 0);
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
LiveUnit.LoggingCore.logComment(tooltip._phantomDiv.getAttribute("class"));
LiveUnit.Assert.areNotEqual(tooltip._phantomDiv.getAttribute("class").indexOf("win-tooltip-phantom"), -1);
break;
case "closed":
LiveUnit.Assert.isNull(tooltip._phantomDiv);
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyCustomizationStyles(signalTestCaseCompleted) {
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, { innerHTML: "innerHTML
" });
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
if (tooltip._domElement) {
var tooltipClass = tooltip._domElement.className;
LiveUnit.LoggingCore.logComment(tooltipClass);
LiveUnit.Assert.areNotEqual(tooltipClass.indexOf("win-tooltip"), -1);
}
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "opened":
// Verify the tooltip's styles. Since this is just a DOM element, just check a few of
// them to verify the styles in .win-tooltip class are getting through.
tooltip._domElement.setAttribute("class", tooltipClass + " tooltip-test-css");
WinJS.Utilities._setImmediate(function () {
// See Tooltip.css for the values
var tooltipStyle = window.getComputedStyle(tooltip._domElement, null);
// fontFamily is in the default stylesheet, but not specifically the tooltip section.
// Make sure we can override it.
LiveUnit.LoggingCore.logComment(tooltipStyle.fontFamily);
Helper.Assert.areFontFamiliesEqual(tooltipStyle.fontFamily, "Courier New");
// zIndex is specifically in .win-tooltip. Make sure we can override it.
LiveUnit.LoggingCore.logComment(tooltipStyle.zIndex);
LiveUnit.Assert.areEqual(+tooltipStyle.zIndex, 9998);
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
});
break;
case "beforeclose":
LiveUnit.Assert.areNotEqual(tooltipClass.indexOf("tooltip-test-css"), -1);
break;
case "closed":
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyExtraClass(signalTestCaseCompleted) {
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, use a custom extraClass
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { extraClass: "tooltip-test-css", innerHTML: "innerHTML
" });
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "opened":
LiveUnit.Assert.areNotEqual(tooltip._domElement.className.indexOf("tooltip-test-css"), -1);
// Now remove the class and verify it does NOT get removed. This is by design.
tooltip.extraClass = "";
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "beforeclose":
// Verify the extraClass is still affecting us now.
LiveUnit.Assert.areNotEqual(tooltip._domElement.className.indexOf("tooltip-test-css"), -1);
break;
case "closed":
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyExtraClassRemoved(signalTestCaseCompleted) {
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, use a custom extraClass
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { extraClass: "tooltip-test-css", innerHTML: "innerHTML
" });
var timesTooltipOpened = 0;
// This should open up the tooltip twice.
// The first time it should have the extraClass, the second the extraClass should be removed.
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "opened":
timesTooltipOpened++;
if (timesTooltipOpened == 1) {
LiveUnit.Assert.areNotEqual(tooltip._domElement.className.indexOf("tooltip-test-css"), -1);
}
else {
LiveUnit.Assert.areEqual(tooltip._domElement.className.indexOf("tooltip-test-css"), -1);
}
// fire mouse out which should dismiss the tooltip.
commonUtils.mouseOverUsingMiP(element, null);
break;
case "closed":
if (timesTooltipOpened == 1) {
tooltip.extraClass = "";
tooltipUtils.fireTriggerEvent(tooltipEventListener);
}
else {
signalTestCaseCompleted();
}
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyEvents(signalTestCaseCompleted) {
testTooltip_VerifyEvents(signalTestCaseCompleted, "normal");
}
testTooltip_VerifyOnEvents(signalTestCaseCompleted) {
testTooltip_VerifyEvents(signalTestCaseCompleted, "on");
}
testTooltip_VerifyAnchorContainingChild(signalTestCaseCompleted) {
LiveUnit.LoggingCore.logComment("Window size: " + window.innerWidth + " " + window.innerHeight);
// Set up the anchor/trigger element.
var element = document.getElementById(tooltipUtils.defaultElementID);
element.innerHTML = "Anchor Element Child of anchor element
";
var childElement = document.getElementById("childID");
// set up the tooltip on the element but not the child.
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { innerHTML: "tooltip" });
var testFinished = false;
var callCount = 0;
tooltip._setTimeout = function (callback, delay) {
// after "opened" fires, the default "hide" timeout will get called,
// which we can ignore.
if (testFinished) {
return;
}
callCount++;
if (callCount > 1) {
LiveUnit.Assert.fail("Tooltip shouldn't close.");
} else {
callback();
}
}
var beforeopen = 0;
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
// Display the tooltip by hovering over the element (but it shouldn't display)
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
beforeopen++;
break;
case "opened":
LiveUnit.Assert.areEqual(beforeopen, 1);
// Mouse over the child element which should NOT cause the tooltip to close and open again.
// This is primarily a test for Win8 bug 287368.
commonUtils.mouseOverUsingMiP(null, childElement);
testFinished = true;
signalTestCaseCompleted();
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyNullInnerHTML(signalTestCaseCompleted) {
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 on the element.
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { innerHTML: null });
var callCount = 0;
tooltip._setTimeout = function (callback, delay) {
callCount++;
LiveUnit.Assert.areEqual(1, callCount, "Tooltip should be cancelled.");
// let beforeopen fire
callback();
LiveUnit.Assert.areEqual(tooltipUtils.isTooltipFullyVisible(tooltip), false);
LiveUnit.Assert.areEqual(beforeopen, 1);
LiveUnit.Assert.areEqual(opened, 0);
LiveUnit.Assert.areEqual(beforeclose, 0);
LiveUnit.Assert.areEqual(closed, 0);
signalTestCaseCompleted();
}
var beforeopen = 0;
var opened = 0;
var beforeclose = 0;
var closed = 0;
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
// Display the tooltip by hovering over the element (but it shouldn't display)
tooltipUtils.displayTooltip("mouse", element, tooltip);
break;
case "beforeopen":
beforeopen++;
break;
case "opened":
opened++;
break;
case "beforeclose":
beforeclose++;
break;
case "closed":
closed++;
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
testTooltip_VerifyFocusDoesntDisplayTooltip(signalTestCaseCompleted) {
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 on the element.
var tooltip = tooltipUtils.instantiate(tooltipUtils.defaultElementID, { innerHTML: null });
tooltip._setTimeout = function (callback, delay) {
LiveUnit.Assert.fail("Tooltip should never display on focus");
}
var beforeopen = 0;
var opened = 0;
var beforeclose = 0;
var closed = 0;
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
// Display the tooltip by calling focus on the element (but it shouldn't display)
element.focus();
break;
case "beforeopen":
beforeopen++;
break;
case "opened":
opened++;
break;
case "beforeclose":
beforeclose++;
break;
case "closed":
closed++;
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
LiveUnit.Assert.areEqual(tooltipUtils.isTooltipFullyVisible(tooltip), false);
LiveUnit.Assert.areEqual(beforeopen, 0);
LiveUnit.Assert.areEqual(opened, 0);
LiveUnit.Assert.areEqual(beforeclose, 0);
LiveUnit.Assert.areEqual(closed, 0);
signalTestCaseCompleted();
}
testTooltip_VerifyTooltipDisappearsWhenAnchorRemoved(signalTestCaseCompleted) {
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, { innerHTML: "tooltip" });
var callCount = 0;
tooltip._setTimeout = function (callback, delay) {
callCount++;
LiveUnit.Assert.areEqual(1, callCount, "before close/close should not fire");
// let open fire
callback();
LiveUnit.Assert.isFalse(tooltipUtils.isTooltipFullyVisible(tooltip));
}
function tooltipEventListener(event) {
LiveUnit.Assert.isNotNull(event);
LiveUnit.LoggingCore.logComment(event.type);
tooltipUtils.logTooltipInformation(tooltip);
switch (event.type) {
case "trigger":
// Display the tooltip. Use touch since that makes the tooltip stay up forever.
tooltipUtils.displayTooltip("touch", element, tooltip);
break;
case "opened":
LiveUnit.Assert.isTrue(tooltipUtils.isTooltipFullyVisible(tooltip));
// remove the anchor from the DOM. This should not trigger beforeclose and closed to fire.
// Win8 Bug 275290: If you remove the "anchor element" the tooltip is attached to from the DOM,
// you don't receive beforeclose and closed events
commonUtils.removeElementById(tooltipUtils.defaultElementID);
signalTestCaseCompleted();
break;
case "beforeclose":
LiveUnit.Assert.fail("This should fail if win8 bug 275290 is fixed");
break;
case "closed":
LiveUnit.Assert.fail("This should fail if win8 bug 275290 is fixed");
break;
}
}
tooltipUtils.setupTooltipListener(tooltip, tooltipEventListener);
}
};
}
// Register the object as a test class by passing in the name
LiveUnit.registerTestClass("WinJSTests.TooltipDisplayingTests");