import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
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;
final double _precisionTolerance;
@override
Future<bool> 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);
}
}