From 1b4a774e45efbf156a2859b5fcdd7bd923ddaf48 Mon Sep 17 00:00:00 2001 From: Abdelaziz GACEMI Date: Tue, 19 Sep 2023 15:41:47 +0200 Subject: [PATCH] fix: Prefer delegation implementation to allow comparator extension (#742) --- .../__brick__/test/.test_optimizer.dart | 23 ++++++++++--------- .../test/templates/test_optimizer_bundle.dart | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/bricks/test_optimizer/__brick__/test/.test_optimizer.dart b/bricks/test_optimizer/__brick__/test/.test_optimizer.dart index ab522030..22e57074 100644 --- a/bricks/test_optimizer/__brick__/test/.test_optimizer.dart +++ b/bricks/test_optimizer/__brick__/test/.test_optimizer.dart @@ -2,6 +2,7 @@ // Consider adding this file to your .gitignore. {{#isFlutter}}import 'dart:io'; +import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; {{/isFlutter}}{{^isFlutter}}import 'package:test/test.dart';{{/isFlutter}} @@ -9,23 +10,17 @@ import 'package:flutter_test/flutter_test.dart'; {{#tests}}import '{{{path}}}' as {{identifier}}; {{/tests}} void main() { -{{#isFlutter}} goldenFileComparator = _TestOptimizationAwareGoldenFileComparator();{{/isFlutter}} +{{#isFlutter}} goldenFileComparator = _TestOptimizationAwareGoldenFileComparator(goldenFileComparator as LocalFileComparator);{{/isFlutter}} {{#tests}} group('{{{path}}}', () { {{identifier}}.main(); }); {{/tests}}} {{#isFlutter}} -class _TestOptimizationAwareGoldenFileComparator extends LocalFileComparator { +class _TestOptimizationAwareGoldenFileComparator extends GoldenFileComparator { final List goldenFilePaths; + final LocalFileComparator previousGoldenFileComparator; - _TestOptimizationAwareGoldenFileComparator() - : goldenFilePaths = _goldenFilePaths, - super(_testFile); - - static Uri get _testFile { - final basedir = - (goldenFileComparator as LocalFileComparator).basedir.toString(); - return Uri.parse("$basedir/.test_optimizer.dart"); - } + _TestOptimizationAwareGoldenFileComparator(this.previousGoldenFileComparator) + : goldenFilePaths = _goldenFilePaths; static List get _goldenFilePaths => Directory.fromUri((goldenFileComparator as LocalFileComparator).basedir) @@ -34,6 +29,8 @@ class _TestOptimizationAwareGoldenFileComparator extends LocalFileComparator { .map((file) => file.path) .where((path) => path.endsWith('.png')) .toList(); + @override + Future compare(Uint8List imageBytes, Uri golden) => previousGoldenFileComparator.compare(imageBytes, golden); @override Uri getTestUri(Uri key, int? version) { @@ -41,5 +38,9 @@ class _TestOptimizationAwareGoldenFileComparator extends LocalFileComparator { return Uri.parse(goldenFilePaths .singleWhere((goldenFilePath) => goldenFilePath.endsWith(keyString))); } + + @override + Future update(Uri golden, Uint8List imageBytes) => previousGoldenFileComparator.update(golden, imageBytes); + } {{/isFlutter}} \ No newline at end of file diff --git a/lib/src/commands/test/templates/test_optimizer_bundle.dart b/lib/src/commands/test/templates/test_optimizer_bundle.dart index ebe1f829..222e8a20 100644 --- a/lib/src/commands/test/templates/test_optimizer_bundle.dart +++ b/lib/src/commands/test/templates/test_optimizer_bundle.dart @@ -9,7 +9,7 @@ final testOptimizerBundle = MasonBundle.fromJson({ { "path": "test/.test_optimizer.dart", "data": - "Ly8gR0VORVJBVEVEIENPREUgLSBETyBOT1QgTU9ESUZZIEJZIEhBTkQKLy8gQ29uc2lkZXIgYWRkaW5nIHRoaXMgZmlsZSB0byB5b3VyIC5naXRpZ25vcmUuCgp7eyNpc0ZsdXR0ZXJ9fWltcG9ydCAnZGFydDppbyc7CgppbXBvcnQgJ3BhY2thZ2U6Zmx1dHRlcl90ZXN0L2ZsdXR0ZXJfdGVzdC5kYXJ0JzsKe3svaXNGbHV0dGVyfX17e15pc0ZsdXR0ZXJ9fWltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7e3svaXNGbHV0dGVyfX0KCnt7I3Rlc3RzfX1pbXBvcnQgJ3t7e3BhdGh9fX0nIGFzIHt7aWRlbnRpZmllcn19Owp7ey90ZXN0c319CnZvaWQgbWFpbigpIHsKe3sjaXNGbHV0dGVyfX0gIGdvbGRlbkZpbGVDb21wYXJhdG9yID0gX1Rlc3RPcHRpbWl6YXRpb25Bd2FyZUdvbGRlbkZpbGVDb21wYXJhdG9yKCk7e3svaXNGbHV0dGVyfX0Ke3sjdGVzdHN9fSAgZ3JvdXAoJ3t7e3BhdGh9fX0nLCAoKSB7IHt7aWRlbnRpZmllcn19Lm1haW4oKTsgfSk7Cnt7L3Rlc3RzfX19Cgp7eyNpc0ZsdXR0ZXJ9fQpjbGFzcyBfVGVzdE9wdGltaXphdGlvbkF3YXJlR29sZGVuRmlsZUNvbXBhcmF0b3IgZXh0ZW5kcyBMb2NhbEZpbGVDb21wYXJhdG9yIHsKICBmaW5hbCBMaXN0PFN0cmluZz4gZ29sZGVuRmlsZVBhdGhzOwoKICBfVGVzdE9wdGltaXphdGlvbkF3YXJlR29sZGVuRmlsZUNvbXBhcmF0b3IoKQogICAgICA6IGdvbGRlbkZpbGVQYXRocyA9IF9nb2xkZW5GaWxlUGF0aHMsCiAgICAgICAgc3VwZXIoX3Rlc3RGaWxlKTsKCiAgc3RhdGljIFVyaSBnZXQgX3Rlc3RGaWxlIHsKICAgIGZpbmFsIGJhc2VkaXIgPQogICAgICAgIChnb2xkZW5GaWxlQ29tcGFyYXRvciBhcyBMb2NhbEZpbGVDb21wYXJhdG9yKS5iYXNlZGlyLnRvU3RyaW5nKCk7CiAgICByZXR1cm4gVXJpLnBhcnNlKCIkYmFzZWRpci8udGVzdF9vcHRpbWl6ZXIuZGFydCIpOwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXQgX2dvbGRlbkZpbGVQYXRocyA9PgogICAgICBEaXJlY3RvcnkuZnJvbVVyaSgoZ29sZGVuRmlsZUNvbXBhcmF0b3IgYXMgTG9jYWxGaWxlQ29tcGFyYXRvcikuYmFzZWRpcikKICAgICAgICAgIC5saXN0U3luYyhyZWN1cnNpdmU6IHRydWUsIGZvbGxvd0xpbmtzOiB0cnVlKQogICAgICAgICAgLndoZXJlVHlwZTxGaWxlPigpCiAgICAgICAgICAubWFwKChmaWxlKSA9PiBmaWxlLnBhdGgpCiAgICAgICAgICAud2hlcmUoKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoJy5wbmcnKSkKICAgICAgICAgIC50b0xpc3QoKTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldFRlc3RVcmkoVXJpIGtleSwgaW50PyB2ZXJzaW9uKSB7CiAgICBmaW5hbCBrZXlTdHJpbmcgPSBrZXkudG9GaWxlUGF0aCgpOwogICAgcmV0dXJuIFVyaS5wYXJzZShnb2xkZW5GaWxlUGF0aHMKICAgICAgICAuc2luZ2xlV2hlcmUoKGdvbGRlbkZpbGVQYXRoKSA9PiBnb2xkZW5GaWxlUGF0aC5lbmRzV2l0aChrZXlTdHJpbmcpKSk7CiAgfQp9Cnt7L2lzRmx1dHRlcn19", + "Ly8gR0VORVJBVEVEIENPREUgLSBETyBOT1QgTU9ESUZZIEJZIEhBTkQKLy8gQ29uc2lkZXIgYWRkaW5nIHRoaXMgZmlsZSB0byB5b3VyIC5naXRpZ25vcmUuCgp7eyNpc0ZsdXR0ZXJ9fWltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAncGFja2FnZTpmbHV0dGVyX3Rlc3QvZmx1dHRlcl90ZXN0LmRhcnQnOwp7ey9pc0ZsdXR0ZXJ9fXt7XmlzRmx1dHRlcn19aW1wb3J0ICdwYWNrYWdlOnRlc3QvdGVzdC5kYXJ0Jzt7ey9pc0ZsdXR0ZXJ9fQoKe3sjdGVzdHN9fWltcG9ydCAne3t7cGF0aH19fScgYXMge3tpZGVudGlmaWVyfX07Cnt7L3Rlc3RzfX0Kdm9pZCBtYWluKCkgewp7eyNpc0ZsdXR0ZXJ9fSAgZ29sZGVuRmlsZUNvbXBhcmF0b3IgPSBfVGVzdE9wdGltaXphdGlvbkF3YXJlR29sZGVuRmlsZUNvbXBhcmF0b3IoZ29sZGVuRmlsZUNvbXBhcmF0b3IgYXMgTG9jYWxGaWxlQ29tcGFyYXRvcik7e3svaXNGbHV0dGVyfX0Ke3sjdGVzdHN9fSAgZ3JvdXAoJ3t7e3BhdGh9fX0nLCAoKSB7IHt7aWRlbnRpZmllcn19Lm1haW4oKTsgfSk7Cnt7L3Rlc3RzfX19Cgp7eyNpc0ZsdXR0ZXJ9fQpjbGFzcyBfVGVzdE9wdGltaXphdGlvbkF3YXJlR29sZGVuRmlsZUNvbXBhcmF0b3IgZXh0ZW5kcyBHb2xkZW5GaWxlQ29tcGFyYXRvciB7CiAgZmluYWwgTGlzdDxTdHJpbmc+IGdvbGRlbkZpbGVQYXRoczsKICBmaW5hbCBMb2NhbEZpbGVDb21wYXJhdG9yIHByZXZpb3VzR29sZGVuRmlsZUNvbXBhcmF0b3I7CgogIF9UZXN0T3B0aW1pemF0aW9uQXdhcmVHb2xkZW5GaWxlQ29tcGFyYXRvcih0aGlzLnByZXZpb3VzR29sZGVuRmlsZUNvbXBhcmF0b3IpCiAgICAgIDogZ29sZGVuRmlsZVBhdGhzID0gX2dvbGRlbkZpbGVQYXRoczsKCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXQgX2dvbGRlbkZpbGVQYXRocyA9PgogICAgICBEaXJlY3RvcnkuZnJvbVVyaSgoZ29sZGVuRmlsZUNvbXBhcmF0b3IgYXMgTG9jYWxGaWxlQ29tcGFyYXRvcikuYmFzZWRpcikKICAgICAgICAgIC5saXN0U3luYyhyZWN1cnNpdmU6IHRydWUsIGZvbGxvd0xpbmtzOiB0cnVlKQogICAgICAgICAgLndoZXJlVHlwZTxGaWxlPigpCiAgICAgICAgICAubWFwKChmaWxlKSA9PiBmaWxlLnBhdGgpCiAgICAgICAgICAud2hlcmUoKHBhdGgpID0+IHBhdGguZW5kc1dpdGgoJy5wbmcnKSkKICAgICAgICAgIC50b0xpc3QoKTsKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gY29tcGFyZShVaW50OExpc3QgaW1hZ2VCeXRlcywgVXJpIGdvbGRlbikgID0+IHByZXZpb3VzR29sZGVuRmlsZUNvbXBhcmF0b3IuY29tcGFyZShpbWFnZUJ5dGVzLCBnb2xkZW4pOwoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0VGVzdFVyaShVcmkga2V5LCBpbnQ/IHZlcnNpb24pIHsKICAgIGZpbmFsIGtleVN0cmluZyA9IGtleS50b0ZpbGVQYXRoKCk7CiAgICByZXR1cm4gVXJpLnBhcnNlKGdvbGRlbkZpbGVQYXRocwogICAgICAgIC5zaW5nbGVXaGVyZSgoZ29sZGVuRmlsZVBhdGgpID0+IGdvbGRlbkZpbGVQYXRoLmVuZHNXaXRoKGtleVN0cmluZykpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTx2b2lkPiB1cGRhdGUoVXJpIGdvbGRlbiwgVWludDhMaXN0IGltYWdlQnl0ZXMpID0+IHByZXZpb3VzR29sZGVuRmlsZUNvbXBhcmF0b3IudXBkYXRlKGdvbGRlbiwgaW1hZ2VCeXRlcyk7Cgp9Cnt7L2lzRmx1dHRlcn19", "type": "text" } ],