// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // See also packages/flutter_goldens/test/flutter_goldens_test.dart import 'dart:typed_data'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_goldens/flutter_goldens.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:platform/platform.dart'; // 1x1 colored pixel const List<int> _kFailPngBytes = <int>[ 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 13, 73, 68, 65, 84, 120, 1, 99, 249, 207, 240, 255, 63, 0, 7, 18, 3, 2, 164, 147, 160, 197, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, ]; void main() { final MemoryFileSystem fs = MemoryFileSystem(); final Directory basedir = fs.directory('flutter/test/library/') ..createSync(recursive: true); final FakeSkiaGoldClient fakeSkiaClient = FakeSkiaGoldClient() ..expectationForTestValues['flutter.new_golden_test.1'] = ''; final FlutterLocalFileComparator comparator = FlutterLocalFileComparator( basedir.uri, fakeSkiaClient, fs: fs, platform: FakePlatform( environment: <String, String>{'FLUTTER_ROOT': '/flutter'}, operatingSystem: 'macos' ), ); test('Local passes non-existent baseline for new test, null expectation', () async { expect( await comparator.compare( Uint8List.fromList(_kFailPngBytes), Uri.parse('flutter.new_golden_test.1.png'), ), isTrue, ); }); test('Local passes non-existent baseline for new test, empty expectation', () async { expect( await comparator.compare( Uint8List.fromList(_kFailPngBytes), Uri.parse('flutter.new_golden_test.2.png'), ), isTrue, ); }); } // See also packages/flutter_goldens/test/flutter_goldens_test.dart class FakeSkiaGoldClient extends Fake implements SkiaGoldClient { Map<String, String> expectationForTestValues = <String, String>{}; Object? getExpectationForTestThrowable; @override Future<String> getExpectationForTest(String testName) async { if (getExpectationForTestThrowable != null) { throw getExpectationForTestThrowable!; } return expectationForTestValues[testName] ?? ''; } Map<String, List<int>> imageBytesValues = <String, List<int>>{}; @override Future<List<int>> getImageBytes(String imageHash) async => imageBytesValues[imageHash]!; Map<String, String> cleanTestNameValues = <String, String>{}; @override String cleanTestName(String fileName) => cleanTestNameValues[fileName] ?? ''; }