| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // @dart = 2.6 |
| import 'dart:ui'; |
| |
| import 'package:test/test.dart'; |
| |
| void main() { |
| // Ahem font uses a constant ideographic/alphabetic baseline ratio. |
| const double kAhemBaselineRatio = 1.25; |
| |
| test('predictably lays out a single-line paragraph', () { |
| for (double fontSize in <double>[10.0, 20.0, 30.0, 40.0]) { |
| final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle( |
| fontFamily: 'Ahem', |
| fontStyle: FontStyle.normal, |
| fontWeight: FontWeight.normal, |
| fontSize: fontSize, |
| )); |
| builder.addText('Test'); |
| final Paragraph paragraph = builder.build(); |
| paragraph.layout(const ParagraphConstraints(width: 400.0)); |
| |
| expect(paragraph.height, closeTo(fontSize, 0.001)); |
| expect(paragraph.width, closeTo(400.0, 0.001)); |
| expect(paragraph.minIntrinsicWidth, closeTo(fontSize * 4.0, 0.001)); |
| expect(paragraph.maxIntrinsicWidth, closeTo(fontSize * 4.0, 0.001)); |
| expect(paragraph.alphabeticBaseline, closeTo(fontSize * .8, 0.001)); |
| expect( |
| paragraph.ideographicBaseline, |
| closeTo(paragraph.alphabeticBaseline * kAhemBaselineRatio, 0.001), |
| ); |
| } |
| }); |
| |
| test('predictably lays out a multi-line paragraph', () { |
| for (double fontSize in <double>[10.0, 20.0, 30.0, 40.0]) { |
| final ParagraphBuilder builder = ParagraphBuilder(ParagraphStyle( |
| fontFamily: 'Ahem', |
| fontStyle: FontStyle.normal, |
| fontWeight: FontWeight.normal, |
| fontSize: fontSize, |
| )); |
| builder.addText('Test Ahem'); |
| final Paragraph paragraph = builder.build(); |
| paragraph.layout(ParagraphConstraints(width: fontSize * 5.0)); |
| |
| expect(paragraph.height, closeTo(fontSize * 2.0, 0.001)); // because it wraps |
| expect(paragraph.width, closeTo(fontSize * 5.0, 0.001)); |
| expect(paragraph.minIntrinsicWidth, closeTo(fontSize * 4.0, 0.001)); |
| |
| // TODO(yjbanov): see https://github.com/flutter/flutter/issues/21965 |
| expect(paragraph.maxIntrinsicWidth, closeTo(fontSize * 9.0, 0.001)); |
| expect(paragraph.alphabeticBaseline, closeTo(fontSize * .8, 0.001)); |
| expect( |
| paragraph.ideographicBaseline, |
| closeTo(paragraph.alphabeticBaseline * kAhemBaselineRatio, 0.001), |
| ); |
| } |
| }); |
| } |