diff --git a/apps/tests/ui/text-field/text-field-tests.ts b/apps/tests/ui/text-field/text-field-tests.ts index b2e780d18..945af6e8a 100644 --- a/apps/tests/ui/text-field/text-field-tests.ts +++ b/apps/tests/ui/text-field/text-field-tests.ts @@ -67,7 +67,7 @@ export var testSetText = function () { var expectedValue = "Hello, world!"; var actualValue = textFieldTestsNative.getNativeText(textField); - TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); }); } @@ -79,7 +79,7 @@ export var testSetTextNull = function () { var expectedValue = ""; var actualValue = textFieldTestsNative.getNativeText(textField); - TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); }); } @@ -91,7 +91,75 @@ export var testSetTextUndefined = function () { var expectedValue = ""; var actualValue = textFieldTestsNative.getNativeText(textField); - TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); + }); +} + +export var testSetTextToZero = function () { + helper.buildUIAndRunTest(_createTextFieldFunc(), function (views: Array) { + var textField = views[0]; + + (textField).text = 0; + + var expectedValue = "0"; + var actualValue = textFieldTestsNative.getNativeText(textField); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); + }); +} + +function createFormattedString(value: any): formattedStringModule.FormattedString { + var span = new spanModule.Span(); + span.text = value; + var result = new formattedStringModule.FormattedString(); + result.spans.push(span); + return result; +} + +export var testSetTextWithSpan = function () { + helper.buildUIAndRunTest(_createTextFieldFunc(), function (views: Array) { + var textField = views[0]; + + textField.formattedText = createFormattedString("Hello, world!"); + + var expectedValue = "Hello, world!"; + var actualValue = textFieldTestsNative.getNativeText(textField); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); + }); +} + +export var testSetTextNullWithSpan = function () { + helper.buildUIAndRunTest(_createTextFieldFunc(), function (views: Array) { + var textField = views[0]; + + textField.formattedText = createFormattedString(null); + + var expectedValue = ""; + var actualValue = textFieldTestsNative.getNativeText(textField); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); + }); +} + +export var testSetTextUndefinedWithSpan = function () { + helper.buildUIAndRunTest(_createTextFieldFunc(), function (views: Array) { + var textField = views[0]; + + textField.formattedText = createFormattedString(undefined); + + var expectedValue = ""; + var actualValue = textFieldTestsNative.getNativeText(textField); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); + }); +} + +export var testSetTextToZeroWithSpan = function () { + helper.buildUIAndRunTest(_createTextFieldFunc(), function (views: Array) { + var textField = views[0]; + + textField.formattedText = createFormattedString(0); + + var expectedValue = "0"; + var actualValue = textFieldTestsNative.getNativeText(textField); + TKUnit.assertEqual(actualValue, expectedValue, "TextField native text"); }); } diff --git a/text/formatted-string.android.ts b/text/formatted-string.android.ts index 37665792e..d9d40ff55 100644 --- a/text/formatted-string.android.ts +++ b/text/formatted-string.android.ts @@ -1,5 +1,6 @@ import formattedStringCommon = require("./formatted-string-common"); import spanModule = require("text/span"); +import types = require("utils/types"); global.moduleMerge(formattedStringCommon, exports); @@ -12,7 +13,7 @@ export class FormattedString extends formattedStringCommon.FormattedString { var spanText = ""; for (i = 0; i < this.spans.length; i++) { var span = this.spans.getItem(i); - spanText = span.text || ""; + spanText = types.toUIString(span.text); spanLength = spanText.length; if (spanLength !== 0) { ssb.insert(spanStart, spanText); diff --git a/text/formatted-string.ios.ts b/text/formatted-string.ios.ts index 7402ee3bc..cde590c76 100644 --- a/text/formatted-string.ios.ts +++ b/text/formatted-string.ios.ts @@ -1,5 +1,6 @@ import formattedStringCommon = require("./formatted-string-common"); import spanModule = require("text/span"); +import types = require("utils/types"); global.moduleMerge(formattedStringCommon, exports); @@ -12,7 +13,7 @@ export class FormattedString extends formattedStringCommon.FormattedString { var spanText = ""; for (i = 0; i < this.spans.length; i++) { var span = this.spans.getItem(i); - spanText = span.text || ""; + spanText = types.toUIString(span.text); spanLength = spanText.length; span.updateSpanModifiers(this); var attrDict = NSMutableDictionary.alloc().init(); diff --git a/ui/editable-text-base/editable-text-base.android.ts b/ui/editable-text-base/editable-text-base.android.ts index 6540edc21..de260100e 100644 --- a/ui/editable-text-base/editable-text-base.android.ts +++ b/ui/editable-text-base/editable-text-base.android.ts @@ -133,7 +133,7 @@ export class EditableTextBase extends common.EditableTextBase { public _onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) { if (this._android) { - var newValue = types.isNullOrUndefined(data.newValue) ? "" : data.newValue + ""; + var newValue = types.toUIString(data.newValue); this.android.setText(newValue, android.widget.TextView.BufferType.EDITABLE); } } diff --git a/ui/text-base/text-base.android.ts b/ui/text-base/text-base.android.ts index e06054bc7..ea6058cdb 100644 --- a/ui/text-base/text-base.android.ts +++ b/ui/text-base/text-base.android.ts @@ -5,7 +5,7 @@ import dependencyObservable = require("ui/core/dependency-observable"); export class TextBase extends common.TextBase { public _onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) { if (this.android) { - var newValue = types.isNullOrUndefined(data.newValue) ? "" : data.newValue + ""; + var newValue = types.toUIString(data.newValue); this.android.setText(newValue); } } diff --git a/ui/text-base/text-base.ios.ts b/ui/text-base/text-base.ios.ts index bf18342e6..09750986e 100644 --- a/ui/text-base/text-base.ios.ts +++ b/ui/text-base/text-base.ios.ts @@ -4,7 +4,7 @@ import dependencyObservable = require("ui/core/dependency-observable"); export class TextBase extends common.TextBase { public _onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) { - var newValue = types.isNullOrUndefined(data.newValue) ? "" : data.newValue + ""; + var newValue = types.toUIString(data.newValue); this.ios.text = newValue; this.style._updateTextDecoration(); this.style._updateTextTransform(); diff --git a/utils/types.d.ts b/utils/types.d.ts index bf84d102b..59640a2d6 100644 --- a/utils/types.d.ts +++ b/utils/types.d.ts @@ -83,4 +83,10 @@ */ baseClassInfo: ClassInfo; } + + /** + * Returns a string representation of a string to be shown in UI. + * @param object The object which class hierarchy will be get. + */ + export function toUIString(object): string; } \ No newline at end of file diff --git a/utils/types.ts b/utils/types.ts index 4270c7209..7b52ba8cd 100644 --- a/utils/types.ts +++ b/utils/types.ts @@ -98,4 +98,8 @@ export class ClassInfo { } return result; } +} + +export function toUIString(obj): string { + return isNullOrUndefined(obj) ? "" : obj + ""; } \ No newline at end of file