twonly-app-dependencies/flutter_markdown_plus/test/text_alignment_test.dart
2026-04-22 17:15:35 +02:00

107 lines
3.2 KiB
Dart

// Copyright 2013 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/material.dart';
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
import 'package:flutter_test/flutter_test.dart';
import 'utils.dart';
void main() => defineTests();
void defineTests() {
group('Text Alignment', () {
testWidgets(
'apply text alignments from stylesheet',
(WidgetTester tester) async {
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
final MarkdownStyleSheet style1 = MarkdownStyleSheet.fromTheme(theme).copyWith(
h1Align: WrapAlignment.center,
h3Align: WrapAlignment.end,
);
const String data = '# h1\n ## h2';
await tester.pumpWidget(
boilerplate(
MarkdownBody(
data: data,
styleSheet: style1,
),
),
);
final Iterable<Widget> widgets = selfAndDescendantWidgetsOf(
find.byType(MarkdownBody),
tester,
);
expectWidgetTypes(widgets, <Type>[
MarkdownBody,
Column,
Column,
Wrap,
Text,
RichText,
SizedBox,
Column,
Wrap,
Text,
RichText,
]);
expect((widgets.firstWhere((Widget w) => w is RichText) as RichText).textAlign, TextAlign.center);
expect((widgets.last as RichText).textAlign, TextAlign.start,
reason: 'default alignment if none is set in stylesheet');
},
);
testWidgets(
'should align formatted text',
(WidgetTester tester) async {
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
final MarkdownStyleSheet style = MarkdownStyleSheet.fromTheme(theme).copyWith(
textAlign: WrapAlignment.spaceBetween,
);
const String data = 'hello __my formatted text__';
await tester.pumpWidget(
boilerplate(
MarkdownBody(
data: data,
styleSheet: style,
),
),
);
final RichText text = tester.widgetList(find.byType(RichText)).single as RichText;
expect(text.textAlign, TextAlign.justify);
},
);
testWidgets(
'should align selectable text',
(WidgetTester tester) async {
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
final MarkdownStyleSheet style = MarkdownStyleSheet.fromTheme(theme).copyWith(
textAlign: WrapAlignment.spaceBetween,
);
const String data = 'hello __my formatted text__';
await tester.pumpWidget(
boilerplate(
MediaQuery(
data: const MediaQueryData(),
child: MarkdownBody(
data: data,
styleSheet: style,
selectable: true,
),
),
),
);
final SelectableText text = tester.widgetList(find.byType(SelectableText)).single as SelectableText;
expect(text.textAlign, TextAlign.justify);
},
);
});
}