mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00
ListView memory leak tests
This commit is contained in:
@ -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();
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user