// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. // // /// module CorsicaTests { var _LightDismissService = Helper.require("WinJS/_LightDismissService"); export class SettingsFlyoutTests { "use strict"; tearDown() { LiveUnit.LoggingCore.logComment("In tearDown"); OverlayHelpers.disposeAndRemove(document.querySelector(".win-settingsflyout")); } // Test settings flyout Instantiation testSettingsFlyoutInstantiation = function () { // Get the settings flyout element from the DOM LiveUnit.LoggingCore.logComment("Attempt to Instantiate the settings flyout element"); var flyoutElement = document.createElement('div'); document.body.appendChild(flyoutElement); var settingsFlyout = new WinJS.UI.SettingsFlyout(flyoutElement); LiveUnit.LoggingCore.logComment("settings flyout has been instantiated."); LiveUnit.Assert.isNotNull(settingsFlyout, "settings flyout element should not be null when instantiated."); function verifyFunction(functionName) { LiveUnit.LoggingCore.logComment("Verifying that function " + functionName + " exists"); if (settingsFlyout[functionName] === undefined) { LiveUnit.Assert.fail(functionName + " missing from settings flyout"); } LiveUnit.Assert.isNotNull(settingsFlyout[functionName]); LiveUnit.Assert.isTrue(typeof (settingsFlyout[functionName]) === "function", functionName + " exists on flyout, but it isn't a function"); } function verifyProperty(propertyName) { LiveUnit.LoggingCore.logComment("Verifying that property " + propertyName + " exists"); for (var name in settingsFlyout) { if (name == propertyName) { return; } } LiveUnit.Assert.fail(propertyName + " missing from settings flyout"); } verifyFunction("show"); verifyFunction("hide"); verifyProperty("width"); document.body.removeChild(flyoutElement); } // Test settings flyout Instantiation with null element testSettingsFlyoutNullInstantiation = function () { LiveUnit.LoggingCore.logComment("Attempt to Instantiate the settings flyout with null element"); var settingsFlyout = new WinJS.UI.SettingsFlyout(null); LiveUnit.Assert.isNotNull(settingsFlyout, "settings flyout instantiation was null when sent a null settings flyout element."); } // Test multiple instantiation of the same settings flyout DOM element testSettingsFlyoutMultipleInstantiation() { SettingsFlyoutTests.prototype.testSettingsFlyoutMultipleInstantiation["LiveUnit.ExpectedException"] = { message: "Invalid argument: Controls may only be instantiated one time for each DOM element" }; // Get the settings flyout element from the DOM LiveUnit.LoggingCore.logComment("Attempt to instantiate the settings flyout element"); var settingsFlyoutElement = document.createElement('div'); document.body.appendChild(settingsFlyoutElement); var settingsFlyout = new WinJS.UI.SettingsFlyout(settingsFlyoutElement); LiveUnit.LoggingCore.logComment("settings flyout has been instantiated."); LiveUnit.Assert.isNotNull(settingsFlyout, "settings flyout element should not be null when instantiated."); new WinJS.UI.Flyout(settingsFlyoutElement); document.body.removeChild(settingsFlyoutElement); } testSettingsFlyoutDispose = function () { var sf = new WinJS.UI.SettingsFlyout(); LiveUnit.Assert.isTrue(sf.dispose); LiveUnit.Assert.isFalse(sf._disposed); // Double dispose sentinel var sentinel:any = document.createElement("div"); sentinel.disposed = false; WinJS.Utilities.addClass(sentinel, "win-disposable"); sf.element.appendChild(sentinel); sentinel.dispose = function () { if (sentinel.disposed) { LiveUnit.Assert.fail("Unexpected double dispose occured."); } sentinel.disposed = true; }; sf.dispose(); LiveUnit.Assert.isTrue(sentinel.disposed); LiveUnit.Assert.isTrue(sf._disposed); sf.dispose(); } //testSettingsFlyoutDispose["Description"] = "Unit test for dispose requirements."; testDisposeRemovesAppBarClickEatingDiv = function (complete) { var flyout = new WinJS.UI.SettingsFlyout(); document.body.appendChild(flyout.element); flyout.show(); flyout.addEventListener("aftershow", function () { var clickEater = document.querySelector("." + _LightDismissService._ClassNames._clickEater); LiveUnit.Assert.isTrue(clickEater); LiveUnit.Assert.areNotEqual("none", clickEater.style.display); flyout.dispose(); LiveUnit.Assert.isNull(document.querySelector("." + _LightDismissService._ClassNames._clickEater)); document.body.removeChild(flyout.element); complete(); }); }; testBackClickEventTriggersSettingsLightDismiss = function (complete) { // Verifies that a shown SettingsFlyout will light dismiss due to backclick. // Simulate function simulateBackClick() { var handled = _LightDismissService._onBackClick(); LiveUnit.Assert.isTrue(handled, "SettingsFlyout should have handled the 'backclick' event"); LiveUnit.Assert.isTrue(settingsFlyout.hidden, "SettingsFlyout should be hidden after light dismiss"); cleanup(); }; // Cleanup function cleanup() { OverlayHelpers.disposeAndRemove(settingsElement); complete(); } // Setup var settingsElement = document.createElement("div"); document.body.appendChild(settingsElement); var settingsFlyout = new WinJS.UI.SettingsFlyout(settingsElement); settingsFlyout.addEventListener("aftershow", simulateBackClick, false); settingsFlyout.show(); }; } if (WinJS.Utilities.hasWinRT) { // Test settings flyout loading from fragment SettingsFlyoutTests.prototype['testSettingsFlyoutWithFragment'] = function (complete) { // Get the settings flyout element from the DOM LiveUnit.LoggingCore.logComment("Attempt to to load the settings flyout fragment"); WinJS.UI.SettingsFlyout.showSettings("CustomSettings", "SettingsFlyoutFragment.html"); // Yield so the flyout can be shown WinJS.Promise.timeout(). then(function () { var settingsFlyoutElement = document.getElementById("CustomSettings"); LiveUnit.Assert.isNotNull(settingsFlyoutElement, "loaded settings flyout element from fragment should not be null."); var settingsControl = settingsFlyoutElement.winControl; LiveUnit.Assert.isNotNull(settingsControl, "settings flyout control is invalid."); // Verify the type of the flyout. Wide flyout width = 645px var expectedFlyoutWidth = 645; LiveUnit.Assert.areEqual(expectedFlyoutWidth, settingsFlyoutElement.clientWidth, "Not a wide flyout"); // unload the fragment and destruct the control settingsControl._dismiss(); // Yield so the flyout can be dismissed return WinJS.Promise.timeout(2000); }). then(function () { var element = document.getElementById("CustomSettings"); LiveUnit.Assert.isNull(element, "failed to unload the settings flyout fragment"); }). done(complete); } SettingsFlyoutTests.prototype['testSettingswithCommandProperty'] = function (complete) { // Get the settings flyout element from the DOM LiveUnit.LoggingCore.logComment("Attempt to to load the settings flyout fragment"); WinJS.UI.SettingsFlyout.showSettings("CommandA", "SettingsFlyoutFragment.html"); // Yield so the flyout can be shown WinJS.Promise.timeout(). then(function () { var settingsFlyoutElement = document.querySelector(".win-settingsflyout"); LiveUnit.Assert.isNotNull(settingsFlyoutElement, "loaded settings flyout element from fragment should not be null."); var settingsControl = settingsFlyoutElement.winControl; LiveUnit.Assert.isNotNull(settingsControl, "settings flyout control is invalid."); LiveUnit.Assert.isTrue(settingsControl.settingsCommandId === "CommandA", "Expected right value in settingsCommandId"); // Verify the type of the flyout. Wide flyout width = 345px var expectedFlyoutWidth = 345; LiveUnit.Assert.areEqual(expectedFlyoutWidth, settingsFlyoutElement.clientWidth, "Not a narrow flyout"); // unload the fragment and destruct the control settingsControl._dismiss(); // Yield so the flyout can dismissed return WinJS.Promise.timeout(2000); }). then(function () { var settingsFlyoutElement = document.getElementById("CommandA"); LiveUnit.Assert.isTrue(!settingsFlyoutElement, "failed to unload the settings flyout fragment"); }). done(complete); } } } // register the object as a test class by passing in the name LiveUnit.registerTestClass("CorsicaTests.SettingsFlyoutTests");