1// Copyright 2014 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'package:flutter/rendering.dart';
6import 'package:flutter/widgets.dart';
7import 'package:flutter_test/flutter_test.dart';
8
9import '../painting/mocks_for_image_cache.dart';
10
11void main() {
12 late ImageProvider image;
13
14 setUpAll(() async {
15 image = TestImageProvider(21, 42, image: await createTestImage(width: 10, height: 10));
16 });
17
18 testWidgets('ImageIcon sizing - no theme, default size', (WidgetTester tester) async {
19 await tester.pumpWidget(Center(child: ImageIcon(image)));
20
21 final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
22 expect(renderObject.size, equals(const Size.square(24.0)));
23 expect(find.byType(Image), findsOneWidget);
24
25 imageCache.clear();
26 });
27
28 testWidgets('Icon opacity', (WidgetTester tester) async {
29 await tester.pumpWidget(
30 Center(
31 child: IconTheme(data: const IconThemeData(opacity: 0.5), child: ImageIcon(image)),
32 ),
33 );
34
35 expect(tester.widget<Image>(find.byType(Image)).color!.alpha, equals(128));
36
37 imageCache.clear();
38 });
39
40 testWidgets('ImageIcon sizing - no theme, explicit size', (WidgetTester tester) async {
41 await tester.pumpWidget(const Center(child: ImageIcon(null, size: 96.0)));
42
43 final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
44 expect(renderObject.size, equals(const Size.square(96.0)));
45 });
46
47 testWidgets('ImageIcon sizing - sized theme', (WidgetTester tester) async {
48 await tester.pumpWidget(
49 const Center(
50 child: IconTheme(data: IconThemeData(size: 36.0), child: ImageIcon(null)),
51 ),
52 );
53
54 final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
55 expect(renderObject.size, equals(const Size.square(36.0)));
56 });
57
58 testWidgets('ImageIcon sizing - sized theme, explicit size', (WidgetTester tester) async {
59 await tester.pumpWidget(
60 const Center(
61 child: IconTheme(data: IconThemeData(size: 36.0), child: ImageIcon(null, size: 48.0)),
62 ),
63 );
64
65 final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
66 expect(renderObject.size, equals(const Size.square(48.0)));
67 });
68
69 testWidgets('ImageIcon sizing - sizeless theme, default size', (WidgetTester tester) async {
70 await tester.pumpWidget(
71 const Center(
72 child: IconTheme(data: IconThemeData(), child: ImageIcon(null)),
73 ),
74 );
75
76 final RenderBox renderObject = tester.renderObject(find.byType(ImageIcon));
77 expect(renderObject.size, equals(const Size.square(24.0)));
78 });
79
80 testWidgets('ImageIcon has semantics data', (WidgetTester tester) async {
81 final SemanticsHandle handle = tester.ensureSemantics();
82 await tester.pumpWidget(
83 const Directionality(
84 textDirection: TextDirection.ltr,
85 child: Center(
86 child: IconTheme(
87 data: IconThemeData(),
88 child: ImageIcon(null, semanticLabel: 'test'),
89 ),
90 ),
91 ),
92 );
93
94 expect(
95 tester.getSemantics(find.byType(ImageIcon)),
96 matchesSemantics(label: 'test', textDirection: TextDirection.ltr),
97 );
98 handle.dispose();
99 });
100}
101