aves_mio/.flutter/packages/flutter/test/widgets/widget_span_test.dart
Fabio Micheluz 2c988f959b
Some checks are pending
Quality check / Flutter analysis (push) Waiting to run
Quality check / CodeQL analysis (java-kotlin) (push) Waiting to run
first commit
2026-02-19 13:25:23 +01:00

75 lines
2.5 KiB
Dart

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('WidgetSpan codeUnitAt', () {
const InlineSpan span = WidgetSpan(child: SizedBox());
expect(span.codeUnitAt(-1), isNull);
expect(span.codeUnitAt(0), PlaceholderSpan.placeholderCodeUnit);
expect(span.codeUnitAt(1), isNull);
expect(span.codeUnitAt(2), isNull);
const InlineSpan nestedSpan = TextSpan(text: 'AAA', children: <InlineSpan>[span, span]);
expect(nestedSpan.codeUnitAt(-1), isNull);
expect(nestedSpan.codeUnitAt(0), 65);
expect(nestedSpan.codeUnitAt(1), 65);
expect(nestedSpan.codeUnitAt(2), 65);
expect(nestedSpan.codeUnitAt(3), PlaceholderSpan.placeholderCodeUnit);
expect(nestedSpan.codeUnitAt(4), PlaceholderSpan.placeholderCodeUnit);
expect(nestedSpan.codeUnitAt(5), isNull);
});
test('WidgetSpan.extractFromInlineSpan applies the correct scaling factor', () {
const a = WidgetSpan(child: SizedBox(), style: TextStyle(fontSize: 0));
const b = WidgetSpan(child: SizedBox(), style: TextStyle(fontSize: 10));
const c = WidgetSpan(child: SizedBox());
const d = WidgetSpan(child: SizedBox(), style: TextStyle(letterSpacing: 999));
const span = TextSpan(
children: <InlineSpan>[
a, // fontSize = 0.
TextSpan(
children: <InlineSpan>[
b, // fontSize = 10.
c, // fontSize = 20.
],
style: TextStyle(fontSize: 20),
),
d, // fontSize = 14.
],
);
double effectiveTextScaleFactorFromWidget(Widget widget) {
final child = (widget as ProxyWidget).child as Semantics;
final dynamic grandChild = child.child;
final textScaleFactor = grandChild.textScaleFactor as double; // ignore: avoid_dynamic_calls
return textScaleFactor;
}
final List<double> textScaleFactors = WidgetSpan.extractFromInlineSpan(
span,
const _QuadraticScaler(),
).map(effectiveTextScaleFactorFromWidget).toList();
expect(textScaleFactors, <double>[
0, // a
10, // b
20, // c
14, // d
]);
});
}
class _QuadraticScaler extends TextScaler {
const _QuadraticScaler();
@override
double scale(double fontSize) => fontSize * fontSize;
@override
double get textScaleFactor => throw UnimplementedError();
}