// 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 Key = WinJS.Utilities.Key;
function assertHighContrastAdjust(element, expected) {
if ("msHighContrastAdjust" in document.documentElement.style) {
LiveUnit.Assert.areEqual(expected, element.style.msHighContrastAdjust);
}
}
var _element;
export class NavBarCommandTests {
setUp = function () {
LiveUnit.LoggingCore.logComment("In setup");
var newNode = document.createElement("div");
newNode.id = "host";
document.body.appendChild(newNode);
_element = newNode;
};
tearDown = function () {
LiveUnit.LoggingCore.logComment("In tearDown");
if (_element) {
WinJS.Utilities.disposeSubTree(_element);
document.body.removeChild(_element);
_element = null;
}
};
testInstantiationMarkup = function (complete) {
var host = document.getElementById("host");
var html = "
";
host.innerHTML = html;
WinJS.UI.processAll().
then(function () {
var navcmd = document.getElementById('navcmd').winControl;
LiveUnit.Assert.isTrue(WinJS.Utilities.hasClass(navcmd.element, "win-navbarcommand"),
"win-navbarcommand class not present");
// Verify main button
var buttonEl = navcmd.element.querySelector(".win-navbarcommand-button");
LiveUnit.Assert.isTrue(buttonEl, "win-navbarcommand-button class not present");
// Verify split button
var splitButtonEl = navcmd.element.querySelector(".win-navbarcommand-splitbutton");
LiveUnit.Assert.isTrue(splitButtonEl, "win-navbarcommand-splitbutton class not present");
// Verify split and main button elements are not same
LiveUnit.Assert.isFalse(splitButtonEl === buttonEl);
// Verify icon
var iconEl = buttonEl.querySelector(".win-navbarcommand-icon");
LiveUnit.Assert.isTrue(iconEl, "win-navbarcommand-icon class not present");
// Verify label
var labelEl = buttonEl.querySelector(".win-navbarcommand-label");
LiveUnit.Assert.isTrue(labelEl, "win-navbarcommand-label class not present");
// Verify label and icon elements are not same
LiveUnit.Assert.isFalse(iconEl === labelEl);
}).
done(complete);
};
testLabel = function () {
var navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.areEqual("", navbarCommand.element.textContent.trim());
navbarCommand.label = "abc";
LiveUnit.Assert.areEqual("abc", navbarCommand.element.textContent.trim());
navbarCommand.label = "";
LiveUnit.Assert.areEqual("", navbarCommand.element.textContent.trim());
};
testTooltip = function () {
var navbarCommand;
navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"), { label: 'abc', tooltip: '' });
LiveUnit.Assert.areEqual("", navbarCommand.element.title);
var element2 = document.createElement("div");
document.body.appendChild(element2);
navbarCommand = new WinJS.UI.NavBarCommand(element2, { label: 'abc', tooltip: 'def' });
LiveUnit.Assert.areEqual("def", navbarCommand.element.title);
element2.parentNode.removeChild(element2);
var element3 = document.createElement("div");
document.body.appendChild(element3);
navbarCommand = new WinJS.UI.NavBarCommand(element3, { label: 'abc' });
LiveUnit.Assert.areEqual("", navbarCommand.element.title);
element3.parentNode.removeChild(element3);
var element4 = document.createElement("div");
document.body.appendChild(element4);
navbarCommand = new WinJS.UI.NavBarCommand(element4);
LiveUnit.Assert.areEqual("", navbarCommand.element.title);
// Dynamic updates:
navbarCommand.tooltip = "abc";
LiveUnit.Assert.areEqual("abc", navbarCommand.element.title);
navbarCommand.tooltip = null;
LiveUnit.Assert.areEqual("", navbarCommand.element.title);
element4.parentNode.removeChild(element4);
};
testIcon = function () {
var navbarCommand;
navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.areEqual("", navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual(undefined, navbarCommand.icon);
var element1 = document.createElement("div");
document.body.appendChild(element1);
navbarCommand = new WinJS.UI.NavBarCommand(element1, { icon: WinJS.UI.AppBarIcon.home });
LiveUnit.Assert.areEqual(WinJS.UI.AppBarIcon.home, navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual(WinJS.UI.AppBarIcon.home, navbarCommand.icon);
element1.parentNode.removeChild(element1);
var element2 = document.createElement("div");
document.body.appendChild(element2);
navbarCommand = new WinJS.UI.NavBarCommand(element2, { icon: 'home' });
LiveUnit.Assert.areEqual(WinJS.UI.AppBarIcon.home, navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual(WinJS.UI.AppBarIcon.home, navbarCommand.icon);
element2.parentNode.removeChild(element2);
var element3 = document.createElement("div");
document.body.appendChild(element3);
navbarCommand = new WinJS.UI.NavBarCommand(element3, { icon: 'a' });
LiveUnit.Assert.areEqual('a', navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual('a', navbarCommand.icon);
navbarCommand.icon = "a";
LiveUnit.Assert.areEqual('a', navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual('a', navbarCommand.icon);
navbarCommand.icon = "";
LiveUnit.Assert.areEqual('', navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual('', navbarCommand.icon);
navbarCommand.icon = "b";
LiveUnit.Assert.areEqual('b', navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual('b', navbarCommand.icon);
navbarCommand.icon = null;
LiveUnit.Assert.areEqual('', navbarCommand._imageSpan.textContent);
LiveUnit.Assert.areEqual(null, navbarCommand.icon);
element3.parentNode.removeChild(element3);
var element4 = document.createElement("div");
document.body.appendChild(element4);
navbarCommand = new WinJS.UI.NavBarCommand(element4);
LiveUnit.Assert.areEqual(undefined, navbarCommand.icon);
LiveUnit.Assert.areEqual("", navbarCommand._imageSpan.style.backgroundImage);
assertHighContrastAdjust(navbarCommand._imageSpan, "");
element4.parentNode.removeChild(element4);
var element5 = document.createElement("div");
document.body.appendChild(element5);
navbarCommand = new WinJS.UI.NavBarCommand(element5, { icon: 'url("foo.png")' });
LiveUnit.Assert.areEqual('url("foo.png")', navbarCommand.icon);
Helper.Assert.areUrlsEqual('url("foo.png")', navbarCommand._imageSpan.style.backgroundImage);
assertHighContrastAdjust(navbarCommand._imageSpan, "none");
// BUG null leaves the background styles.
//navbarCommand.icon = null;
//LiveUnit.Assert.areEqual(null, navbarCommand.icon);
//LiveUnit.Assert.areEqual("", navbarCommand._imageSpan.style.backgroundImage);
//assertHighContrastAdjust(navbarCommand._imageSpan, "");
navbarCommand.icon = 'url("foo.png")';
LiveUnit.Assert.areEqual('url("foo.png")', navbarCommand.icon);
Helper.Assert.areUrlsEqual('url("foo.png")', navbarCommand._imageSpan.style.backgroundImage);
assertHighContrastAdjust(navbarCommand._imageSpan, "none");
element5.parentNode.removeChild(element5);
};
testLocation = function () {
var navbarCommand;
navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.areEqual(undefined, navbarCommand.location);
var element1 = document.createElement("div");
document.body.appendChild(element1);
navbarCommand = new WinJS.UI.NavBarCommand(element1, { location: 'foo.html' });
LiveUnit.Assert.areEqual('foo.html', navbarCommand.location);
navbarCommand.location = null;
LiveUnit.Assert.areEqual(null, navbarCommand.location);
navbarCommand.location = 'foo.html';
LiveUnit.Assert.areEqual('foo.html', navbarCommand.location);
element1.parentNode.removeChild(element1);
};
testState = function () {
var navbarCommand;
navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.areEqual(undefined, navbarCommand.state);
var element1 = document.createElement("div");
document.body.appendChild(element1);
navbarCommand = new WinJS.UI.NavBarCommand(element1, { state: 'abc' });
LiveUnit.Assert.areEqual('abc', navbarCommand.state);
navbarCommand.state = null;
LiveUnit.Assert.areEqual(null, navbarCommand.state);
navbarCommand.state = 'abc';
LiveUnit.Assert.areEqual('abc', navbarCommand.state);
element1.parentNode.removeChild(element1);
};
testSplitButton = function () {
var navbarCommand;
navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.isFalse(navbarCommand.splitButton);
var element1 = document.createElement("div");
document.body.appendChild(element1);
navbarCommand = new WinJS.UI.NavBarCommand(element1, { splitButton: true });
LiveUnit.Assert.isTrue(navbarCommand.splitButton);
navbarCommand.splitButton = false;
LiveUnit.Assert.isFalse(navbarCommand.splitButton);
navbarCommand.splitButton = true;
LiveUnit.Assert.isTrue(navbarCommand.splitButton);
element1.parentNode.removeChild(element1);
}
testDispose = function () {
var navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"));
LiveUnit.Assert.isFalse(navbarCommand._disposed);
navbarCommand.dispose();
LiveUnit.Assert.isTrue(navbarCommand._disposed);
navbarCommand.dispose();
LiveUnit.Assert.isTrue(navbarCommand._disposed);
};
testInvoke = function () {
try {
var navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"), { location: 'foo.html' });
var navigateCalled = 0;
WinJS.Utilities._require("WinJS/Navigation", function (Navigation) {
Navigation.navigate = function (location, state) {
navigateCalled++;
LiveUnit.Assert.areEqual(navbarCommand.location, location);
LiveUnit.Assert.areEqual(navbarCommand.state, state);
};
});
var invokeCalled = 0;
navbarCommand.addEventListener((WinJS.UI.NavBarCommand)._EventName._invoked, function (ev) {
invokeCalled++;
});
LiveUnit.Assert.areEqual(0, navigateCalled);
LiveUnit.Assert.areEqual(0, invokeCalled);
navbarCommand._buttonEl.click();
LiveUnit.Assert.areEqual(1, navigateCalled);
LiveUnit.Assert.areEqual(1, invokeCalled);
navbarCommand.location = null;
navbarCommand._buttonEl.click();
LiveUnit.Assert.areEqual(1, navigateCalled);
LiveUnit.Assert.areEqual(2, invokeCalled);
navbarCommand.location = "foo.html";
navbarCommand.state = "abc";
navbarCommand._buttonEl.click();
LiveUnit.Assert.areEqual(2, navigateCalled);
LiveUnit.Assert.areEqual(3, invokeCalled);
Helper.keydown(navbarCommand._buttonEl, Key.enter);
LiveUnit.Assert.areEqual(3, navigateCalled);
LiveUnit.Assert.areEqual(4, invokeCalled);
Helper.keydown(navbarCommand._buttonEl, Key.space);
LiveUnit.Assert.areEqual(4, navigateCalled);
LiveUnit.Assert.areEqual(5, invokeCalled);
} finally {
WinJS.Utilities._require("WinJS/Navigation", function (Navigation) {
Navigation.navigate = WinJS.Navigation.navigate;
});
}
};
testSplitInvoke = function () {
var navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"), { splitButton: true });
var splitToggleCalled = 0;
navbarCommand.addEventListener((WinJS.UI.NavBarCommand)._EventName._splitToggle, function (ev) {
splitToggleCalled++;
});
LiveUnit.Assert.areEqual(0, splitToggleCalled);
LiveUnit.Assert.isFalse(navbarCommand.splitOpened);
navbarCommand._splitButtonEl.click();
LiveUnit.Assert.areEqual(1, splitToggleCalled);
LiveUnit.Assert.isTrue(navbarCommand.splitOpened);
Helper.keydown(navbarCommand._splitButtonEl, Key.enter);
LiveUnit.Assert.areEqual(2, splitToggleCalled);
LiveUnit.Assert.isFalse(navbarCommand.splitOpened);
Helper.keydown(navbarCommand._splitButtonEl, Key.space);
LiveUnit.Assert.areEqual(3, splitToggleCalled);
LiveUnit.Assert.isTrue(navbarCommand.splitOpened);
};
testLeftRight = function () {
var navbarCommand = new WinJS.UI.NavBarCommand(document.getElementById("host"), { splitButton: true });
navbarCommand._buttonEl.focus();
LiveUnit.Assert.areEqual(navbarCommand._buttonEl, document.activeElement);
Helper.keydown(navbarCommand._buttonEl, Key.rightArrow);
LiveUnit.Assert.areEqual(navbarCommand._splitButtonEl, document.activeElement);
Helper.keydown(navbarCommand._splitButtonEl, Key.leftArrow);
LiveUnit.Assert.areEqual(navbarCommand._buttonEl, document.activeElement);
navbarCommand.element.style.direction = "rtl";
Helper.keydown(navbarCommand._buttonEl, Key.leftArrow);
LiveUnit.Assert.areEqual(navbarCommand._splitButtonEl, document.activeElement);
Helper.keydown(navbarCommand._splitButtonEl, Key.rightArrow);
LiveUnit.Assert.areEqual(navbarCommand._buttonEl, document.activeElement);
};
testConstructTwice = function () {
var navbarCommandEl = document.getElementById("host");
var navbarCommand = new WinJS.UI.NavBarCommand(navbarCommandEl);
try {
navbarCommand = new WinJS.UI.NavBarCommand(navbarCommandEl);
LiveUnit.Assert.fail("Should throw");
} catch (e) {
LiveUnit.Assert.areEqual("Invalid argument: Controls may only be instantiated one time for each DOM element", e.message);
LiveUnit.Assert.areEqual("WinJS.UI.NavBarCommand.DuplicateConstruction", e.name);
}
};
};
}
LiveUnit.registerTestClass("WinJSTests.NavBarCommandTests");