ListView memory leak tests

This commit is contained in:
vakrilov
2015-05-11 18:57:42 +03:00
parent fd9ff189ba
commit 0e8ea034c7
2 changed files with 54 additions and 26 deletions

View File

@ -11,6 +11,7 @@ import styling = require("ui/styling");
var DELTA = 0.1; var DELTA = 0.1;
export var ASYNC = 0.2; export var ASYNC = 0.2;
export var MEMORY_ASYNC = 2;
export function do_PageTest(test: (views: Array<view.View>) => void, content: view.View, secondView: view.View, thirdView: view.View) { export function do_PageTest(test: (views: Array<view.View>) => void, content: view.View, secondView: view.View, thirdView: view.View) {
var newPage: page.Page; var newPage: page.Page;
@ -33,7 +34,7 @@ export function do_PageTest(test: (views: Array<view.View>) => void, content: vi
export function do_PageTest_WithButton(test: (views: Array<view.View>) => void) { export function do_PageTest_WithButton(test: (views: Array<view.View>) => void) {
var newPage: page.Page; var newPage: page.Page;
var btn: button.Button; var btn: button.Button;
var pageFactory = function(): page.Page { var pageFactory = function (): page.Page {
newPage = new page.Page(); newPage = new page.Page();
btn = new button.Button(); btn = new button.Button();
newPage.content = btn; newPage.content = btn;
@ -76,7 +77,7 @@ export function do_PageTest_WithStackLayout_AndButton(test: (views: Array<view.V
export function do_PageTest_WithStackLayout_AndButton_NavigatedBack(test: (views: Array<view.View>) => void, export function do_PageTest_WithStackLayout_AndButton_NavigatedBack(test: (views: Array<view.View>) => void,
assert: (views: Array<view.View>) => void) { assert: (views: Array<view.View>) => void) {
var newPage: page.Page; var newPage: page.Page;
var stackLayout; var stackLayout;
var btn; var btn;
@ -188,7 +189,7 @@ export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: (
try { try {
navigate(pageFactory); navigate(pageFactory);
TKUnit.waitUntilReady(() => { return testFinished; }); TKUnit.waitUntilReady(() => { return testFinished; }, MEMORY_ASYNC);
} }
finally { finally {
goBack(); goBack();

View File

@ -430,28 +430,28 @@ export function test_loadMoreItems_not_raised_when_showing_many_items() {
} }
export function test_usingAppLevelConvertersInListViewItems() { export function test_usingAppLevelConvertersInListViewItems() {
var listView = new listViewModule.ListView(); var listView = new listViewModule.ListView();
var dateConverter = function (value, format) { var dateConverter = function (value, format) {
var result = format; var result = format;
var day = value.getDate(); var day = value.getDate();
result = result.replace("DD", month < 10 ? "0" + day : day); result = result.replace("DD", month < 10 ? "0" + day : day);
var month = value.getMonth() + 1; var month = value.getMonth() + 1;
result = result.replace("MM", month < 10 ? "0" + month : month); result = result.replace("MM", month < 10 ? "0" + month : month);
result = result.replace("YYYY", value.getFullYear()); result = result.replace("YYYY", value.getFullYear());
return result; return result;
}; };
app.resources["dateConverter"] = dateConverter; app.resources["dateConverter"] = dateConverter;
var data = new observableArray.ObservableArray(); var data = new observableArray.ObservableArray();
data.push({date: new Date()}); data.push({ date: new Date() });
function testAction(views: Array<viewModule.View>) { function testAction(views: Array<viewModule.View>) {
listView.itemTemplate = "<Label id=\"testLabel\" text=\"{{ date, date | dateConverter('DD.MM.YYYY') }}\" />"; listView.itemTemplate = "<Label id=\"testLabel\" text=\"{{ date, date | dateConverter('DD.MM.YYYY') }}\" />";
listView.items = data; listView.items = data;
TKUnit.wait(ASYNC); TKUnit.wait(ASYNC);
var nativeElementText = getTextFromNativeElementAt(listView, 0); var nativeElementText = getTextFromNativeElementAt(listView, 0);
@ -501,6 +501,33 @@ export function test_BindingListViewToASimpleArrayWithExpression() {
helper.buildUIAndRunTest(listView, testAction); helper.buildUIAndRunTest(listView, testAction);
} }
export function test_no_memory_leak_when_items_is_regular_array() {
var createFunc = function (): listViewModule.ListView {
var listView = new listViewModule.ListView();
listView.items = FEW_ITEMS;
return listView;
};
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
});
}
export function test_no_memory_leak_when_items_is_observable_array() {
// Keep the reference to the observable array to test the weakEventListener
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);
var createFunc = function (): listViewModule.ListView {
var listView = new listViewModule.ListView();
listView.items = colors;
return listView;
};
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
});
}
function loadViewWithItemNumber(args: listViewModule.ItemEventData) { function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
if (!args.view) { if (!args.view) {
args.view = new labelModule.Label(); args.view = new labelModule.Label();
@ -509,16 +536,16 @@ function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
} }
function getTextFromNativeElementAt(listView: listViewModule.ListView, index: number): any { function getTextFromNativeElementAt(listView: listViewModule.ListView, index: number): any {
if (listView.android) { if (listView.android) {
var nativeElement = listView.android.getChildAt(index); var nativeElement = listView.android.getChildAt(index);
if (nativeElement instanceof android.view.ViewGroup) { if (nativeElement instanceof android.view.ViewGroup) {
return (<android.widget.TextView>(<any>nativeElement.getChildAt(0))).getText(); return (<android.widget.TextView>((<any>nativeElement).getChildAt(0))).getText();
} }
return (<android.widget.TextView>nativeElement).getText(); return (<android.widget.TextView>nativeElement).getText();
} }
else if (listView.ios) { else if (listView.ios) {
return listView.ios.visibleCells()[index].contentView.subviews[0].text; return listView.ios.visibleCells()[index].contentView.subviews[0].text;
} }
} }
function getNativeViewCount(listView: listViewModule.ListView): number { function getNativeViewCount(listView: listViewModule.ListView): number {