From 001910c9f40d637cb25c19bb500fb89cebdf7450 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Wed, 6 Mar 2024 18:38:47 +0100 Subject: [PATCH] [native_assets_builder] Implement equals and hashCode on asset paths (#980) --- .../lib/src/model/kernel_assets.dart | 29 ++++++++++++++++++- .../test/model/kernel_assets_test.dart | 27 +++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/pkgs/native_assets_builder/lib/src/model/kernel_assets.dart b/pkgs/native_assets_builder/lib/src/model/kernel_assets.dart index 14418e8a5..980d65c56 100644 --- a/pkgs/native_assets_builder/lib/src/model/kernel_assets.dart +++ b/pkgs/native_assets_builder/lib/src/model/kernel_assets.dart @@ -69,6 +69,14 @@ class KernelAssetAbsolutePath implements KernelAssetPath { static const _pathTypeValue = 'absolute'; + @override + bool operator ==(Object other) => + identical(this, other) || + (other is KernelAssetAbsolutePath && other.uri == uri); + + @override + int get hashCode => uri.hashCode; + @override List toYaml() => [_pathTypeValue, uri.toFilePath()]; } @@ -94,11 +102,19 @@ class KernelAssetRelativePath implements KernelAssetPath { static const _pathTypeValue = 'relative'; + @override + bool operator ==(Object other) => + identical(this, other) || + (other is KernelAssetRelativePath && other.uri == uri); + + @override + int get hashCode => uri.hashCode; + @override List toYaml() => [_pathTypeValue, uri.toFilePath()]; } -/// Asset is avaliable on the system `PATH`. +/// Asset is available on the system `PATH`. /// /// [uri] only contains a file name. class KernelAssetSystemPath implements KernelAssetPath { @@ -108,6 +124,17 @@ class KernelAssetSystemPath implements KernelAssetPath { static const _pathTypeValue = 'system'; + @override + bool operator ==(Object other) => + identical(this, other) || + (other is KernelAssetSystemPath && other.uri == uri); + + @override + int get hashCode => uri.hashCode; + + @override + String toString() => 'KernelAssetAbsolutePath($uri)'; + @override List toYaml() => [_pathTypeValue, uri.toFilePath()]; } diff --git a/pkgs/native_assets_builder/test/model/kernel_assets_test.dart b/pkgs/native_assets_builder/test/model/kernel_assets_test.dart index 8b8e92b6b..c8f08cdf7 100644 --- a/pkgs/native_assets_builder/test/model/kernel_assets_test.dart +++ b/pkgs/native_assets_builder/test/model/kernel_assets_test.dart @@ -84,4 +84,31 @@ native-assets: final fileContents = assets.toNativeAssetsFile(); expect(fileContents, assetsDartEncoding); }); + + test('path equality', () { + expect( + KernelAssetAbsolutePath(Uri.parse('/path/to/libbar.a')), + KernelAssetAbsolutePath(Uri.parse('/path/to/libbar.a')), + ); + expect( + KernelAssetAbsolutePath(Uri.parse('/path/to/libbar.a')), + isNot(KernelAssetAbsolutePath(Uri.parse('/path/to/libbar2.a'))), + ); + expect( + KernelAssetRelativePath(Uri.parse('path/to/libbar.a')), + KernelAssetRelativePath(Uri.parse('path/to/libbar.a')), + ); + expect( + KernelAssetRelativePath(Uri.parse('path/to/libbar.a')), + isNot(KernelAssetRelativePath(Uri.parse('path/to/libbar2.a'))), + ); + expect( + KernelAssetSystemPath(Uri.parse('path/to/libbar.a')), + KernelAssetSystemPath(Uri.parse('path/to/libbar.a')), + ); + expect( + KernelAssetSystemPath(Uri.parse('path/to/libbar.a')), + isNot(KernelAssetSystemPath(Uri.parse('path/to/libbar2.a'))), + ); + }); }