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();
 }