hyperlink_test.dart 1.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
// Copyright 2015 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.

import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:test/test.dart';

void main() {
  test('Can tap a hyperlink', () {
    testWidgets((WidgetTester tester) {
      bool didTapLeft = false;
14 15
      TapGestureRecognizer tapLeft = new TapGestureRecognizer()
        ..onTap = () {
16
          didTapLeft = true;
17
        };
18 19

      bool didTapRight = false;
20 21
      TapGestureRecognizer tapRight = new TapGestureRecognizer()
        ..onTap = () {
22
          didTapRight = true;
23
        };
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

      Key textKey = new Key('text');

      tester.pumpWidget(
        new Center(
          child: new RichText(
            key: textKey,
            text: new TextSpan(
              children: <TextSpan>[
                new TextSpan(
                  text: 'xxxxxxxx',
                  recognizer: tapLeft
                ),
                new TextSpan(text: 'yyyyyyyy'),
                new TextSpan(
                  text: 'zzzzzzzzz',
                  recognizer: tapRight
                ),
              ]
            )
          )
        )
      );

48
      RenderBox box = tester.renderObjectOf(find.byKey(textKey));
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

      expect(didTapLeft, isFalse);
      expect(didTapRight, isFalse);

      tester.tapAt(box.localToGlobal(Point.origin) + new Offset(2.0, 2.0));

      expect(didTapLeft, isTrue);
      expect(didTapRight, isFalse);

      didTapLeft = false;

      tester.tapAt(box.localToGlobal(Point.origin) + new Offset(30.0, 2.0));

      expect(didTapLeft, isTrue);
      expect(didTapRight, isFalse);

      didTapLeft = false;

      tester.tapAt(box.localToGlobal(new Point(box.size.width, 0.0)) + new Offset(-2.0, 2.0));

      expect(didTapLeft, isFalse);
      expect(didTapRight, isTrue);
    });
  });
}