// 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 lvUtils = Helper.ListView.Utils;
var lvVerify = ListViewVerify;
function createCellSpanningDataSource(size, spanningPeriod, groupSize?) {
// Populate a data array
var data = [];
for (var i = 0; i < size; i++) {
data.push({
groupIndex: (groupSize && groupSize > 0 ? Math.floor(i / groupSize) : 0),
spanning: (i % spanningPeriod == 0 ? 2 : 1),
title: "Title",
content: "Content",
});
}
// Create the datasource
// Simulate the notification methods implemented in Live's data source
var controller = {
directivesForMethod: function (method, args) {
return {
callMethodSynchronously: false,
sendChangeNotifications: false,
countBeforeDelta: 0,
countAfterDelta: 0,
countBeforeOverride: -1,
countAfterOverride: -1,
delay: 0
};
}
};
// Data adapter abilities
var abilities = {
itemsFromIndex: true,
itemsFromKey: true,
getCount: true,
setNotificationHandler: true
};
return Helper.ItemsManager.createTestDataSource(data, controller, abilities); // (objects, controller, abilities)
}
function getGroupKeyFromItem(item) {
return item.data.groupIndex.toString();
}
function getGroupDataFromItem(item) {
return { index: item.data.groupIndex, enableCellSpanning: item.data.groupIndex == 0 };
}
function cellSpanningRenderer(itemPromise) {
return itemPromise.then(function (currentItem) {
var result = document.createElement("div");
//use source data to decide what size to make the
//ListView item
if (currentItem.data.spanning == 1) {
result.style.width = "50px";
result.style.height = "50px";
}
else if (currentItem.data.spanning == 2) {
result.style.width = "100px";
result.style.height = "50px";
}
result.style.overflow = "hidden";
var body = document.createElement("div");
body.style.overflow = "hidden";
// Display title
var title = document.createElement("h4");
title.textContent = currentItem.data.title;
body.appendChild(title);
// Display text
var fulltext = document.createElement("h6");
fulltext.textContent = currentItem.data.content;
body.appendChild(fulltext);
result.appendChild(body);
return result;
});
}
function groupInfo(groupItem) {
return {
enableCellSpanning: !groupItem || groupItem.data.enableCellSpanning,
cellWidth: 50,
cellHeight: 50,
};
}
export class MoSkyIntegrationTests {
/// -----------------------------------------------------------------------------------------------
// Setup and Teardown
/// -----------------------------------------------------------------------------------------------
// Setup function to create HTML page hosting a listview
setUp() {
LiveUnit.LoggingCore.logComment("Create Test Page...");
lvUtils.initializeDOM();
}
// Teardown function
tearDown() {
LiveUnit.LoggingCore.logComment("Test Tear Down...");
lvUtils.resetDOM();
}
}
var generateInitializationCellSpanningEnabled = function (layoutName) {
MoSkyIntegrationTests.prototype["testInitializationCellSpanningEnabled" + layoutName] = function (complete) {
var options = {
layout: { type: WinJS.UI[layoutName], groupInfo: groupInfo },
selectionMode: Expected.SelectionMode.None,
itemDataSource: createCellSpanningDataSource(100, 8),
itemTemplate: cellSpanningRenderer
};
lvUtils.logTestStart("Test initialization of listview with variable sized & custom renderer grid layout.");
var listView = lvUtils.createListViewControl(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, Expected.Direction.ltr, options);
lvVerify.verifyGetOptions(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, options);
Helper.ListView.waitForReady(listView, -1)().
then(function () {
complete();
},
function (e) {
throw Error(e);
});
}
};
generateInitializationCellSpanningEnabled("CellSpanningLayout");
var generateInitializationCellSpanningEnabledGroupWithCellSpanningDisabledGroup = function (layoutName) {
MoSkyIntegrationTests.prototype["testInitializationCellSpanningEnabledGroupWithCellSpanningDisabledGroup" + layoutName] = function (complete) {
var dataSource = WinJS.UI.computeDataSourceGroups(createCellSpanningDataSource(50, 3, 30), getGroupKeyFromItem, getGroupDataFromItem);
var options = {
layout: { type: WinJS.UI[layoutName], groupInfo: groupInfo, groupHeaderPosition: "top" },
selectionMode: Expected.SelectionMode.None,
itemDataSource: dataSource,
groupDataSource: dataSource.groups,
itemTemplate: cellSpanningRenderer
};
lvUtils.logTestStart("Test initialization of listview with variable sized & custom renderer grid layout.");
var listView = lvUtils.createListViewControl(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, Expected.Direction.ltr, options);
lvVerify.verifyGetOptions(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, options);
Helper.ListView.waitForReady(listView, -1)().
then(function () {
complete();
}, function (e) {
throw Error(e);
});
};
};
generateInitializationCellSpanningEnabledGroupWithCellSpanningDisabledGroup("CellSpanningLayout");
var generateReplaceDSCellSpanningEnabled = function (layoutName) {
MoSkyIntegrationTests.prototype["testReplaceDSCellSpanningEnabled" + layoutName] = function (complete) {
var options = {
layout: { type: WinJS.UI[layoutName], groupInfo: groupInfo },
selectionMode: Expected.SelectionMode.None,
itemDataSource: createCellSpanningDataSource(100, 8),
itemTemplate: cellSpanningRenderer
};
lvUtils.logTestStart("Test initialization of listview with variable sized & custom renderer grid layout.");
var listView = lvUtils.createListViewControl(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, Expected.Direction.ltr, options);
lvVerify.verifyGetOptions(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, options);
Helper.ListView.waitForReady(listView, -1)().
then(function () {
listView.itemDataSource = createCellSpanningDataSource(200, 9);
}).
then(Helper.ListView.waitForReady(listView, -1)).
then(function () {
complete();
},
function (e) {
throw Error(e);
});
};
};
generateReplaceDSCellSpanningEnabled("CellSpanningLayout");
var generateInvalidateAllCellSpanningEnabled = function (layoutName) {
MoSkyIntegrationTests.prototype["testInvalidateAllCellSpanningEnabled" + layoutName] = function (complete) {
var options = {
layout: { type: WinJS.UI[layoutName], groupInfo: groupInfo },
selectionMode: Expected.SelectionMode.None,
itemDataSource: createCellSpanningDataSource(100, 8),
itemTemplate: cellSpanningRenderer
};
lvUtils.logTestStart("Test initialization of listview with variable sized & custom renderer grid layout.");
var listView = lvUtils.createListViewControl(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, Expected.Direction.ltr, options);
lvVerify.verifyGetOptions(DEF_LISTVIEWCONTAINER_ID, Expected.Control.Grid, options);
Helper.ListView.waitForReady(listView, -1)().
then(function () {
for (var i = 0; i < 100; i++) {
listView.itemDataSource.testDataAdapter.insertAtIndex({
groupIndex: 1,
spanning: 2,
title: "Title",
content: "Content",
}, 0);
}
return listView.itemDataSource.invalidateAll();
}).
then(Helper.ListView.waitForReady(listView, -1)).
then(function () {
complete();
},
function (e) {
throw Error(e);
});
};
};
generateInvalidateAllCellSpanningEnabled("CellSpanningLayout");
}
LiveUnit.registerTestClass("WinJSTests.MoSkyIntegrationTests");