Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit cffd1dc

Browse files
Pass the flutter test font by default. (#51671)
In the default case, where no fonts are specified, we should specify the flutter test font. This fixes a swath of framework tests in skwasm.
1 parent 8583a45 commit cffd1dc

2 files changed

Lines changed: 65 additions & 22 deletions

File tree

lib/web_ui/lib/src/engine/skwasm/skwasm_impl/paragraph.dart

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ const int _kSoftLineBreak = 0;
1515
const int _kHardLineBreak = 100;
1616

1717
final List<String> _testFonts = <String>['FlutterTest', 'Ahem'];
18-
String _computeEffectiveFontFamily(String fontFamily) {
19-
return ui_web.debugEmulateFlutterTesterEnvironment && !_testFonts.contains(fontFamily)
20-
? _testFonts.first
21-
: fontFamily;
18+
List<String> _computeEffectiveFontFamilies(List<String> fontFamilies) {
19+
if (!ui_web.debugEmulateFlutterTesterEnvironment) {
20+
return fontFamilies;
21+
}
22+
final Iterable<String> filteredFonts = fontFamilies.where(_testFonts.contains);
23+
return filteredFonts.isEmpty ? _testFonts : filteredFonts.toList();
2224
}
2325

2426
class SkwasmLineMetrics extends SkwasmObjectWrapper<RawLineMetrics> implements ui.LineMetrics {
@@ -359,7 +361,7 @@ class SkwasmTextStyle implements ui.TextStyle {
359361
textStyleSetTextBaseline(handle, textBaseline!.index);
360362
}
361363

362-
final List<String> effectiveFontFamilies = fontFamilies;
364+
final List<String> effectiveFontFamilies = _computeEffectiveFontFamilies(fontFamilies);
363365
if (effectiveFontFamilies.isNotEmpty) {
364366
withScopedFontList(effectiveFontFamilies,
365367
(Pointer<SkStringHandle> families, int count) =>
@@ -438,8 +440,8 @@ class SkwasmTextStyle implements ui.TextStyle {
438440
}
439441

440442
List<String> get fontFamilies => <String>[
441-
if (fontFamily != null) _computeEffectiveFontFamily(fontFamily!),
442-
if (fontFamilyFallback != null) ...fontFamilyFallback!.map(_computeEffectiveFontFamily),
443+
if (fontFamily != null) fontFamily!,
444+
if (fontFamilyFallback != null) ...fontFamilyFallback!,
443445
];
444446

445447
final ui.Color? color;
@@ -576,16 +578,13 @@ final class SkwasmStrutStyle extends SkwasmObjectWrapper<RawStrutStyle> implemen
576578
ui.TextLeadingDistribution? leadingDistribution,
577579
}) {
578580
final StrutStyleHandle handle = strutStyleCreate();
579-
if (fontFamily != null || fontFamilyFallback != null) {
580-
final List<String> fontFamilies = <String>[
581-
if (fontFamily != null) fontFamily,
582-
if (fontFamilyFallback != null) ...fontFamilyFallback,
583-
];
584-
if (fontFamilies.isNotEmpty) {
585-
withScopedFontList(fontFamilies,
586-
(Pointer<SkStringHandle> families, int count) =>
587-
strutStyleSetFontFamilies(handle, families, count));
588-
}
581+
final List<String> effectiveFontFamilies = _computeEffectiveFontFamilies(<String>[
582+
if (fontFamily != null) fontFamily,
583+
if (fontFamilyFallback != null) ...fontFamilyFallback,
584+
]);
585+
if (effectiveFontFamilies.isNotEmpty) {
586+
withScopedFontList(effectiveFontFamilies, (Pointer<SkStringHandle> families, int count) =>
587+
strutStyleSetFontFamilies(handle, families, count));
589588
}
590589
if (fontSize != null) {
591590
strutStyleSetFontSize(handle, fontSize);
@@ -728,9 +727,11 @@ class SkwasmParagraphStyle extends SkwasmObjectWrapper<RawParagraphStyle> implem
728727
(renderer.fontCollection as SkwasmFontCollection).defaultTextStyle.copy();
729728
final TextStyleHandle textStyleHandle = textStyle.handle;
730729

731-
if (fontFamily != null) {
732-
withScopedFontList(<String>[fontFamily],
733-
(Pointer<SkStringHandle> families, int count) =>
730+
final List<String> effectiveFontFamilies = _computeEffectiveFontFamilies(<String>[
731+
if (fontFamily != null) fontFamily
732+
]);
733+
if (effectiveFontFamilies.isNotEmpty) {
734+
withScopedFontList(effectiveFontFamilies, (Pointer<SkStringHandle> families, int count) =>
734735
textStyleAddFontFamilies(textStyleHandle, families, count));
735736
}
736737
if (fontSize != null) {

lib/web_ui/test/ui/line_metrics_test.dart

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:test/bootstrap/browser.dart';
66
import 'package:test/test.dart';
77
import 'package:ui/ui.dart' as ui;
8+
import 'package:ui/ui_web/src/ui_web/testing.dart';
89

910
import '../common/test_initialization.dart';
1011
import 'utils.dart';
@@ -117,22 +118,63 @@ Future<void> testMain() async {
117118
}
118119
}, skip: isHtml); // The rounding hack doesn't apply to the html renderer
119120

120-
test('uses flutter test fonts when debugEmulateFlutterTesterEnvironment is enabled', () {
121+
test('overrides with flutter test font when debugEmulateFlutterTesterEnvironment is enabled', () {
121122
final ui.ParagraphBuilder builder = ui.ParagraphBuilder(ui.ParagraphStyle());
122123
builder.pushStyle(ui.TextStyle(
123124
fontSize: 10.0,
124-
fontFamily: 'SomeOtherFontFamily',
125+
fontFamily: 'Roboto',
125126
));
126127
builder.addText('XXXX');
127128
final ui.Paragraph paragraph = builder.build();
128129
paragraph.layout(const ui.ParagraphConstraints(width: 400));
129130

130131
expect(paragraph.numberOfLines, 1);
132+
expect(paragraph.height, 10);
131133

132134
final ui.LineMetrics? metrics = paragraph.getLineMetricsAt(0);
133135
expect(metrics, isNotNull);
134136

135137
// FlutterTest font's 'X' character is a square, so it's the font size (10.0) * 4 characters.
136138
expect(metrics!.width, 40.0);
137139
});
140+
141+
test('uses flutter test font by default when debugEmulateFlutterTesterEnvironment is enabled', () {
142+
final ui.ParagraphBuilder builder = ui.ParagraphBuilder(ui.ParagraphStyle());
143+
builder.pushStyle(ui.TextStyle(
144+
fontSize: 10.0,
145+
));
146+
builder.addText('XXXX');
147+
final ui.Paragraph paragraph = builder.build();
148+
paragraph.layout(const ui.ParagraphConstraints(width: 400));
149+
150+
expect(paragraph.numberOfLines, 1);
151+
expect(paragraph.height, 10);
152+
153+
final ui.LineMetrics? metrics = paragraph.getLineMetricsAt(0);
154+
expect(metrics, isNotNull);
155+
156+
// FlutterTest font's 'X' character is a square, so it's the font size (10.0) * 4 characters.
157+
expect(metrics!.width, 40.0);
158+
});
159+
160+
test('uses specified font when debugEmulateFlutterTesterEnvironment is disabled', () {
161+
debugEmulateFlutterTesterEnvironment = false;
162+
163+
final ui.ParagraphBuilder builder = ui.ParagraphBuilder(ui.ParagraphStyle());
164+
builder.pushStyle(ui.TextStyle(
165+
fontSize: 16.0,
166+
fontFamily: 'Roboto',
167+
));
168+
builder.addText('O');
169+
final ui.Paragraph paragraph = builder.build();
170+
paragraph.layout(const ui.ParagraphConstraints(width: 400));
171+
172+
expect(paragraph.numberOfLines, 1);
173+
174+
final ui.LineMetrics? metrics = paragraph.getLineMetricsAt(0);
175+
expect(metrics, isNotNull);
176+
177+
// In Roboto, the width should be 11 here. In the test font, it would be square (16 points)
178+
expect(metrics!.width, 11);
179+
}, solo: true);
138180
}

0 commit comments

Comments
 (0)