diff --git a/tests/app/ui/button/button-tests.ts b/tests/app/ui/button/button-tests.ts index e68355df0..910953396 100644 --- a/tests/app/ui/button/button-tests.ts +++ b/tests/app/ui/button/button-tests.ts @@ -78,7 +78,7 @@ var _createButtonFunc = function (): buttonModule.Button { // >>button-create var button = new buttonModule.Button(); // << button-create - button.text = "Button"; + button.text = "Button"; return button; } @@ -372,3 +372,21 @@ export function test_IntegrationTest_Transform_Decoration_Spacing_WithFormattedT TKUnit.assertEqual(view.style.letterSpacing, 1, "LetterSpacing"); }); } + +// Reported in https://github.com/NativeScript/NativeScript/issues/4109 +export function test_setting_formattedText_With_UnknownFont_DoesNotCrash() { + let btn = new buttonModule.Button(); + btn.style.fontFamily = "_UnknownFont"; + + helper.buildUIAndRunTest(btn, function (views) { + TKUnit.waitUntilReady(() => { return btn.isLayoutValid; }); + + let span = new spanModule.Span(); + span.text = "Login"; + let formattedString = new formattedStringModule.FormattedString(); + formattedString.spans.push(span); + btn.formattedText = formattedString; + + TKUnit.waitUntilReady(() => { return btn.isLayoutValid; }); + }); +} diff --git a/tests/package.json b/tests/package.json index 2e172bc7d..7057c271c 100644 --- a/tests/package.json +++ b/tests/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.tests", "tns-ios": { - "version": "2.5.0" + "version": "3.0.0" }, "tns-android": { - "version": "2.5.0" + "version": "3.0.0" } }, "dependencies": { diff --git a/tns-core-modules/ui/text-base/text-base.android.ts b/tns-core-modules/ui/text-base/text-base.android.ts index fbe646601..05a0ffa15 100644 --- a/tns-core-modules/ui/text-base/text-base.android.ts +++ b/tns-core-modules/ui/text-base/text-base.android.ts @@ -320,7 +320,8 @@ function setSpanModifiers(ssb: android.text.SpannableStringBuilder, span: Span, const fontFamily = span.fontFamily; if (fontFamily) { const font = new Font(fontFamily, 0, (italic) ? "italic" : "normal", (bold) ? "bold" : "normal"); - const typefaceSpan: android.text.style.TypefaceSpan = new org.nativescript.widgets.CustomTypefaceSpan(fontFamily, font.getAndroidTypeface()); + const typeface = font.getAndroidTypeface() || android.graphics.Typeface.create(fontFamily, 0); + const typefaceSpan: android.text.style.TypefaceSpan = new org.nativescript.widgets.CustomTypefaceSpan(fontFamily, typeface); ssb.setSpan(typefaceSpan, start, end, android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); }