mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 03:31:45 +08:00
Tests - fixed
This commit is contained in:
@ -175,7 +175,12 @@ export function buildUIWithWeakRefAndInteract<T extends view.View>(createFunc: (
|
|||||||
}
|
}
|
||||||
|
|
||||||
sp.removeChild(weakRef.get());
|
sp.removeChild(weakRef.get());
|
||||||
forceGC();
|
if (newPage.ios) {
|
||||||
|
// Could cause GC on the next call.
|
||||||
|
// NOTE: Don't replace this with forceGC();
|
||||||
|
new ArrayBuffer(4 * 1024 * 1024);
|
||||||
|
}
|
||||||
|
utils.GC();
|
||||||
|
|
||||||
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
TKUnit.assert(!weakRef.get(), weakRef.get() + " leaked!");
|
||||||
testFinished = true;
|
testFinished = true;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import TKUnit = require("./TKUnit");
|
import TKUnit = require("./TKUnit");
|
||||||
import types = require("utils/types");
|
|
||||||
import observable = require("data/observable");
|
import observable = require("data/observable");
|
||||||
import weakEvents = require("ui/core/weak-event-listener");
|
import weakEvents = require("ui/core/weak-event-listener");
|
||||||
import helper = require("./ui/helper");
|
import helper = require("./ui/helper");
|
||||||
@ -53,6 +52,22 @@ export function test_addWeakEventListener_listensForEvent() {
|
|||||||
TKUnit.assertEqual(target.counter, 1, "Handler not called.");
|
TKUnit.assertEqual(target.counter, 1, "Handler not called.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function test_addWeakEventListener_listensForEven_multipleTargetst() {
|
||||||
|
var source = new observable.Observable();
|
||||||
|
var target1 = new Target();
|
||||||
|
var target2 = new Target();
|
||||||
|
|
||||||
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target1.onEvent, target1);
|
||||||
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target2.onEvent, target2);
|
||||||
|
|
||||||
|
helper.forceGC();
|
||||||
|
|
||||||
|
source.set("testProp", "some value");
|
||||||
|
|
||||||
|
TKUnit.assertEqual(target1.counter, 1, "Handler not called.");
|
||||||
|
TKUnit.assertEqual(target2.counter, 1, "Handler not called.");
|
||||||
|
}
|
||||||
|
|
||||||
export function test_removeWeakEventListener_StopsListeningForEvet() {
|
export function test_removeWeakEventListener_StopsListeningForEvet() {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
@ -66,7 +81,7 @@ export function test_removeWeakEventListener_StopsListeningForEvet() {
|
|||||||
|
|
||||||
export function test_handlerIsCalled_WithTargetAsThis() {
|
export function test_handlerIsCalled_WithTargetAsThis() {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Object;
|
var target = new Object();
|
||||||
var callbackCalled = false;
|
var callbackCalled = false;
|
||||||
var handler = function (args: observable.EventData) {
|
var handler = function (args: observable.EventData) {
|
||||||
TKUnit.assertEqual(this, target, "this should be the target");
|
TKUnit.assertEqual(this, target, "this should be the target");
|
||||||
@ -82,7 +97,6 @@ export function test_handlerIsCalled_WithTargetAsThis() {
|
|||||||
export function test_listnerDoesNotRetainTarget() {
|
export function test_listnerDoesNotRetainTarget() {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
var callbackCalled = false;
|
|
||||||
|
|
||||||
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
||||||
|
|
||||||
@ -96,7 +110,6 @@ export function test_listnerDoesNotRetainTarget() {
|
|||||||
export function test_listnerDoesNotRetainSource() {
|
export function test_listnerDoesNotRetainSource() {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
var callbackCalled = false;
|
|
||||||
|
|
||||||
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
||||||
|
|
||||||
@ -107,74 +120,43 @@ export function test_listnerDoesNotRetainSource() {
|
|||||||
TKUnit.assert(!sourceRef.get(), "Source should be released after GC");
|
TKUnit.assert(!sourceRef.get(), "Source should be released after GC");
|
||||||
}
|
}
|
||||||
|
|
||||||
//export function test_listnerIsCleared_WhenTargetIsDead() {
|
export function test_handlerIsDetached_WhenAllListenersAreRemoved() {
|
||||||
// var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
|
|
||||||
// var listenerID = addListenerWithSource(source);
|
var target1 = new Target();
|
||||||
// helper.forceGC();
|
var target2 = new Target();
|
||||||
|
|
||||||
// for (var i = 0; i < weakEvents.cleanDeadReferencesCountTrigger; i++) {
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target1.onEvent, target1);
|
||||||
// addListenerWithSource(source);
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target2.onEvent, target2);
|
||||||
// }
|
|
||||||
|
|
||||||
// TKUnit.assert(types.isUndefined(weakEvents._weakEventListeners[listenerID]), "The first listener should be dead by now");
|
weakEvents.removeWeakEventListener(source, observable.Observable.propertyChangeEvent, target1.onEvent, target1)
|
||||||
//}
|
weakEvents.removeWeakEventListener(source, observable.Observable.propertyChangeEvent, target2.onEvent, target2)
|
||||||
|
|
||||||
//export function test_listnerIsCleared_WhenSourceIsDead() {
|
TKUnit.assert(!source.hasListeners(observable.Observable.propertyChangeEvent), "All events should be detached");
|
||||||
// var target = {};
|
}
|
||||||
|
|
||||||
// var listenerID = addListenerWithTarget(target);
|
export function test_autoDetachingOfDeadReferences() {
|
||||||
// helper.forceGC();
|
var source = new observable.Observable();
|
||||||
|
|
||||||
// for (var i = 0; i < weakEvents.cleanDeadReferencesCountTrigger; i++) {
|
for (var i = 0; i < 100; i++) {
|
||||||
// addListenerWithTarget(target);
|
addListenerWithSource(source);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// TKUnit.assert(types.isUndefined(weakEvents._weakEventListeners[listenerID]), "The first listener should be dead by now");
|
helper.forceGC();
|
||||||
//}
|
|
||||||
|
|
||||||
//function addListenerWithSource(source: observable.Observable): number {
|
var target = new Target();
|
||||||
// return weakEvents.addWeakEventListener({
|
|
||||||
// source: source,
|
|
||||||
// target: {},
|
|
||||||
// handler: emptyHandler,
|
|
||||||
// eventName: observable.Observable.propertyChangeEvent
|
|
||||||
// })
|
|
||||||
//}
|
|
||||||
|
|
||||||
//function addListenerWithTarget(target: any): number {
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target);
|
||||||
// return weakEvents.addWeakEventListener({
|
weakEvents.removeWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target)
|
||||||
// source: new observable.Observable(),
|
|
||||||
// target: target,
|
TKUnit.assert(!source.hasListeners(observable.Observable.propertyChangeEvent), "All events should be detached");
|
||||||
// handler: emptyHandler,
|
}
|
||||||
// eventName: observable.Observable.propertyChangeEvent
|
|
||||||
// })
|
function addListenerWithSource(source: observable.Observable) {
|
||||||
//}
|
var target = new Target();
|
||||||
|
weakEvents.addWeakEventListener(source, observable.Observable.propertyChangeEvent, target.onEvent, target)
|
||||||
|
}
|
||||||
|
|
||||||
function emptyHandler(data: observable.EventData) {
|
function emptyHandler(data: observable.EventData) {
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export function testWeakMap(): void {
|
|
||||||
var source = new observable.Observable();
|
|
||||||
var target = new Target();
|
|
||||||
var targetRef = new WeakRef(target);
|
|
||||||
var weakMap = new WeakMap<observable.Observable, Target>();
|
|
||||||
|
|
||||||
weakMap.set(source, target);
|
|
||||||
TKUnit.assertEqual(weakMap.get(source), target, "target");
|
|
||||||
|
|
||||||
target = undefined;
|
|
||||||
source = undefined;
|
|
||||||
|
|
||||||
helper.forceGC();
|
|
||||||
TKUnit.wait(1);
|
|
||||||
|
|
||||||
TKUnit.waitUntilReady(function () {
|
|
||||||
return false;
|
|
||||||
})
|
|
||||||
|
|
||||||
TKUnit.assert(!targetRef.get(), "Target should be dead");
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import observable = require("data/observable");
|
import observable = require("data/observable");
|
||||||
import definition = require("ui/core/weak-event-listener");
|
|
||||||
import types = require("utils/types");
|
import types = require("utils/types");
|
||||||
|
|
||||||
var handlersForEventName = new Map<string,(eventData: observable.EventData) => void>();
|
var handlersForEventName = new Map<string,(eventData: observable.EventData) => void>();
|
||||||
@ -18,7 +17,7 @@ class TargetHandlerPair {
|
|||||||
function getHandlerForEventName(eventName: string): (eventData: observable.EventData) => void {
|
function getHandlerForEventName(eventName: string): (eventData: observable.EventData) => void {
|
||||||
var handler = handlersForEventName.get(eventName);
|
var handler = handlersForEventName.get(eventName);
|
||||||
if (!handler) {
|
if (!handler) {
|
||||||
var handler = function (eventData: observable.EventData) {
|
handler = function (eventData: observable.EventData) {
|
||||||
var source = eventData.object;
|
var source = eventData.object;
|
||||||
var sourceEventMap = sourcesMap.get(source);
|
var sourceEventMap = sourcesMap.get(source);
|
||||||
if (!sourceEventMap) {
|
if (!sourceEventMap) {
|
||||||
@ -83,21 +82,27 @@ function validateArgs(source: observable.Observable, eventName: string, handler:
|
|||||||
export function addWeakEventListener(source: observable.Observable, eventName: string, handler: (eventData: observable.EventData) => void, target: any) {
|
export function addWeakEventListener(source: observable.Observable, eventName: string, handler: (eventData: observable.EventData) => void, target: any) {
|
||||||
validateArgs(source, eventName, handler, target);
|
validateArgs(source, eventName, handler, target);
|
||||||
|
|
||||||
|
var shouldAttach: boolean = false;
|
||||||
|
|
||||||
var sourceEventMap = sourcesMap.get(source);
|
var sourceEventMap = sourcesMap.get(source);
|
||||||
if (!sourceEventMap) {
|
if (!sourceEventMap) {
|
||||||
sourceEventMap = new Map<string, Array<TargetHandlerPair>>();
|
sourceEventMap = new Map<string, Array<TargetHandlerPair>>();
|
||||||
sourcesMap.set(source, sourceEventMap);
|
sourcesMap.set(source, sourceEventMap);
|
||||||
|
shouldAttach = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pairList = sourceEventMap.get(eventName);
|
var pairList = sourceEventMap.get(eventName);
|
||||||
if (!pairList) {
|
if (!pairList) {
|
||||||
pairList = new Array<TargetHandlerPair>();
|
pairList = new Array<TargetHandlerPair>();
|
||||||
sourceEventMap.set(eventName, pairList);
|
sourceEventMap.set(eventName, pairList);
|
||||||
|
shouldAttach = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pairList.push(new TargetHandlerPair(target, handler));
|
pairList.push(new TargetHandlerPair(target, handler));
|
||||||
|
|
||||||
|
if (shouldAttach) {
|
||||||
source.addEventListener(eventName, getHandlerForEventName(eventName));
|
source.addEventListener(eventName, getHandlerForEventName(eventName));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeWeakEventListener(source: observable.Observable, eventName: string, handler: (eventData: observable.EventData) => void, target: any) {
|
export function removeWeakEventListener(source: observable.Observable, eventName: string, handler: (eventData: observable.EventData) => void, target: any) {
|
||||||
|
Reference in New Issue
Block a user