blob: d903ab567e972f77745ade21c09f8b63a22366de [file] [log] [blame]
// 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();
}