mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-18 05:18:39 +08:00
Memory leak tests back to schedule.
This commit is contained in:
@ -81,10 +81,10 @@ export var testNativeBackgroundColorFromLocal = function () {
|
|||||||
helper.buildUIAndRunTest(_createButtonFunc(), _testNativeBackgroundColorFromLocal);
|
helper.buildUIAndRunTest(_createButtonFunc(), _testNativeBackgroundColorFromLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
export var testMemoryLeak = function () {
|
export var testMemoryLeak = function (done) {
|
||||||
helper.buildUIWithWeakRefAndInteract(_createButtonFunc, function (button) {
|
helper.buildUIWithWeakRefAndInteract(_createButtonFunc, function (button) {
|
||||||
buttonTestsNative.performNativeClick(button);
|
buttonTestsNative.performNativeClick(button);
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
|
|
||||||
var _createButtonFunc = function (): buttonModule.Button {
|
var _createButtonFunc = function (): buttonModule.Button {
|
||||||
|
@ -155,7 +155,7 @@ export function navigateToModuleAndRunTest(moduleName, context, testFunction) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: () => T, interactWithViewFunc?: (view: T) => void) {
|
export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: () => T, interactWithViewFunc?: (view: T) => void, done?) {
|
||||||
var newPage: page.Page;
|
var newPage: page.Page;
|
||||||
var testFinished = false;
|
var testFinished = false;
|
||||||
var pageFactory = function (): page.Page {
|
var pageFactory = function (): page.Page {
|
||||||
@ -167,7 +167,7 @@ export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: (
|
|||||||
newPage.on("loaded", () => {
|
newPage.on("loaded", () => {
|
||||||
loaded = true;
|
loaded = true;
|
||||||
var weakRef = new WeakRef(createFunc());
|
var weakRef = new WeakRef(createFunc());
|
||||||
|
try {
|
||||||
sp.addChild(weakRef.get());
|
sp.addChild(weakRef.get());
|
||||||
|
|
||||||
if (interactWithViewFunc) {
|
if (interactWithViewFunc) {
|
||||||
@ -182,8 +182,13 @@ export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: (
|
|||||||
}
|
}
|
||||||
utils.GC();
|
utils.GC();
|
||||||
|
|
||||||
|
TKUnit.waitUntilReady(() => { return weakRef.get() ? !(weakRef.get().isLoaded) : true; }, MEMORY_ASYNC);
|
||||||
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
||||||
testFinished = true;
|
testFinished = true;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return newPage;
|
return newPage;
|
||||||
@ -195,6 +200,7 @@ export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: (
|
|||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
goBack();
|
goBack();
|
||||||
|
done(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -633,12 +633,7 @@ export function test_ConverterIsCalledJustOnce_onAddingItemsToListView() {
|
|||||||
helper.buildUIAndRunTest(listView, testAction);
|
helper.buildUIAndRunTest(listView, testAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_no_memory_leak_when_items_is_regular_array() {
|
export function test_no_memory_leak_when_items_is_regular_array(done) {
|
||||||
if (utils.ios) {
|
|
||||||
if (testRunner.isRunningOnEmulator() || utils.ios.MajorVersion > 8) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var createFunc = function (): listViewModule.ListView {
|
var createFunc = function (): listViewModule.ListView {
|
||||||
var listView = new listViewModule.ListView();
|
var listView = new listViewModule.ListView();
|
||||||
listView.items = FEW_ITEMS;
|
listView.items = FEW_ITEMS;
|
||||||
@ -647,15 +642,10 @@ export function test_no_memory_leak_when_items_is_regular_array() {
|
|||||||
|
|
||||||
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
|
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
|
||||||
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
|
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_no_memory_leak_when_items_is_observable_array() {
|
export function test_no_memory_leak_when_items_is_observable_array(done) {
|
||||||
if (utils.ios) {
|
|
||||||
if (testRunner.isRunningOnEmulator() || utils.ios.MajorVersion > 8) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Keep the reference to the observable array to test the weakEventListener
|
// Keep the reference to the observable array to test the weakEventListener
|
||||||
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);
|
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);
|
||||||
|
|
||||||
@ -667,7 +657,7 @@ export function test_no_memory_leak_when_items_is_observable_array() {
|
|||||||
|
|
||||||
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
|
helper.buildUIWithWeakRefAndInteract(createFunc, (list) => {
|
||||||
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
|
TKUnit.assert(list.isLoaded, "ListView should be loaded here");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
|
function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
|
||||||
|
@ -456,7 +456,7 @@ export function test_ChildrenAreNotCreatedUntilTheRepeaterIsLoaded() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
export function test_no_memory_leak_when_items_is_regular_array() {
|
export function test_no_memory_leak_when_items_is_regular_array(done) {
|
||||||
var createFunc = function (): repeaterModule.Repeater {
|
var createFunc = function (): repeaterModule.Repeater {
|
||||||
var repeater = new repeaterModule.Repeater();
|
var repeater = new repeaterModule.Repeater();
|
||||||
repeater.items = FEW_ITEMS;
|
repeater.items = FEW_ITEMS;
|
||||||
@ -465,10 +465,10 @@ export function test_no_memory_leak_when_items_is_regular_array() {
|
|||||||
|
|
||||||
helper.buildUIWithWeakRefAndInteract(createFunc,(list) => {
|
helper.buildUIWithWeakRefAndInteract(createFunc,(list) => {
|
||||||
TKUnit.assert(list.isLoaded, "Repeater should be loaded here");
|
TKUnit.assert(list.isLoaded, "Repeater should be loaded here");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_no_memory_leak_when_items_is_observable_array() {
|
export function test_no_memory_leak_when_items_is_observable_array(done) {
|
||||||
// Keep the reference to the observable array to test the weakEventListener
|
// Keep the reference to the observable array to test the weakEventListener
|
||||||
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);
|
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ export function test_no_memory_leak_when_items_is_observable_array() {
|
|||||||
|
|
||||||
helper.buildUIWithWeakRefAndInteract(createFunc,(list) => {
|
helper.buildUIWithWeakRefAndInteract(createFunc,(list) => {
|
||||||
TKUnit.assert(list.isLoaded, "Repeater should be loaded here");
|
TKUnit.assert(list.isLoaded, "Repeater should be loaded here");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
function getChildrenCount(repeater: repeaterModule.Repeater): number {
|
function getChildrenCount(repeater: repeaterModule.Repeater): number {
|
||||||
|
@ -6,7 +6,6 @@ import pagesModule = require("ui/page");
|
|||||||
import textFieldTestsNative = require("./text-field-tests-native");
|
import textFieldTestsNative = require("./text-field-tests-native");
|
||||||
import colorModule = require("color");
|
import colorModule = require("color");
|
||||||
import enums = require("ui/enums");
|
import enums = require("ui/enums");
|
||||||
import utils = require("utils/utils");
|
|
||||||
|
|
||||||
// <snippet module="ui/text-field" title="TextField">
|
// <snippet module="ui/text-field" title="TextField">
|
||||||
// # TextField
|
// # TextField
|
||||||
@ -428,13 +427,8 @@ export var testNativeTextAlignmentFromLocal = function () {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export var testMemoryLeak = function () {
|
export var testMemoryLeak = function (done) {
|
||||||
if (utils.ios) {
|
|
||||||
if (testRunner.isRunningOnEmulator() || utils.ios.MajorVersion > 8) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
helper.buildUIWithWeakRefAndInteract(_createTextFieldFunc, function (textField) {
|
helper.buildUIWithWeakRefAndInteract(_createTextFieldFunc, function (textField) {
|
||||||
textFieldTestsNative.typeTextNatively(textField, "Hello, world!");
|
textFieldTestsNative.typeTextNatively(textField, "Hello, world!");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
@ -6,7 +6,6 @@ import pagesModule = require("ui/page");
|
|||||||
import textViewTestsNative = require("./text-view-tests-native");
|
import textViewTestsNative = require("./text-view-tests-native");
|
||||||
import colorModule = require("color");
|
import colorModule = require("color");
|
||||||
import enums = require("ui/enums");
|
import enums = require("ui/enums");
|
||||||
import utils = require("utils/utils");
|
|
||||||
|
|
||||||
// <snippet module="ui/text-view" title="TextView">
|
// <snippet module="ui/text-view" title="TextView">
|
||||||
// # TextView
|
// # TextView
|
||||||
@ -469,13 +468,8 @@ export var testNativeTextAlignmentFromLocal = function () {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export var testMemoryLeak = function () {
|
export var testMemoryLeak = function (done) {
|
||||||
if (utils.ios) {
|
|
||||||
if (testRunner.isRunningOnEmulator() || utils.ios.MajorVersion > 8) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
helper.buildUIWithWeakRefAndInteract(_createTextViewFunc, function (textView) {
|
helper.buildUIWithWeakRefAndInteract(_createTextViewFunc, function (textView) {
|
||||||
textViewTestsNative.typeTextNatively(textView, "Hello, world!");
|
textViewTestsNative.typeTextNatively(textView, "Hello, world!");
|
||||||
});
|
}, done);
|
||||||
}
|
}
|
||||||
|
@ -135,13 +135,13 @@ export function test_handlerIsDetached_WhenAllListenersAreRemoved() {
|
|||||||
TKUnit.assert(!source.hasListeners(observable.Observable.propertyChangeEvent), "All events should be detached");
|
TKUnit.assert(!source.hasListeners(observable.Observable.propertyChangeEvent), "All events should be detached");
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_autoDetachingOfDeadReferences() {
|
export function test_autoDetachingOfDeadReferences(done) {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
|
|
||||||
for (var i = 0; i < 100; i++) {
|
for (var i = 0; i < 100; i++) {
|
||||||
addListenerWithSource(source);
|
addListenerWithSource(source);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
helper.forceGC();
|
helper.forceGC();
|
||||||
|
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
@ -149,7 +149,14 @@ export function test_autoDetachingOfDeadReferences() {
|
|||||||
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
||||||
weakEvents.removeWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target)
|
weakEvents.removeWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target)
|
||||||
|
|
||||||
TKUnit.assert(!source.hasListeners(observable.Observable.propertyChangeEvent), "All events should be detached");
|
TKUnit.waitUntilReady(() => { return !source.hasListeners(observable.Observable.propertyChangeEvent); });
|
||||||
|
var testPass = (<any>source)._observers[observable.Observable.propertyChangeEvent] ? (<any>source)._observers[observable.Observable.propertyChangeEvent].length <= 1 : true;
|
||||||
|
TKUnit.assert(testPass, "All events should be detached");
|
||||||
|
done(null);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addListenerWithSource(source: observable.Observable) {
|
function addListenerWithSource(source: observable.Observable) {
|
||||||
|
@ -169,6 +169,7 @@ export module ios {
|
|||||||
|
|
||||||
function registerCustomFonts() {
|
function registerCustomFonts() {
|
||||||
var fontsFolderPath = fs.path.join(__dirname.substring(0, __dirname.indexOf("/tns_modules")), "fonts");
|
var fontsFolderPath = fs.path.join(__dirname.substring(0, __dirname.indexOf("/tns_modules")), "fonts");
|
||||||
|
if (fs.Folder.exists(fontsFolderPath)) {
|
||||||
var fontsFolder = fs.Folder.fromPath(fontsFolderPath);
|
var fontsFolder = fs.Folder.fromPath(fontsFolderPath);
|
||||||
var onEachEntityFunc = function (fileEntity: fs.FileSystemEntity): boolean {
|
var onEachEntityFunc = function (fileEntity: fs.FileSystemEntity): boolean {
|
||||||
if (fs.Folder.exists(fs.path.join(fontsFolderPath, fileEntity.name))) {
|
if (fs.Folder.exists(fs.path.join(fontsFolderPath, fileEntity.name))) {
|
||||||
@ -179,6 +180,7 @@ function registerCustomFonts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fontsFolder.eachEntity(onEachEntityFunc);
|
fontsFolder.eachEntity(onEachEntityFunc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerCustomFonts();
|
registerCustomFonts();
|
Reference in New Issue
Block a user