From d3a2db22e79cd26869e51c2ed5c634e091aab608 Mon Sep 17 00:00:00 2001 From: Pierre-Louis <6655696+guidezpl@users.noreply.github.com> Date: Thu, 7 Jan 2021 21:59:37 +0100 Subject: [PATCH] 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 --- .../flutter/test/material/icons_test.dart | 56 +++++++++++++++++-- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/packages/flutter/test/material/icons_test.dart b/packages/flutter/test/material/icons_test.dart index 14067443b7..d489eb6956 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 @@ void main() { 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 @@ void main() { }), ); - 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 @@ void main() { 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(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 _loadIconFont() async { + final Directory flutterRoot = Directory(path.dirname(Platform.script.toFilePath())).parent.parent; + final File iconFont = File(path.joinAll([ + flutterRoot.path, + 'bin', + 'cache', + 'artifacts', + 'material_fonts', + 'MaterialIcons-Regular.otf' + ])); + + final Future bytes = Future.value( + iconFont.readAsBytesSync() + .buffer + .asByteData() + ); + + await (FontLoader('MaterialIcons')..addFont(bytes)).load(); }