From 1cabaccc6540fb48e445290454c85ba6a4701bc8 Mon Sep 17 00:00:00 2001 From: Victor Eronmosele Date: Thu, 18 Jul 2024 00:40:22 +0100 Subject: [PATCH] Conditonally import tolerant comparator per platform in rfw's material_widget_test.dart --- packages/rfw/test/material_widgets_test.dart | 2 + packages/rfw/test/tolerant_comparator.dart | 56 +++++++++++++++++++ .../rfw/test/tolerant_comparator_web.dart | 6 ++ packages/rfw/test/utils.dart | 53 ------------------ 4 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 packages/rfw/test/tolerant_comparator.dart create mode 100644 packages/rfw/test/tolerant_comparator_web.dart diff --git a/packages/rfw/test/material_widgets_test.dart b/packages/rfw/test/material_widgets_test.dart index 43a451e0f6bc..e3c168805d55 100644 --- a/packages/rfw/test/material_widgets_test.dart +++ b/packages/rfw/test/material_widgets_test.dart @@ -9,6 +9,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:rfw/formats.dart' show parseLibraryFile; import 'package:rfw/rfw.dart'; +import 'tolerant_comparator.dart' + if (dart.library.js_interop) 'tolerant_comparator_web.dart'; import 'utils.dart'; void main() { diff --git a/packages/rfw/test/tolerant_comparator.dart b/packages/rfw/test/tolerant_comparator.dart new file mode 100644 index 000000000000..0c8cbee97c3a --- /dev/null +++ b/packages/rfw/test/tolerant_comparator.dart @@ -0,0 +1,56 @@ +// Copyright 2013 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. + +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; + +/// Sets [_TolerantGoldenFileComparator] as the default golden file comparator +/// in tests. +void setUpTolerantComparator( + {required String testPath, required double precisionTolerance}) { + final GoldenFileComparator oldComparator = goldenFileComparator; + final _TolerantGoldenFileComparator newComparator = + _TolerantGoldenFileComparator(Uri.parse(testPath), + precisionTolerance: precisionTolerance); + + goldenFileComparator = newComparator; + + addTearDown(() => goldenFileComparator = oldComparator); +} + +class _TolerantGoldenFileComparator extends LocalFileComparator { + _TolerantGoldenFileComparator( + super.testFile, { + required double precisionTolerance, + }) : assert( + 0 <= precisionTolerance && precisionTolerance <= 1, + 'precisionTolerance must be between 0 and 1', + ), + _precisionTolerance = precisionTolerance; + + /// How much the golden image can differ from the test image. + /// + /// It is expected to be between 0 and 1. Where 0 is no difference (the same image) + /// and 1 is the maximum difference (completely different images). + final double _precisionTolerance; + + @override + Future compare(Uint8List imageBytes, Uri golden) async { + final ComparisonResult result = await GoldenFileComparator.compareLists( + imageBytes, + await getGoldenBytes(golden), + ); + + final bool passed = + result.passed || result.diffPercent <= _precisionTolerance; + if (passed) { + result.dispose(); + return true; + } + + final String error = await generateFailureOutput(result, golden, basedir); + result.dispose(); + throw FlutterError(error); + } +} diff --git a/packages/rfw/test/tolerant_comparator_web.dart b/packages/rfw/test/tolerant_comparator_web.dart new file mode 100644 index 000000000000..7de664968712 --- /dev/null +++ b/packages/rfw/test/tolerant_comparator_web.dart @@ -0,0 +1,6 @@ +// Copyright 2013 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. + +void setUpTolerantComparator( + {required String testPath, required double precisionTolerance}) {} diff --git a/packages/rfw/test/utils.dart b/packages/rfw/test/utils.dart index 0652a2178c60..a27455cf3e39 100644 --- a/packages/rfw/test/utils.dart +++ b/packages/rfw/test/utils.dart @@ -5,7 +5,6 @@ import 'dart:io' show Platform; import 'package:flutter/foundation.dart'; -import 'package:flutter_test/flutter_test.dart'; // Detects if we're running the tests on the main channel. // @@ -22,55 +21,3 @@ bool get isMainChannel { // See Contributing section of README.md file. final bool runGoldens = !kIsWeb && Platform.isLinux && isMainChannel; - -/// Sets [_TolerantGoldenFileComparator] as the default golden file comparator -/// in tests. -void setUpTolerantComparator( - {required String testPath, required double precisionTolerance}) { - if (!kIsWeb) { - final GoldenFileComparator oldComparator = goldenFileComparator; - final _TolerantGoldenFileComparator newComparator = - _TolerantGoldenFileComparator(Uri.parse(testPath), - precisionTolerance: precisionTolerance); - - goldenFileComparator = newComparator; - - addTearDown(() => goldenFileComparator = oldComparator); - } -} - -class _TolerantGoldenFileComparator extends LocalFileComparator { - _TolerantGoldenFileComparator( - super.testFile, { - required double precisionTolerance, - }) : assert( - 0 <= precisionTolerance && precisionTolerance <= 1, - 'precisionTolerance must be between 0 and 1', - ), - _precisionTolerance = precisionTolerance; - - /// How much the golden image can differ from the test image. - /// - /// It is expected to be between 0 and 1. Where 0 is no difference (the same image) - /// and 1 is the maximum difference (completely different images). - final double _precisionTolerance; - - @override - Future compare(Uint8List imageBytes, Uri golden) async { - final ComparisonResult result = await GoldenFileComparator.compareLists( - imageBytes, - await getGoldenBytes(golden), - ); - - final bool passed = - result.passed || result.diffPercent <= _precisionTolerance; - if (passed) { - result.dispose(); - return true; - } - - final String error = await generateFailureOutput(result, golden, basedir); - result.dispose(); - throw FlutterError(error); - } -}