| // 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 WidgetSpan a = WidgetSpan(child: SizedBox(), style: TextStyle(fontSize: 0)); |
| const WidgetSpan b = WidgetSpan(child: SizedBox(), style: TextStyle(fontSize: 10)); |
| const WidgetSpan c = WidgetSpan(child: SizedBox()); |
| const WidgetSpan d = WidgetSpan(child: SizedBox(), style: TextStyle(letterSpacing: 999)); |
| |
| const TextSpan 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 Semantics child = (widget as ProxyWidget).child as Semantics; |
| final dynamic grandChild = child.child; |
| final double 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(); |
| } |