From 113a1b6a69c3155e6d711a9c57dad2d6069e3cfd Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 29 Sep 2015 15:31:36 +0300 Subject: [PATCH] placeholder creatingView event fixed + tests --- CrossPlatformModules.csproj | 7 +- apps/tests/testRunner.ts | 1 + .../tests/ui/placeholder/placeholder-tests.ts | 78 +++++++++++++++++++ ui/core/view.ios.ts | 26 ++++--- ui/placeholder/placeholder.android.ts | 2 +- ui/placeholder/placeholder.ios.ts | 2 +- 6 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 apps/tests/ui/placeholder/placeholder-tests.ts diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index 786adf343..8dcc19ea0 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -80,6 +80,7 @@ data-binding.xml + @@ -183,8 +184,8 @@ - nordic.xml - + nordic.xml + @@ -1984,7 +1985,7 @@ False - + \ No newline at end of file diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts index 83cb56918..bb02546d6 100644 --- a/apps/tests/testRunner.ts +++ b/apps/tests/testRunner.ts @@ -61,6 +61,7 @@ allTests["IMAGE"] = require("./ui/image/image-tests"); allTests["SLIDER"] = require("./ui/slider/slider-tests"); allTests["SWITCH"] = require("./ui/switch/switch-tests"); allTests["PROGRESS"] = require("./ui/progress/progress-tests"); +allTests["PLACEHOLDER"] = require("./ui/placeholder/placeholder-tests"); allTests["PAGE"] = require("./ui/page/page-tests"); allTests["LISTVIEW"] = require("./ui/list-view/list-view-tests"); allTests["ACTIVITY-INDICATOR"] = require("./ui/activity-indicator/activity-indicator-tests"); diff --git a/apps/tests/ui/placeholder/placeholder-tests.ts b/apps/tests/ui/placeholder/placeholder-tests.ts new file mode 100644 index 000000000..97395cf15 --- /dev/null +++ b/apps/tests/ui/placeholder/placeholder-tests.ts @@ -0,0 +1,78 @@ +import TKUnit = require("../../TKUnit"); +import platform = require("platform"); +import utils = require("utils/utils"); +import helper = require("../helper"); +import viewModule = require("ui/core/view"); + +//  +// # Placeholder +// Using the placeholder requires the Placeholder module. +// ``` JavaScript +import placeholderModule = require("ui/placeholder"); +// ``` + +// Creating native view for the Placeholder using creatingView event. +//```XML +// +// {%raw%}{%endraw%} +// +//``` +//```JS +//var platform = require("platform"); +//var utils = require("utils/utils"); +// +//function creatingView(args) { +// var nativeView; +// if (platform.device.os === platform.platformNames.ios) { +// nativeView = new UITextView(); +// nativeView.text = "Native"; +// } else if (platform.device.os === platform.platformNames.android) { +// nativeView = new android.widget.TextView(utils.ad.getApplicationContext()); +// nativeView.setText("Native"); +// } +// +// args.view = nativeView; +//} +// +//exports.creatingView = creatingView; +//``` +//  + +export function test_placeholder_creatingView() { + var nativeView; + + var p = new placeholderModule.Placeholder(); + p.id = "test"; + p.on(placeholderModule.Placeholder.creatingViewEvent, (args: placeholderModule.CreateViewEventData) => { + if (platform.device.os === platform.platformNames.ios) { + nativeView = new UITextView(); + nativeView.text = "Native"; + } else if (platform.device.os === platform.platformNames.android) { + nativeView = new android.widget.TextView(utils.ad.getApplicationContext()); + nativeView.setText("Native"); + } + + args.view = nativeView; + }); + + if (platform.device.os === platform.platformNames.ios) { + TKUnit.assert(p.ios instanceof UITextView, "ios property should be UITextView. Current value: " + p.ios); + } else if (platform.device.os === platform.platformNames.android) { + p._emit("creatingView"); + TKUnit.assert(nativeView instanceof android.widget.TextView, "Native view should be android.widget.TextView. Current value: " + nativeView); + } +} + +export function test_placeholder_will_not_crash_wihout_creatingView() { + var p = new placeholderModule.Placeholder(); + + function testAction(views: Array) { + if (platform.device.os === platform.platformNames.ios) { + TKUnit.assert(p.ios === undefined, "ios property should be undefined. Current value: " + p.ios); + } else if (platform.device.os === platform.platformNames.android) { + TKUnit.assert(p.android === undefined, "android view should be undefined. Current value: " + p.android); + } + }; + + helper.buildUIAndRunTest(p, testAction); +} \ No newline at end of file diff --git a/ui/core/view.ios.ts b/ui/core/view.ios.ts index 922b9de36..02cc7751d 100644 --- a/ui/core/view.ios.ts +++ b/ui/core/view.ios.ts @@ -196,8 +196,10 @@ export class View extends viewCommon.View { public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void { var view = this._nativeView; - if (view) { + let nativeWidth = 0; + let nativeHeight = 0; + if (view) { var width = utils.layout.getMeasureSpecSize(widthMeasureSpec); var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec); @@ -213,15 +215,17 @@ export class View extends viewCommon.View { } var nativeSize = view.sizeThatFits(CGSizeMake(width, height)); - - var measureWidth = Math.max(nativeSize.width, this.minWidth); - var measureHeight = Math.max(nativeSize.height, this.minHeight); - - var widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0); - var heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0); - - this.setMeasuredDimension(widthAndState, heightAndState); + nativeWidth = nativeSize.width; + nativeHeight = nativeSize.height; } + + var measureWidth = Math.max(nativeWidth, this.minWidth); + var measureHeight = Math.max(nativeHeight, this.minHeight); + + var widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0); + var heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0); + + this.setMeasuredDimension(widthAndState, heightAndState); } public onLayout(left: number, top: number, right: number, bottom: number): void { @@ -305,12 +309,12 @@ export class CustomLayoutView extends View { if (this._nativeView && child._nativeView) { if (types.isNullOrUndefined(atIndex) || atIndex >= this._nativeView.subviews.count) { - this._nativeView.addSubview(child._nativeView); + this._nativeView.addSubview(child._nativeView); } else { this._nativeView.insertSubviewAtIndex(child._nativeView, atIndex); } - + return true; } diff --git a/ui/placeholder/placeholder.android.ts b/ui/placeholder/placeholder.android.ts index d3de56051..ebae384f5 100644 --- a/ui/placeholder/placeholder.android.ts +++ b/ui/placeholder/placeholder.android.ts @@ -9,7 +9,7 @@ export class Placeholder extends common.Placeholder { public _createUI() { var args = { eventName: common.Placeholder.creatingViewEvent, object: this, view: undefined, context: this._context }; this.notify(args); - this._android = args.view || new android.view.View(this._context); + this._android = args.view; } get android(): android.view.View { diff --git a/ui/placeholder/placeholder.ios.ts b/ui/placeholder/placeholder.ios.ts index b4ca8eb2a..c05f20456 100644 --- a/ui/placeholder/placeholder.ios.ts +++ b/ui/placeholder/placeholder.ios.ts @@ -10,7 +10,7 @@ export class Placeholder extends common.Placeholder { if (!this._ios) { var args = { eventName: common.Placeholder.creatingViewEvent, object: this, view: undefined, context: undefined }; super.notify(args); - this._ios = args.view || new UIView(); + this._ios = args.view; } return this._ios; }