mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
Merge pull request #1219 from NativeScript/hhristov/ios-memory-leak-tests-fix
Made two memory leak tests async so that GC could be triggered.
This commit is contained in:
@ -94,7 +94,7 @@ export function test_handlerIsCalled_WithTargetAsThis() {
|
|||||||
TKUnit.assert(callbackCalled, "Handler not called.");
|
TKUnit.assert(callbackCalled, "Handler not called.");
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_listnerDoesNotRetainTarget() {
|
export function test_listnerDoesNotRetainTarget(done) {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
|
|
||||||
@ -102,12 +102,22 @@ export function test_listnerDoesNotRetainTarget() {
|
|||||||
|
|
||||||
var targetRef = new WeakRef(target);
|
var targetRef = new WeakRef(target);
|
||||||
target = undefined;
|
target = undefined;
|
||||||
helper.forceGC();
|
|
||||||
|
|
||||||
TKUnit.assert(!targetRef.get(), "Target should be released after GC");
|
TKUnit.waitUntilReady(() => {
|
||||||
|
helper.forceGC();
|
||||||
|
return !targetRef.get();
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
TKUnit.assert(!targetRef.get(), "Target should be released after GC");
|
||||||
|
done(null);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_listnerDoesNotRetainSource() {
|
export function test_listnerDoesNotRetainSource(done) {
|
||||||
var source = new observable.Observable();
|
var source = new observable.Observable();
|
||||||
var target = new Target();
|
var target = new Target();
|
||||||
|
|
||||||
@ -115,9 +125,19 @@ export function test_listnerDoesNotRetainSource() {
|
|||||||
|
|
||||||
var sourceRef = new WeakRef(source);
|
var sourceRef = new WeakRef(source);
|
||||||
source = undefined;
|
source = undefined;
|
||||||
helper.forceGC();
|
|
||||||
|
|
||||||
TKUnit.assert(!sourceRef.get(), "Source should be released after GC");
|
TKUnit.waitUntilReady(() => {
|
||||||
|
helper.forceGC();
|
||||||
|
return !sourceRef.get();
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
TKUnit.assert(!sourceRef.get(), "Source should be released after GC");
|
||||||
|
done(null);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
done(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_handlerIsDetached_WhenAllListenersAreRemoved() {
|
export function test_handlerIsDetached_WhenAllListenersAreRemoved() {
|
||||||
|
@ -26,6 +26,10 @@ var ignorePropertyHandler = new stylersCommon.StylePropertyChangedHandler(
|
|||||||
var _defaultBackgrounds = new Map<string, android.graphics.drawable.Drawable>();
|
var _defaultBackgrounds = new Map<string, android.graphics.drawable.Drawable>();
|
||||||
|
|
||||||
function onBackgroundOrBorderPropertyChanged(v: view.View) {
|
function onBackgroundOrBorderPropertyChanged(v: view.View) {
|
||||||
|
if (!btn) {
|
||||||
|
btn = require("ui/button");
|
||||||
|
}
|
||||||
|
|
||||||
var nativeView = <android.view.View>v._nativeView;
|
var nativeView = <android.view.View>v._nativeView;
|
||||||
if (!nativeView) {
|
if (!nativeView) {
|
||||||
return;
|
return;
|
||||||
@ -39,9 +43,6 @@ function onBackgroundOrBorderPropertyChanged(v: view.View) {
|
|||||||
if (!(bkg instanceof background.ad.BorderDrawable)) {
|
if (!(bkg instanceof background.ad.BorderDrawable)) {
|
||||||
bkg = new background.ad.BorderDrawable();
|
bkg = new background.ad.BorderDrawable();
|
||||||
let viewClass = types.getClass(v);
|
let viewClass = types.getClass(v);
|
||||||
if (!btn) {
|
|
||||||
btn = require("ui/button");
|
|
||||||
}
|
|
||||||
if (!(v instanceof btn.Button) && !_defaultBackgrounds.has(viewClass)) {
|
if (!(v instanceof btn.Button) && !_defaultBackgrounds.has(viewClass)) {
|
||||||
_defaultBackgrounds.set(viewClass, nativeView.getBackground());
|
_defaultBackgrounds.set(viewClass, nativeView.getBackground());
|
||||||
}
|
}
|
||||||
@ -81,10 +82,10 @@ function onBackgroundOrBorderPropertyChanged(v: view.View) {
|
|||||||
|
|
||||||
var density = utils.layout.getDisplayDensity();
|
var density = utils.layout.getDisplayDensity();
|
||||||
nativeView.setPadding(
|
nativeView.setPadding(
|
||||||
(borderWidth + v.style.paddingLeft) * density,
|
Math.round((borderWidth + v.style.paddingLeft) * density),
|
||||||
(borderWidth + v.style.paddingTop) * density,
|
Math.round((borderWidth + v.style.paddingTop) * density),
|
||||||
(borderWidth + v.style.paddingRight) * density,
|
Math.round((borderWidth + v.style.paddingRight) * density),
|
||||||
(borderWidth + v.style.paddingBottom) * density
|
Math.round((borderWidth + v.style.paddingBottom) * density)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ export class DefaultStyler implements definition.stylers.Styler {
|
|||||||
|
|
||||||
//minWidth methods
|
//minWidth methods
|
||||||
private static setMinWidthProperty(view: view.View, newValue: any) {
|
private static setMinWidthProperty(view: view.View, newValue: any) {
|
||||||
(<android.view.View>view._nativeView).setMinimumWidth(newValue * utils.layout.getDisplayDensity());
|
(<android.view.View>view._nativeView).setMinimumWidth(Math.round(newValue * utils.layout.getDisplayDensity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static resetMinWidthProperty(view: view.View, nativeValue: any) {
|
private static resetMinWidthProperty(view: view.View, nativeValue: any) {
|
||||||
@ -128,7 +129,7 @@ export class DefaultStyler implements definition.stylers.Styler {
|
|||||||
|
|
||||||
//minHeight methods
|
//minHeight methods
|
||||||
private static setMinHeightProperty(view: view.View, newValue: any) {
|
private static setMinHeightProperty(view: view.View, newValue: any) {
|
||||||
(<android.view.View>view._nativeView).setMinimumHeight(newValue * utils.layout.getDisplayDensity());
|
(<android.view.View>view._nativeView).setMinimumHeight(Math.round(newValue * utils.layout.getDisplayDensity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static resetMinHeightProperty(view: view.View, nativeValue: any) {
|
private static resetMinHeightProperty(view: view.View, nativeValue: any) {
|
||||||
@ -148,10 +149,10 @@ export class DefaultStyler implements definition.stylers.Styler {
|
|||||||
var nativeView: android.view.View = view._nativeView;
|
var nativeView: android.view.View = view._nativeView;
|
||||||
var lp = DefaultStyler.getNativeLayoutParams(nativeView);
|
var lp = DefaultStyler.getNativeLayoutParams(nativeView);
|
||||||
|
|
||||||
lp.leftMargin = params.leftMargin * utils.layout.getDisplayDensity();
|
lp.leftMargin = Math.round(params.leftMargin * utils.layout.getDisplayDensity());
|
||||||
lp.topMargin = params.topMargin * utils.layout.getDisplayDensity();
|
lp.topMargin = Math.round(params.topMargin * utils.layout.getDisplayDensity());
|
||||||
lp.rightMargin = params.rightMargin * utils.layout.getDisplayDensity();
|
lp.rightMargin = Math.round(params.rightMargin * utils.layout.getDisplayDensity());
|
||||||
lp.bottomMargin = params.bottomMargin * utils.layout.getDisplayDensity();
|
lp.bottomMargin = Math.round(params.bottomMargin * utils.layout.getDisplayDensity());
|
||||||
|
|
||||||
var width = params.width * utils.layout.getDisplayDensity();
|
var width = params.width * utils.layout.getDisplayDensity();
|
||||||
var height = params.height * utils.layout.getDisplayDensity();
|
var height = params.height * utils.layout.getDisplayDensity();
|
||||||
@ -218,8 +219,8 @@ export class DefaultStyler implements definition.stylers.Styler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lp.gravity = gravity;
|
lp.gravity = gravity;
|
||||||
lp.width = width;
|
lp.width = Math.round(width);
|
||||||
lp.height = height;
|
lp.height = Math.round(height);
|
||||||
|
|
||||||
nativeView.setLayoutParams(lp);
|
nativeView.setLayoutParams(lp);
|
||||||
}
|
}
|
||||||
@ -240,19 +241,19 @@ export class DefaultStyler implements definition.stylers.Styler {
|
|||||||
|
|
||||||
private static setPaddingProperty(view: view.View, newValue: style.Thickness) {
|
private static setPaddingProperty(view: view.View, newValue: style.Thickness) {
|
||||||
var density = utils.layout.getDisplayDensity();
|
var density = utils.layout.getDisplayDensity();
|
||||||
var left = (newValue.left + view.borderWidth) * density;
|
var left = Math.round((newValue.left + view.borderWidth) * density);
|
||||||
var top = (newValue.top + view.borderWidth) * density;
|
var top = Math.round((newValue.top + view.borderWidth) * density);
|
||||||
var right = (newValue.right + view.borderWidth) * density;
|
var right = Math.round((newValue.right + view.borderWidth) * density);
|
||||||
var bottom = (newValue.bottom + view.borderWidth) * density;
|
var bottom = Math.round((newValue.bottom + view.borderWidth) * density);
|
||||||
(<android.view.View>view._nativeView).setPadding(left, top, right, bottom);
|
(<android.view.View>view._nativeView).setPadding(left, top, right, bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static resetPaddingProperty(view: view.View, nativeValue: style.Thickness) {
|
private static resetPaddingProperty(view: view.View, nativeValue: style.Thickness) {
|
||||||
var density = utils.layout.getDisplayDensity();
|
var density = utils.layout.getDisplayDensity();
|
||||||
var left = (nativeValue.left + view.borderWidth) * density;
|
var left = Math.round((nativeValue.left + view.borderWidth) * density);
|
||||||
var top = (nativeValue.top + view.borderWidth) * density;
|
var top = Math.round((nativeValue.top + view.borderWidth) * density);
|
||||||
var right = (nativeValue.right + view.borderWidth) * density;
|
var right = Math.round((nativeValue.right + view.borderWidth) * density);
|
||||||
var bottom = (nativeValue.bottom + view.borderWidth) * density;
|
var bottom = Math.round((nativeValue.bottom + view.borderWidth) * density);
|
||||||
(<android.view.View>view._nativeView).setPadding(left, top, right, bottom);
|
(<android.view.View>view._nativeView).setPadding(left, top, right, bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +309,7 @@ export class ImageStyler implements definition.stylers.Styler {
|
|||||||
if (!view._nativeView) {
|
if (!view._nativeView) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var val = newValue * utils.layout.getDisplayDensity();
|
var val = Math.round(newValue * utils.layout.getDisplayDensity());
|
||||||
(<org.nativescript.widgets.ImageView>view._nativeView).setCornerRadius(val);
|
(<org.nativescript.widgets.ImageView>view._nativeView).setCornerRadius(val);
|
||||||
onBackgroundOrBorderPropertyChanged(view);
|
onBackgroundOrBorderPropertyChanged(view);
|
||||||
}
|
}
|
||||||
@ -327,7 +328,7 @@ export class ImageStyler implements definition.stylers.Styler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var val = newValue * utils.layout.getDisplayDensity();
|
var val = Math.round(newValue * utils.layout.getDisplayDensity());
|
||||||
(<org.nativescript.widgets.ImageView>view._nativeView).setBorderWidth(val);
|
(<org.nativescript.widgets.ImageView>view._nativeView).setBorderWidth(val);
|
||||||
onBackgroundOrBorderPropertyChanged(view);
|
onBackgroundOrBorderPropertyChanged(view);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user