Add material icons golden test (#73361)
* Create icons golden test
* Update icons_test.dart
* Update icons_test.dart
* Update icons_test.dart
* change test name
* Add ability to load material icon font for golden tests
* formatting
* Skip test for browser
* Add end of file newline
diff --git a/packages/flutter/test/material/icons_test.dart b/packages/flutter/test/material/icons_test.dart
index 1406744..d489eb6 100644
--- a/packages/flutter/test/material/icons_test.dart
+++ b/packages/flutter/test/material/icons_test.dart
@@ -2,8 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:io';
+
import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+
import 'package:flutter_test/flutter_test.dart';
+import 'package:path/path.dart' as path;
void main() {
testWidgets('IconData object test', (WidgetTester tester) async {
@@ -29,8 +34,7 @@
expect(Icons.access_time_sharp.matchTextDirection, false);
});
- testWidgets('Adaptive icons are correct on cupertino platforms',
- (WidgetTester tester) async {
+ testWidgets('Adaptive icons are correct on cupertino platforms', (WidgetTester tester) async {
expect(Icons.adaptive.arrow_back, Icons.arrow_back_ios);
expect(Icons.adaptive.arrow_back_outlined, Icons.arrow_back_ios_outlined);
},
@@ -40,9 +44,7 @@
}),
);
- testWidgets(
- 'Adaptive icons are correct on non-cupertino platforms',
- (WidgetTester tester) async {
+ testWidgets('Adaptive icons are correct on non-cupertino platforms', (WidgetTester tester) async {
expect(Icons.adaptive.arrow_back, Icons.arrow_back);
expect(Icons.adaptive.arrow_back_outlined, Icons.arrow_back_outlined);
},
@@ -53,4 +55,48 @@
TargetPlatform.linux,
}),
);
+
+ testWidgets('A sample of icons look as expected', (WidgetTester tester) async {
+ await _loadIconFont();
+
+ await tester.pumpWidget(MaterialApp(
+ home: IconTheme(
+ data: const IconThemeData(size: 200),
+ child: Wrap(
+ children: const <Icon>[
+ Icon(Icons.ten_k),
+ Icon(Icons.ac_unit),
+ Icon(Icons.local_taxi),
+ Icon(Icons.local_taxi_outlined),
+ Icon(Icons.local_taxi_rounded),
+ Icon(Icons.local_taxi_sharp),
+ Icon(Icons.zoom_out_sharp),
+ ],
+ ),
+ ),
+ ));
+
+ await expectLater(find.byType(Wrap), matchesGoldenFile('test.icons.sample.png'));
+ }, skip: isBrowser); // uses dart:io
+}
+
+// Loads the Material icon font. Only necessary for golden tests.
+Future<void> _loadIconFont() async {
+ final Directory flutterRoot = Directory(path.dirname(Platform.script.toFilePath())).parent.parent;
+ final File iconFont = File(path.joinAll(<String>[
+ flutterRoot.path,
+ 'bin',
+ 'cache',
+ 'artifacts',
+ 'material_fonts',
+ 'MaterialIcons-Regular.otf'
+ ]));
+
+ final Future<ByteData> bytes = Future<ByteData>.value(
+ iconFont.readAsBytesSync()
+ .buffer
+ .asByteData()
+ );
+
+ await (FontLoader('MaterialIcons')..addFont(bytes)).load();
}