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

71 lines
2.3 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/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
import 'package:flutter_test/flutter_test.dart';
void main() => defineTests();
void defineTests() {
group('Compatible with SelectionArea when selectable is default to false', () {
testWidgets(
'Text can be selected',
(WidgetTester tester) async {
SelectedContent? content;
const String data = 'How are you?';
await tester.pumpWidget(MaterialApp(
home: SelectionArea(
child: const Markdown(
data: data,
),
onSelectionChanged: (SelectedContent? selectedContent) => content = selectedContent,
)));
final TestGesture gesture =
await tester.startGesture(tester.getTopLeft(find.text('How are you?')), kind: PointerDeviceKind.mouse);
addTearDown(gesture.removePointer);
await tester.pump();
await gesture.moveTo(tester.getBottomRight(find.text('How are you?')));
await gesture.up();
await tester.pump();
expect(content, isNotNull);
expect(content!.plainText, 'How are you?');
},
);
testWidgets(
'List can be selected',
(WidgetTester tester) async {
SelectedContent? content;
const String data = '- Item 1\n- Item 2\n- Item 3';
await tester.pumpWidget(MaterialApp(
home: SelectionArea(
child: const Markdown(
data: data,
),
onSelectionChanged: (SelectedContent? selectedContent) => content = selectedContent,
)));
final TestGesture gesture =
await tester.startGesture(tester.getTopLeft(find.byType(Markdown)), kind: PointerDeviceKind.mouse);
addTearDown(gesture.removePointer);
await tester.pump();
await gesture.moveTo(tester.getBottomRight(find.byType(Markdown)));
await gesture.up();
await tester.pump();
expect(content, isNotNull);
expect(content!.plainText, '•Item 1•Item 2•Item 3');
},
);
});
}