Skip to content

Commit 37b53c6

Browse files
author
Alexander Vakrilov
authored
fix(text): crash when removing FormattedText (#7237)
* fix(text): crash when removing FormattedText * refactor: fixed crash on ios too
1 parent c85f323 commit 37b53c6

3 files changed

Lines changed: 24 additions & 9 deletions

File tree

‎tests/app/ui/label/label-tests.ts‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
162162
const span = new Span();
163163
span.text = "long label";
164164
span.fontWeight = "bold";
165-
165+
166166
const span2 = new Span();
167167
span2.text = "long label";
168-
168+
169169
const formattedString = new FormattedString();
170170
formattedString.spans.push(span);
171171
formattedString.spans.push(span2);
@@ -176,7 +176,7 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
176176
const span3 = new Span();
177177
span3.text = "short label";
178178
span3.fontWeight = "bold";
179-
179+
180180
const formattedString2 = new FormattedString();
181181
formattedString2.spans.push(span3);
182182
label.formattedText = formattedString2;
@@ -210,7 +210,7 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
210210
const span = new Span();
211211
span.text = "short label";
212212
span.fontWeight = "bold";
213-
213+
214214
const formattedString = new FormattedString();
215215
formattedString.spans.push(span);
216216
label.formattedText = formattedString;
@@ -220,10 +220,10 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
220220
const span2 = new Span();
221221
span2.text = "long label";
222222
span2.fontWeight = "bold";
223-
223+
224224
const span3 = new Span();
225225
span3.text = "long label";
226-
226+
227227
const formattedString2 = new FormattedString();
228228
formattedString2.spans.push(span2);
229229
formattedString2.spans.push(span3);
@@ -733,6 +733,21 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
733733
return host;
734734
});
735735
}
736+
737+
public test_FormattedText_ShouldNotCrash_WheRemovedFromSpan() {
738+
const label = this.testView;
739+
label.color = new colorModule.Color("red");
740+
this.waitUntilTestElementIsLoaded();
741+
742+
const span = new Span();
743+
span.text = "test";
744+
745+
const formattedString = new FormattedString();
746+
formattedString.spans.push(span);
747+
748+
label._addChildFromBuilder("FormattedString", formattedString);
749+
label._removeView(formattedString);
750+
};
736751
}
737752

738753
export function createTestCase(): LabelTest {

‎tns-core-modules/ui/text-base/text-base.android.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { isString } from "../../utils/types";
1212
export * from "./text-base-common";
1313

1414
interface TextTransformation {
15-
new (owner: TextBase): android.text.method.TransformationMethod;
15+
new(owner: TextBase): android.text.method.TransformationMethod;
1616
}
1717

1818
let TextTransformation: TextTransformation;
@@ -344,7 +344,7 @@ export function getTransformedText(text: string, textTransform: TextTransform):
344344
}
345345

346346
function createSpannableStringBuilder(formattedString: FormattedString): android.text.SpannableStringBuilder {
347-
if (!formattedString) {
347+
if (!formattedString || !formattedString.parent) {
348348
return null;
349349
}
350350

‎tns-core-modules/ui/text-base/text-base.ios.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export class TextBase extends TextBaseCommon {
231231

232232
createNSMutableAttributedString(formattedString: FormattedString): NSMutableAttributedString {
233233
let mas = NSMutableAttributedString.alloc().init();
234-
if (formattedString) {
234+
if (formattedString && formattedString.parent) {
235235
for (let i = 0, spanStart = 0, length = formattedString.spans.length; i < length; i++) {
236236
const span = formattedString.spans.getItem(i);
237237
const text = span.text;

0 commit comments

Comments
 (0)