| // 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/gestures.dart'; |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| testWidgets('Can tap a hyperlink', (WidgetTester tester) async { |
| bool didTapLeft = false; |
| final TapGestureRecognizer tapLeft = TapGestureRecognizer() |
| ..onTap = () { |
| didTapLeft = true; |
| }; |
| |
| bool didTapRight = false; |
| final TapGestureRecognizer tapRight = TapGestureRecognizer() |
| ..onTap = () { |
| didTapRight = true; |
| }; |
| |
| const Key textKey = Key('text'); |
| |
| await tester.pumpWidget( |
| Center( |
| child: RichText( |
| key: textKey, |
| textDirection: TextDirection.ltr, |
| text: TextSpan( |
| children: <TextSpan>[ |
| TextSpan( |
| text: 'xxxxxxxx', |
| recognizer: tapLeft, |
| ), |
| const TextSpan(text: 'yyyyyyyy'), |
| TextSpan( |
| text: 'zzzzzzzzz', |
| recognizer: tapRight, |
| ), |
| ], |
| ), |
| ), |
| ), |
| ); |
| |
| final RenderBox box = tester.renderObject(find.byKey(textKey)); |
| |
| expect(didTapLeft, isFalse); |
| expect(didTapRight, isFalse); |
| |
| await tester.tapAt(box.localToGlobal(Offset.zero) + const Offset(2.0, 2.0)); |
| |
| expect(didTapLeft, isTrue); |
| expect(didTapRight, isFalse); |
| |
| didTapLeft = false; |
| |
| await tester.tapAt(box.localToGlobal(Offset.zero) + const Offset(30.0, 2.0)); |
| |
| expect(didTapLeft, isTrue); |
| expect(didTapRight, isFalse); |
| |
| didTapLeft = false; |
| |
| await tester.tapAt(box.localToGlobal(Offset(box.size.width, 0.0)) + const Offset(-2.0, 2.0)); |
| |
| expect(didTapLeft, isFalse); |
| expect(didTapRight, isTrue); |
| }); |
| } |