From 21926a95eaedca3151a882be615acceccf323794 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Thu, 28 Jul 2016 14:48:03 +0300 Subject: [PATCH] Additional refactoring and code cleanup --- tests/app/ui/button/button-tests.ts | 47 ++---------------- tests/app/ui/helper.ts | 33 +++++++++++++ tests/app/ui/label/label-tests.ts | 49 ++----------------- tests/app/ui/text-field/text-field-tests.ts | 42 ++-------------- tests/app/ui/text-view/text-view-tests.ts | 49 ++----------------- tns-core-modules/text/formatted-string.ios.ts | 23 +++++---- tns-core-modules/text/span-common.ts | 6 ++- tns-core-modules/text/span.d.ts | 5 ++ 8 files changed, 70 insertions(+), 184 deletions(-) diff --git a/tests/app/ui/button/button-tests.ts b/tests/app/ui/button/button-tests.ts index 74eb19ec9..57b7b03b7 100644 --- a/tests/app/ui/button/button-tests.ts +++ b/tests/app/ui/button/button-tests.ts @@ -302,14 +302,9 @@ export var test_WhenFormattedTextPropertyChanges_TextIsUpdated_Button = function }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() { let view = new buttonModule.Button(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.text = "NormalText"; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -319,15 +314,10 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedTex }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() { let view = new buttonModule.Button(); - let formattedString = _generateFormattedString(); + let formattedString = helper._generateFormattedString(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.formattedText = formattedString; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -335,33 +325,4 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_D TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration"); TKUnit.assertEqual(view.style.letterSpacing, 10, "LetterSpacing"); }); -} - -function _generateFormattedString(): formattedStringModule.FormattedString{ - let formattedString = new formattedStringModule.FormattedString(); - let span: spanModule.Span; - - span = new spanModule.Span(); - span.fontFamily = "serif"; - span.fontSize = 10; - span.fontAttributes = enums.FontAttributes.Bold; - span.foregroundColor = new colorModule.Color("red"); - span.backgroundColor = new colorModule.Color("blue"); - span.underline = 0; - span.strikethrough = 1; - span.text = "Formatted"; - formattedString.spans.push(span); - - span = new spanModule.Span(); - span.fontFamily = "sans-serif"; - span.fontSize = 20; - span.fontAttributes = enums.FontAttributes.Italic; - span.foregroundColor = new colorModule.Color("green"); - span.backgroundColor = new colorModule.Color("yellow"); - span.underline = 1; - span.strikethrough = 0; - span.text = "Text"; - formattedString.spans.push(span); - - return formattedString; -} +} \ No newline at end of file diff --git a/tests/app/ui/helper.ts b/tests/app/ui/helper.ts index dc935d79a..4a0f1b238 100644 --- a/tests/app/ui/helper.ts +++ b/tests/app/ui/helper.ts @@ -8,6 +8,10 @@ import utils = require("utils/utils"); import types = require("utils/types"); import styling = require("ui/styling"); import platform = require("platform"); +import colorModule = require("color"); +import formattedStringModule = require("text/formatted-string"); +import spanModule = require("text/span"); +import enums = require("ui/enums"); var DELTA = 0.1; @@ -201,4 +205,33 @@ export function forceGC() { } utils.GC(); +} + +export function _generateFormattedString(): formattedStringModule.FormattedString{ + let formattedString = new formattedStringModule.FormattedString(); + let span: spanModule.Span; + + span = new spanModule.Span(); + span.fontFamily = "serif"; + span.fontSize = 10; + span.fontAttributes = enums.FontAttributes.Bold; + span.foregroundColor = new colorModule.Color("red"); + span.backgroundColor = new colorModule.Color("blue"); + span.underline = 0; + span.strikethrough = 1; + span.text = "Formatted"; + formattedString.spans.push(span); + + span = new spanModule.Span(); + span.fontFamily = "sans-serif"; + span.fontSize = 20; + span.fontAttributes = enums.FontAttributes.Italic; + span.foregroundColor = new colorModule.Color("green"); + span.backgroundColor = new colorModule.Color("yellow"); + span.underline = 1; + span.strikethrough = 0; + span.text = "Text"; + formattedString.spans.push(span); + + return formattedString; } \ No newline at end of file diff --git a/tests/app/ui/label/label-tests.ts b/tests/app/ui/label/label-tests.ts index 7d03c3c63..e7af3a672 100644 --- a/tests/app/ui/label/label-tests.ts +++ b/tests/app/ui/label/label-tests.ts @@ -23,8 +23,6 @@ import {Label} from "ui/label"; import {LayoutBase} from "ui/layouts/layout-base"; import * as helper from "../helper"; import viewModule = require("ui/core/view"); -import formattedStringModule = require("text/formatted-string"); -import spanModule = require("text/span"); export class LabelTest extends testModule.UITest { @@ -599,14 +597,9 @@ export function createTestCase(): LabelTest { return new LabelTest(); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() { let view = new LabelModule.Label(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.text = "NormalText"; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -616,15 +609,10 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedTex }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() { let view = new LabelModule.Label(); - let formattedString = _generateFormattedString(); + let formattedString = helper._generateFormattedString(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.formattedText = formattedString; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -632,33 +620,4 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_D TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration"); TKUnit.assertEqual(view.style.letterSpacing, 10, "LetterSpacing"); }); -} - -function _generateFormattedString(): formattedStringModule.FormattedString{ - let formattedString = new formattedStringModule.FormattedString(); - let span: spanModule.Span; - - span = new spanModule.Span(); - span.fontFamily = "serif"; - span.fontSize = 10; - span.fontAttributes = enums.FontAttributes.Bold; - span.foregroundColor = new colorModule.Color("red"); - span.backgroundColor = new colorModule.Color("blue"); - span.underline = 0; - span.strikethrough = 1; - span.text = "Formatted"; - formattedString.spans.push(span); - - span = new spanModule.Span(); - span.fontFamily = "sans-serif"; - span.fontSize = 20; - span.fontAttributes = enums.FontAttributes.Italic; - span.foregroundColor = new colorModule.Color("green"); - span.backgroundColor = new colorModule.Color("yellow"); - span.underline = 1; - span.strikethrough = 0; - span.text = "Text"; - formattedString.spans.push(span); - - return formattedString; -} +} \ No newline at end of file diff --git a/tests/app/ui/text-field/text-field-tests.ts b/tests/app/ui/text-field/text-field-tests.ts index caba3ef6c..60288957b 100644 --- a/tests/app/ui/text-field/text-field-tests.ts +++ b/tests/app/ui/text-field/text-field-tests.ts @@ -536,7 +536,7 @@ export var test_WhenFormattedTextPropertyChanges_TextIsUpdated_TextBase = functi }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() { let view = new textFieldModule.TextField(); helper.buildUIAndRunTest(view, function (views: Array) { TKUnit.assertEqual(view.text, "", "Text"); @@ -553,15 +553,10 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedTex }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() { let view = new textFieldModule.TextField(); - let formattedString = _generateFormattedString(); + let formattedString = helper._generateFormattedString(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.formattedText = formattedString; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -569,33 +564,4 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_D TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration"); TKUnit.assertEqual(view.style.letterSpacing, 10, "LetterSpacing"); }); -} - -function _generateFormattedString(): formattedStringModule.FormattedString{ - let formattedString = new formattedStringModule.FormattedString(); - let span: spanModule.Span; - - span = new spanModule.Span(); - span.fontFamily = "serif"; - span.fontSize = 10; - span.fontAttributes = enums.FontAttributes.Bold; - span.foregroundColor = new colorModule.Color("red"); - span.backgroundColor = new colorModule.Color("blue"); - span.underline = 0; - span.strikethrough = 1; - span.text = "Formatted"; - formattedString.spans.push(span); - - span = new spanModule.Span(); - span.fontFamily = "sans-serif"; - span.fontSize = 20; - span.fontAttributes = enums.FontAttributes.Italic; - span.foregroundColor = new colorModule.Color("green"); - span.backgroundColor = new colorModule.Color("yellow"); - span.underline = 1; - span.strikethrough = 0; - span.text = "Text"; - formattedString.spans.push(span); - - return formattedString; -} +} \ No newline at end of file diff --git a/tests/app/ui/text-view/text-view-tests.ts b/tests/app/ui/text-view/text-view-tests.ts index 38607e9a2..afec52c01 100644 --- a/tests/app/ui/text-view/text-view-tests.ts +++ b/tests/app/ui/text-view/text-view-tests.ts @@ -6,8 +6,6 @@ import textViewTestsNative = require("./text-view-tests-native"); import colorModule = require("color"); import enums = require("ui/enums"); import platform = require("platform"); -import formattedStringModule = require("text/formatted-string"); -import spanModule = require("text/span"); // >> require-textmodules import textViewModule = require("ui/text-view"); @@ -497,14 +495,9 @@ export function test_watch_listerer_is_removed_at_onDetach() { } } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedText_DoesNotCrash() { let view = new textViewModule.TextView(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.text = "NormalText"; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -514,15 +507,10 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithoutFormattedTex }); } -export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash = function () { +export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_DoesNotCrash() { let view = new textViewModule.TextView(); - let formattedString = _generateFormattedString(); + let formattedString = helper._generateFormattedString(); helper.buildUIAndRunTest(view, function (views: Array) { - TKUnit.assertEqual(view.text, "", "Text"); - TKUnit.assertEqual(view.style.textTransform, enums.TextTransform.none, "TextTransform"); - TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.none, "TextDecoration"); - TKUnit.assertTrue(isNaN(view.style.letterSpacing), "LetterSpacing"); - view.formattedText = formattedString; view.setInlineStyle("text-transform: uppercase; text-decoration: underline; letter-spacing: 10;"); @@ -530,33 +518,4 @@ export var test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedText_D TKUnit.assertEqual(view.style.textDecoration, enums.TextDecoration.underline, "TextDecoration"); TKUnit.assertEqual(view.style.letterSpacing, 10, "LetterSpacing"); }); -} - -function _generateFormattedString(): formattedStringModule.FormattedString{ - let formattedString = new formattedStringModule.FormattedString(); - let span: spanModule.Span; - - span = new spanModule.Span(); - span.fontFamily = "serif"; - span.fontSize = 10; - span.fontAttributes = enums.FontAttributes.Bold; - span.foregroundColor = new colorModule.Color("red"); - span.backgroundColor = new colorModule.Color("blue"); - span.underline = 0; - span.strikethrough = 1; - span.text = "Formatted"; - formattedString.spans.push(span); - - span = new spanModule.Span(); - span.fontFamily = "sans-serif"; - span.fontSize = 20; - span.fontAttributes = enums.FontAttributes.Italic; - span.foregroundColor = new colorModule.Color("green"); - span.backgroundColor = new colorModule.Color("yellow"); - span.underline = 1; - span.strikethrough = 0; - span.text = "Text"; - formattedString.spans.push(span); - - return formattedString; -} +} \ No newline at end of file diff --git a/tns-core-modules/text/formatted-string.ios.ts b/tns-core-modules/text/formatted-string.ios.ts index 81fe23d14..7f012017b 100644 --- a/tns-core-modules/text/formatted-string.ios.ts +++ b/tns-core-modules/text/formatted-string.ios.ts @@ -6,22 +6,20 @@ global.moduleMerge(formattedStringCommon, exports); export class FormattedString extends formattedStringCommon.FormattedString { public createFormattedStringCore() { - var mas = NSMutableAttributedString.alloc().init(); - var i; - var spanStart = 0; - var spanLength = 0; - var spanText = ""; - for (i = 0; i < this.spans.length; i++) { - var span = this.spans.getItem(i); + let mas = NSMutableAttributedString.alloc().init(); + let spanStart = 0; + let spanLength = 0; + let spanText = ""; + for (let i = 0; i < this.spans.length; i++) { + let span = this.spans.getItem(i); spanText = types.toUIString(span.text); spanLength = spanText.length; span.updateSpanModifiers(this); - var attrDict = NSMutableDictionary.alloc().init(); - var p; - for (p = 0; p < span.spanModifiers.length; p++) { + let attrDict = NSMutableDictionary.alloc().init(); + for (let p = 0; p < span.spanModifiers.length; p++) { attrDict.setObjectForKey(span.spanModifiers[p].value, span.spanModifiers[p].key); } - var nsAttributedString = NSMutableAttributedString.alloc().initWithStringAttributes(String(spanText), attrDict); + let nsAttributedString = NSMutableAttributedString.alloc().initWithStringAttributes(String(spanText), attrDict); mas.insertAttributedStringAtIndex(nsAttributedString, spanStart); spanStart += spanLength; } @@ -34,7 +32,8 @@ export class FormattedString extends formattedStringCommon.FormattedString { for (let i = 0; i < this.spans.length; i++) { let span = this.spans.getItem(i); if (currentLocation <= rangeLocation && rangeLocation < (currentLocation + span.text.length)){ - (span)._text = splice(span.text, rangeLocation - currentLocation, deletingText ? rangeLength : 0, replacementString); + let newText = splice(span.text, rangeLocation - currentLocation, deletingText ? rangeLength : 0, replacementString); + span._setTextInternal(newText); //console.log(`>>> ${span.text}`); return; } diff --git a/tns-core-modules/text/span-common.ts b/tns-core-modules/text/span-common.ts index 768b8b566..94a8d1c85 100644 --- a/tns-core-modules/text/span-common.ts +++ b/tns-core-modules/text/span-common.ts @@ -140,11 +140,15 @@ export class Span extends bindable.Bindable implements definition.Span, view.App set text(value: string) { if (this._text !== value) { - this._text = value; + this._setTextInternal(value); this.updateAndNotify(); } } + _setTextInternal(value: string): void { + this._text = value; + } + get parentFormattedString(): formattedString.FormattedString { return this._parentFormattedString; } diff --git a/tns-core-modules/text/span.d.ts b/tns-core-modules/text/span.d.ts index f6924440e..e09dd4900 100644 --- a/tns-core-modules/text/span.d.ts +++ b/tns-core-modules/text/span.d.ts @@ -72,5 +72,10 @@ * Ends the process previously initiated by beginEdit and updates the span modifiers collection. */ public endEdit(): void; + + //@private + _setTextInternal(value: string): void; + //@endprivate + } } \ No newline at end of file