image_icon_test.dart 3.44 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
Ian Hickson's avatar
Ian Hickson committed
2 3 4 5 6 7 8
// 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


Ian Hickson's avatar
Ian Hickson committed
12
void main() {
13
  late ImageProvider image;
14 15

  setUpAll(() async {
16
    image = TestImageProvider(
17 18 19 20 21 22
      21,
      42,
      image: await createTestImage(width: 10, height: 10),
    );
  });

23
  testWidgets('ImageIcon sizing - no theme, default size', (WidgetTester tester) async {
Ian Hickson's avatar
Ian Hickson committed
24
    await tester.pumpWidget(
25
      Center(
26
        child: ImageIcon(image),
27
      ),
Ian Hickson's avatar
Ian Hickson committed
28 29
    );

30
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
31
    expect(renderObject.size, equals(const Size.square(24.0)));
32 33 34
    expect(find.byType(Image), findsOneWidget);
  });

35
  testWidgets('Icon opacity', (WidgetTester tester) async {
36
    await tester.pumpWidget(
37
      Center(
38
        child: IconTheme(
39
          data: const IconThemeData(opacity: 0.5),
40
          child: ImageIcon(image),
41 42 43 44
        ),
      ),
    );

45
    expect(tester.widget<Image>(find.byType(Image)).color!.alpha, equals(128));
Ian Hickson's avatar
Ian Hickson committed
46 47
  });

48
  testWidgets('ImageIcon sizing - no theme, explicit size', (WidgetTester tester) async {
Ian Hickson's avatar
Ian Hickson committed
49
    await tester.pumpWidget(
50
      const Center(
51
        child: ImageIcon(
Ian Hickson's avatar
Ian Hickson committed
52
          null,
53 54
          size: 96.0,
        ),
55
      ),
Ian Hickson's avatar
Ian Hickson committed
56 57
    );

58
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
59 60 61
    expect(renderObject.size, equals(const Size.square(96.0)));
  });

62
  testWidgets('ImageIcon sizing - sized theme', (WidgetTester tester) async {
Ian Hickson's avatar
Ian Hickson committed
63
    await tester.pumpWidget(
64
      const Center(
65 66
        child: IconTheme(
          data: IconThemeData(size: 36.0),
67 68
          child: ImageIcon(null),
        ),
69
      ),
Ian Hickson's avatar
Ian Hickson committed
70 71
    );

72
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
73 74 75
    expect(renderObject.size, equals(const Size.square(36.0)));
  });

76
  testWidgets('ImageIcon sizing - sized theme, explicit size', (WidgetTester tester) async {
Ian Hickson's avatar
Ian Hickson committed
77
    await tester.pumpWidget(
78
      const Center(
79 80 81
        child: IconTheme(
          data: IconThemeData(size: 36.0),
          child: ImageIcon(
Ian Hickson's avatar
Ian Hickson committed
82
            null,
83 84 85
            size: 48.0,
          ),
        ),
86
      ),
Ian Hickson's avatar
Ian Hickson committed
87 88
    );

89
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
90 91 92
    expect(renderObject.size, equals(const Size.square(48.0)));
  });

93
  testWidgets('ImageIcon sizing - sizeless theme, default size', (WidgetTester tester) async {
Ian Hickson's avatar
Ian Hickson committed
94
    await tester.pumpWidget(
95
      const Center(
96 97
        child: IconTheme(
          data: IconThemeData(),
98 99
          child: ImageIcon(null),
        ),
100
      ),
Ian Hickson's avatar
Ian Hickson committed
101 102
    );

103
    final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
Ian Hickson's avatar
Ian Hickson committed
104 105
    expect(renderObject.size, equals(const Size.square(24.0)));
  });
106

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

121
    expect(tester.getSemantics(find.byType(ImageIcon)), matchesSemantics(
122 123 124 125 126 127
      label: 'test',
      textDirection: TextDirection.ltr,
    ));
    handle.dispose();
  });

Ian Hickson's avatar
Ian Hickson committed
128
}