// 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 utils = repeaterUtils, repeaterClass = "win-repeater", repeaterChildClass = "repeater-child"; function createData() { var list = new WinJS.Binding.List(), days = repeaterUtils.createWeekdaysList(); days.forEach(function (day) { list.push({ title: day, moments: repeaterUtils.getListOfMoments(4) }); }); return list; } export class RepeaterIntegrationTests { setUp() { LiveUnit.LoggingCore.logComment("In setup"); var newNode = document.createElement("div"); newNode.id = "RepeaterTests"; newNode.style.width = "400px"; document.body.appendChild(newNode); } tearDown() { LiveUnit.LoggingCore.logComment("In tearDown"); var element = document.getElementById("RepeaterTests"); if (element) { WinJS.Utilities.disposeSubTree(element); document.body.removeChild(element); } } testTableRendererInMarkUp = function (complete) { var data = createData(), root = document.getElementById("RepeaterTests"); window['data'] = data; var html = "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "
This table is generated using WinJS Repeater
Days
"; root.innerHTML = html; WinJS.UI.processAll(). then(function () { // Verify repeater created var repeater = document.querySelector(".win-repeater").winControl; var numberOfRows = repeater.element.querySelectorAll(".row").length; LiveUnit.Assert.areEqual(data.length, numberOfRows, "Unexpected number of rows in the table"); delete window['data']; complete(); }); }; testTableRenderer = function (complete) { var data = createData(), root = document.getElementById("RepeaterTests"), table = document.createElement("table"); table.style.backgroundColor = "green"; root.appendChild(table); // Add table head var thead = document.createElement("thead"), theadRow = document.createElement("tr"), th = document.createElement("th"); th.innerHTML = "Days"; theadRow.appendChild(th); thead.appendChild(theadRow); function tableRenderer(item) { var trow = document.createElement("tr"), td = document.createElement("td"); td.innerHTML = item.title; trow.className = "row"; trow.appendChild(td); return trow; } // Add table body var tbody = document.createElement("tbody"); table.appendChild(tbody) LiveUnit.LoggingCore.logComment("Creating a repeater control"); var repeater = new WinJS.UI.Repeater(tbody, { data: data, template: tableRenderer }); LiveUnit.LoggingCore.logComment("Repeater control created"); // Verify var numberOfRows = tbody.querySelectorAll(".row").length; LiveUnit.Assert.areEqual(data.length, numberOfRows, "Unexpected number of rows in the table"); complete(); }; testSelectRenderer = function (complete) { var data = createData(), root = document.getElementById("RepeaterTests"), select = document.createElement("select"); root.appendChild(select); function selectRenderer(item) { var option = document.createElement("option"); option.className = "option"; option.textContent = item.title; return option; } LiveUnit.LoggingCore.logComment("Creating a repeater control"); var repeater = new WinJS.UI.Repeater(select, { data: data, template: selectRenderer }); LiveUnit.LoggingCore.logComment("Repeater control created"); // Verify var numberOfOptions = select.querySelectorAll(".option").length; LiveUnit.Assert.areEqual(data.length, numberOfOptions, "Unexpected number of options"); complete(); }; } (function () { function generateListTest(root) { return function (complete) { var data = createData(), elem = document.getElementById("RepeaterTests"); elem.appendChild(root); function listItemRenderer(item) { var listItem = document.createElement("li"); listItem.className = repeaterChildClass; listItem.textContent = item.title; return listItem; } LiveUnit.LoggingCore.logComment("Creating a repeater control"); var repeater = new WinJS.UI.Repeater(root, { data: data, template: listItemRenderer }); LiveUnit.LoggingCore.logComment("Repeater control created"); // Verify var numberOfChildren = elem.querySelectorAll(repeaterChildClass).length; complete(); }; } RepeaterIntegrationTests.prototype["test" + "UnorderedList" + "Renderer"] = generateListTest(document.createElement("ul")); RepeaterIntegrationTests.prototype["test" + "OrderedList" + "Renderer"] = generateListTest(document.createElement("ol")); })(); (function () { function generateControlTest(renderer) { return function (complete) { var data = createData(), elem = document.getElementById("RepeaterTests"); LiveUnit.LoggingCore.logComment("Creating a repeater control"); var repeater = new WinJS.UI.Repeater(elem, { data: data, template: renderer }); LiveUnit.LoggingCore.logComment("Repeater control created"); // Verify var numberOfChildren = elem.querySelectorAll(repeaterChildClass).length; complete(); }; } function linkRenderer(item) { var aTag = document.createElement("a"), link = "http://www.bing.com"; aTag.className = repeaterChildClass; aTag.href = link; aTag.textContent = item.title; return aTag; } function buttonRenderer(item) { var button = document.createElement("button"); button.className = repeaterChildClass; button.textContent = item.title; return button; } function progressRenderer(item) { var progress = document.createElement("progress"); progress.className = repeaterChildClass; progress.max = 100; progress.value = 30; return progress; } function inputRangeRenderer(item) { var input: any = document.createElement("input"); input.className = repeaterChildClass; input.type = "range"; input.min = 0; input.max = 100; input.step = 10; input.value = 50; return input; } function toggleSwitchRenderer(item) { var div = document.createElement("div"); div.className = repeaterChildClass; var toggle = new WinJS.UI.ToggleSwitch(div); toggle.labelOff = "Off"; toggle.labelOn = "On"; return div; } RepeaterIntegrationTests.prototype["test" + "HyperLink" + "Renderer"] = generateControlTest(linkRenderer); RepeaterIntegrationTests.prototype["test" + "Button" + "Renderer"] = generateControlTest(buttonRenderer); RepeaterIntegrationTests.prototype["test" + "Progress" + "Renderer"] = generateControlTest(progressRenderer); RepeaterIntegrationTests.prototype["test" + "Range" + "Renderer"] = generateControlTest(inputRangeRenderer); if (WinJS.UI.Rating) { RepeaterIntegrationTests.prototype["test" + "Ratings" + "Renderer"] = generateControlTest(utils.winJSCtrlRenderer); } if (WinJS.UI.ToggleSwitch) { RepeaterIntegrationTests.prototype["test" + "ToggleSwitch" + "Renderer"] = generateControlTest(toggleSwitchRenderer); } })(); } // register the object as a test class by passing in the name LiveUnit.registerTestClass("WinJSTests.RepeaterIntegrationTests");