image_icon_test.dart 3.39 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1 2 3 4 5 6 7 8
// 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/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

9
import '../painting/mocks_for_image_cache.dart';
10

11
const ImageProvider _kImage = TestImageProvider(21, 42);
12

Ian Hickson's avatar
Ian Hickson committed
13 14 15
void main() {
  testWidgets('ImageIcon sizing - no theme, default size', (WidgetTester tester) async {
    await tester.pumpWidget(
16
      const Center(
17
        child: ImageIcon(_kImage),
18
      ),
Ian Hickson's avatar
Ian Hickson committed
19 20
    );

21
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
22
    expect(renderObject.size, equals(const Size.square(24.0)));
23 24 25 26 27
    expect(find.byType(Image), findsOneWidget);
  });

  testWidgets('Icon opacity', (WidgetTester tester) async {
    await tester.pumpWidget(
28
      const Center(
29 30 31
        child: IconTheme(
          data: IconThemeData(opacity: 0.5),
          child: ImageIcon(_kImage),
32 33 34 35
        ),
      ),
    );

36
    final Image image = tester.widget(find.byType(Image));
37 38
    expect(image, isNotNull);
    expect(image.color.alpha, equals(128));
Ian Hickson's avatar
Ian Hickson committed
39 40 41 42
  });

  testWidgets('ImageIcon sizing - no theme, explicit size', (WidgetTester tester) async {
    await tester.pumpWidget(
43
      const Center(
44
        child: ImageIcon(
Ian Hickson's avatar
Ian Hickson committed
45
          null,
46 47
          size: 96.0,
        ),
48
      ),
Ian Hickson's avatar
Ian Hickson committed
49 50
    );

51
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
52 53 54 55 56
    expect(renderObject.size, equals(const Size.square(96.0)));
  });

  testWidgets('ImageIcon sizing - sized theme', (WidgetTester tester) async {
    await tester.pumpWidget(
57
      const Center(
58 59
        child: IconTheme(
          data: IconThemeData(size: 36.0),
60 61
          child: ImageIcon(null),
        ),
62
      ),
Ian Hickson's avatar
Ian Hickson committed
63 64
    );

65
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
66 67 68 69 70
    expect(renderObject.size, equals(const Size.square(36.0)));
  });

  testWidgets('ImageIcon sizing - sized theme, explicit size', (WidgetTester tester) async {
    await tester.pumpWidget(
71
      const Center(
72 73 74
        child: IconTheme(
          data: IconThemeData(size: 36.0),
          child: ImageIcon(
Ian Hickson's avatar
Ian Hickson committed
75
            null,
76 77 78
            size: 48.0,
          ),
        ),
79
      ),
Ian Hickson's avatar
Ian Hickson committed
80 81
    );

82
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
83 84 85 86 87
    expect(renderObject.size, equals(const Size.square(48.0)));
  });

  testWidgets('ImageIcon sizing - sizeless theme, default size', (WidgetTester tester) async {
    await tester.pumpWidget(
88
      const Center(
89 90
        child: IconTheme(
          data: IconThemeData(),
91 92
          child: ImageIcon(null),
        ),
93
      ),
Ian Hickson's avatar
Ian Hickson committed
94 95
    );

96
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
97 98
    expect(renderObject.size, equals(const Size.square(24.0)));
  });
99 100 101 102 103 104

  testWidgets('ImageIcon has semantics data', (WidgetTester tester) async {
    final SemanticsHandle handle = tester.ensureSemantics();
    await tester.pumpWidget(
      const Directionality(
        textDirection: TextDirection.ltr,
105 106 107
        child: Center(
          child: IconTheme(
            data: IconThemeData(),
108
            child: ImageIcon(null, semanticLabel: 'test'),
109 110 111 112 113
          ),
        ),
      ),
    );

114
    expect(tester.getSemantics(find.byType(ImageIcon)), matchesSemantics(
115 116 117 118 119 120
      label: 'test',
      textDirection: TextDirection.ltr,
    ));
    handle.dispose();
  });

Ian Hickson's avatar
Ian Hickson committed
121
}