From be91927459543a2ea7f134141ad6a1fbce52d804 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Thu, 27 Mar 2025 16:21:36 +0100 Subject: [PATCH] [native_assets_cli] Namespace asset types --- .../shared/shared_definitions.schema.json | 57 +++++--- .../test/data/link_input_macos.json | 12 ++ pkgs/code_assets/test/schema/schema_test.dart | 4 +- .../shared/shared_definitions.schema.json | 55 +++++--- pkgs/data_assets/test/data/link_input.json | 5 +- pkgs/data_assets/test/schema/schema_test.dart | 4 +- pkgs/hooks/tool/generate_syntax.dart | 4 +- .../lib/src/parser/schema_analyzer.dart | 18 ++- .../lib/src/code_assets/code_asset.dart | 20 ++- .../lib/src/code_assets/config.dart | 5 +- .../lib/src/code_assets/extension.dart | 4 +- .../lib/src/code_assets/syntax.g.dart | 56 ++++++++ .../lib/src/data_assets/config.dart | 5 +- .../lib/src/data_assets/data_asset.dart | 20 ++- .../lib/src/data_assets/extension.dart | 4 +- .../lib/src/data_assets/syntax.g.dart | 52 ++++++++ .../native_assets_cli/test/checksum_test.dart | 126 +++++++++--------- .../test/code_assets/code_asset_test.dart | 39 +++++- .../test/code_assets/config_test.dart | 12 +- .../test/data_assets/data_asset_test.dart | 32 ++++- 20 files changed, 399 insertions(+), 135 deletions(-) diff --git a/pkgs/code_assets/doc/schema/shared/shared_definitions.schema.json b/pkgs/code_assets/doc/schema/shared/shared_definitions.schema.json index 2720d2c24..8a19e9c56 100644 --- a/pkgs/code_assets/doc/schema/shared/shared_definitions.schema.json +++ b/pkgs/code_assets/doc/schema/shared/shared_definitions.schema.json @@ -40,32 +40,55 @@ { "const": "native_code" }, + { + "const": "code_assets/code" + }, { "type": "string" } ] } }, - "if": { - "properties": { - "type": { - "const": "native_code" - } - } - }, - "then": { - "properties": { - "encoding": { - "$ref": "#/definitions/NativeCodeAssetEncoding" + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "native_code" + } + } + }, + "then": { + "properties": { + "encoding": { + "$ref": "#/definitions/NativeCodeAssetEncoding" + } + }, + "allOf": [ + { + "$comment": "Also include the fields parent object for backwards compatibility.", + "$ref": "#/definitions/NativeCodeAssetEncoding" + } + ] } }, - "allOf": [ - { - "$comment": "Also include the fields parent object for backwards compatibility.", - "$ref": "#/definitions/NativeCodeAssetEncoding" + { + "if": { + "properties": { + "type": { + "const": "code_assets/code" + } + } + }, + "then": { + "properties": { + "encoding": { + "$ref": "#/definitions/NativeCodeAssetEncoding" + } + } } - ] - } + } + ] }, "CCompilerConfig": { "type": "object", diff --git a/pkgs/code_assets/test/data/link_input_macos.json b/pkgs/code_assets/test/data/link_input_macos.json index 7b84afb07..f6666e325 100644 --- a/pkgs/code_assets/test/data/link_input_macos.json +++ b/pkgs/code_assets/test/data/link_input_macos.json @@ -19,6 +19,18 @@ }, "os": "macos", "type": "native_code" + }, + { + "encoding": { + "architecture": "arm64", + "file": "/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/iv6i0d/native_add/.dart_tool/native_assets_builder/native_add/c6b312c90c95d2d98ffb6760a738fb36/out/libnative_add.a", + "id": "package:native_add/src/native_add_bindings_generated.dart", + "link_mode": { + "type": "static" + }, + "os": "macos" + }, + "type": "code_assets/code" } ], "config": { diff --git a/pkgs/code_assets/test/schema/schema_test.dart b/pkgs/code_assets/test/schema/schema_test.dart index be786f5c3..fc779e91f 100644 --- a/pkgs/code_assets/test/schema/schema_test.dart +++ b/pkgs/code_assets/test/schema/schema_test.dart @@ -113,9 +113,11 @@ FieldsFunction _codeFields(AllTestData allTestData) { expectRequiredFieldMissing, ), if (hook == Hook.link) ...[ - for (final (field, expect) in codeAssetFields) + for (final (field, expect) in codeAssetFields) ...[ for (final encoding in _encoding) (['assets', 0, ...encoding, ...field], expect), + (['assets', 1, 'encoding', ...field], expect), + ], ], ], if (inputOrOutput == InputOrOutput.output) ...[ diff --git a/pkgs/data_assets/doc/schema/shared/shared_definitions.schema.json b/pkgs/data_assets/doc/schema/shared/shared_definitions.schema.json index eb4c8d517..54f77f1a1 100644 --- a/pkgs/data_assets/doc/schema/shared/shared_definitions.schema.json +++ b/pkgs/data_assets/doc/schema/shared/shared_definitions.schema.json @@ -11,31 +11,54 @@ { "const": "data" }, + { + "const": "data_assets/data" + }, { "type": "string" } ] } }, - "if": { - "properties": { - "type": { - "const": "data" - } - } - }, - "then": { - "properties": { - "encoding": { - "$ref": "#/definitions/DataAssetEncoding" + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "data" + } + } + }, + "then": { + "properties": { + "encoding": { + "$ref": "#/definitions/DataAssetEncoding" + } + }, + "allOf": [ + { + "$ref": "#/definitions/DataAssetEncoding" + } + ] } }, - "allOf": [ - { - "$ref": "#/definitions/DataAssetEncoding" + { + "if": { + "properties": { + "type": { + "const": "data_assets/data" + } + } + }, + "then": { + "properties": { + "encoding": { + "$ref": "#/definitions/DataAssetEncoding" + } + } } - ] - } + } + ] }, "DataAssetEncoding": { "type": "object", diff --git a/pkgs/data_assets/test/data/link_input.json b/pkgs/data_assets/test/data/link_input.json index 7975ac7a5..6c3c0a575 100644 --- a/pkgs/data_assets/test/data/link_input.json +++ b/pkgs/data_assets/test/data/link_input.json @@ -18,10 +18,7 @@ "name": "assets/data_1.json", "package": "simple_link" }, - "file": "/private/var/folders/2y/mngq9h194yzglt4kzttzfq6800klzg/T/0s5bKi/simple_link/assets/data_1.json", - "name": "assets/data_1.json", - "package": "simple_link", - "type": "data" + "type": "data_assets/data" } ], "config": { diff --git a/pkgs/data_assets/test/schema/schema_test.dart b/pkgs/data_assets/test/schema/schema_test.dart index 4c997cb5d..d3b83c723 100644 --- a/pkgs/data_assets/test/schema/schema_test.dart +++ b/pkgs/data_assets/test/schema/schema_test.dart @@ -45,9 +45,11 @@ List<(List, void Function(ValidationResults result))> _dataFields({ }) => <(List, void Function(ValidationResults result))>[ if (inputOrOutput == InputOrOutput.input) ...[ if (hook == Hook.link) ...[ - for (final field in _dataAssetFields) + for (final field in _dataAssetFields) ...[ for (final encoding in _encoding) (['assets', 0, ...encoding, field], expectRequiredFieldMissing), + (['assets', 1, 'encoding', field], expectRequiredFieldMissing), + ], ], ], if (inputOrOutput == InputOrOutput.output) ...[ diff --git a/pkgs/hooks/tool/generate_syntax.dart b/pkgs/hooks/tool/generate_syntax.dart index b1ccf8956..88ee63605 100644 --- a/pkgs/hooks/tool/generate_syntax.dart +++ b/pkgs/hooks/tool/generate_syntax.dart @@ -28,7 +28,7 @@ void main(List args) { final analyzedSchema = SchemaAnalyzer( schema, - capitalizationOverrides: { + nameOverrides: { 'ios': 'iOS', 'Ios': 'IOS', 'macos': 'macOS', @@ -36,6 +36,8 @@ void main(List args) { 'prefer-dynamic': 'preferDynamicOld', 'prefer-static': 'preferStaticOld', 'assetsForLinking': 'assetsForLinkingOld', + 'CodeAssetsCodeAsset': 'NativeCodeAssetNew', + 'DataAssetsDataAsset': 'DataAssetNew', }, publicSetters: [ 'BuildOutput', diff --git a/pkgs/json_syntax_generator/lib/src/parser/schema_analyzer.dart b/pkgs/json_syntax_generator/lib/src/parser/schema_analyzer.dart index fb94ffb50..eecf32d86 100644 --- a/pkgs/json_syntax_generator/lib/src/parser/schema_analyzer.dart +++ b/pkgs/json_syntax_generator/lib/src/parser/schema_analyzer.dart @@ -27,14 +27,19 @@ import '../model/schema_info.dart'; /// * Naming according to "effective Dart". This class expects a JSON schema /// with snake-cased keys and produces [SchemaInfo] with camel-cased Dart /// names and types. -/// * Renaming with [capitalizationOverrides]. +/// * Renaming with [nameOverrides]. /// * Whether setters are public or not with [publicSetters]. /// * Output sorting alphabetically or with [classSorting]. class SchemaAnalyzer { final JsonSchema schema; - /// Overriding configuration for capitalization of camel cased strings. - final Map capitalizationOverrides; + /// Overriding for names. + /// + /// Useful for + /// * capitalization overrides (`macos` -> `macOS`), + /// * naming conflicts (to prevent `myName` and `my_name` clasing), and + /// * renames as preferred. + final Map nameOverrides; /// Optional custom ordering for the output classes. /// @@ -63,7 +68,7 @@ class SchemaAnalyzer { SchemaAnalyzer( this.schema, { - this.capitalizationOverrides = const {}, + this.nameOverrides = const {}, this.classSorting, this.publicSetters = const [], this.visbleUnionTagValues = const [], @@ -413,10 +418,9 @@ class SchemaAnalyzer { return ''; } - final parts = string.split('_'); + final parts = string.replaceAll('/', '_').split('_'); - String remapCapitalization(String input) => - capitalizationOverrides[input] ?? input; + String remapCapitalization(String input) => nameOverrides[input] ?? input; var result = StringBuffer(); result += remapCapitalization(parts[0]); diff --git a/pkgs/native_assets_cli/lib/src/code_assets/code_asset.dart b/pkgs/native_assets_cli/lib/src/code_assets/code_asset.dart index 9a6e3e217..ed17f59d7 100644 --- a/pkgs/native_assets_cli/lib/src/code_assets/code_asset.dart +++ b/pkgs/native_assets_cli/lib/src/code_assets/code_asset.dart @@ -163,19 +163,27 @@ final class CodeAsset { linkMode: linkMode.toSyntax(), os: _os?.toSyntax(), ); - return EncodedAsset(CodeAssetType.type, encoding.json); + return EncodedAsset(CodeAssetType.typeForAsset, encoding.json); } } extension CodeAssetType on CodeAsset { - // TODO(https://github.com/dart-lang/native/issues/2132): Change to be - // namespaced by package name. (We'll temporarily need to support both the - // old a new type.) - static const String type = syntax.NativeCodeAsset.typeValue; + /// Recognize both new and old type. + /// + /// And add both types to builtAssetTypes. + static const typesForBuildAssetTypes = [ + syntax.NativeCodeAssetNew.typeValue, + syntax.NativeCodeAsset.typeValue, + ]; + + /// Write the old type to prevent old hooks and SDKs from failing. + // TODO(https://github.com/dart-lang/native/issues/2132): Change this to the + // new value after it has rolled. + static const String typeForAsset = syntax.NativeCodeAsset.typeValue; } extension EncodedCodeAsset on EncodedAsset { - bool get isCodeAsset => type == CodeAssetType.type; + bool get isCodeAsset => CodeAssetType.typesForBuildAssetTypes.contains(type); CodeAsset get asCodeAsset => CodeAsset.fromEncoded(this); } diff --git a/pkgs/native_assets_cli/lib/src/code_assets/config.dart b/pkgs/native_assets_cli/lib/src/code_assets/config.dart index 92c6f52c6..56bec7a48 100644 --- a/pkgs/native_assets_cli/lib/src/code_assets/config.dart +++ b/pkgs/native_assets_cli/lib/src/code_assets/config.dart @@ -18,7 +18,10 @@ extension CodeAssetHookConfig on HookConfig { /// Code asset specific configuration. CodeConfig get code => CodeConfig._fromJson(json, path); - bool get buildCodeAssets => buildAssetTypes.contains(CodeAssetType.type); + bool get buildCodeAssets => + buildAssetTypes + .where((e) => CodeAssetType.typesForBuildAssetTypes.contains(e)) + .isNotEmpty; } /// Extension to the [LinkInput] providing access to configuration specific to diff --git a/pkgs/native_assets_cli/lib/src/code_assets/extension.dart b/pkgs/native_assets_cli/lib/src/code_assets/extension.dart index 25bfdca69..024119dae 100644 --- a/pkgs/native_assets_cli/lib/src/code_assets/extension.dart +++ b/pkgs/native_assets_cli/lib/src/code_assets/extension.dart @@ -34,8 +34,6 @@ final class CodeAssetExtension implements ProtocolExtension { this.macOS, }); - static const List _buildAssetTypes = [CodeAssetType.type]; - @override void setupBuildInput(BuildInputBuilder input) { _setupConfig(input); @@ -47,7 +45,7 @@ final class CodeAssetExtension implements ProtocolExtension { } void _setupConfig(HookInputBuilder input) { - input.config.addBuildAssetTypes(_buildAssetTypes); + input.config.addBuildAssetTypes(CodeAssetType.typesForBuildAssetTypes); // ignore: deprecated_member_use_from_same_package input.config.setupCode( targetArchitecture: targetArchitecture, diff --git a/pkgs/native_assets_cli/lib/src/code_assets/syntax.g.dart b/pkgs/native_assets_cli/lib/src/code_assets/syntax.g.dart index 64470b438..5ac106dcf 100644 --- a/pkgs/native_assets_cli/lib/src/code_assets/syntax.g.dart +++ b/pkgs/native_assets_cli/lib/src/code_assets/syntax.g.dart @@ -97,6 +97,9 @@ class Asset { List path = const [], }) { final result = Asset._fromJson(json, path: path); + if (result.isNativeCodeAssetNew) { + return result.asNativeCodeAssetNew; + } if (result.isNativeCodeAsset) { return result.asNativeCodeAsset; } @@ -1075,6 +1078,59 @@ class NativeCodeAssetEncoding { String toString() => 'NativeCodeAssetEncoding($json)'; } +class NativeCodeAssetNew extends Asset { + static const typeValue = 'code_assets/code'; + + NativeCodeAssetNew.fromJson(super.json, {super.path}) : super._fromJson(); + + NativeCodeAssetNew({required NativeCodeAssetEncoding? encoding}) + : super(type: 'code_assets/code') { + _encoding = encoding; + json.sortOnKey(); + } + + /// Setup all fields for [NativeCodeAssetNew] that are not in + /// [Asset]. + void setup({required NativeCodeAssetEncoding? encoding}) { + _encoding = encoding; + json.sortOnKey(); + } + + NativeCodeAssetEncoding? get encoding { + final jsonValue = _reader.optionalMap('encoding'); + if (jsonValue == null) return null; + return NativeCodeAssetEncoding.fromJson( + jsonValue, + path: [...path, 'encoding'], + ); + } + + set _encoding(NativeCodeAssetEncoding? value) { + json.setOrRemove('encoding', value?.json); + } + + List _validateEncoding() { + final mapErrors = _reader.validate?>('encoding'); + if (mapErrors.isNotEmpty) { + return mapErrors; + } + return encoding?.validate() ?? []; + } + + @override + List validate() => [...super.validate(), ..._validateEncoding()]; + + @override + String toString() => 'NativeCodeAssetNew($json)'; +} + +extension NativeCodeAssetNewExtension on Asset { + bool get isNativeCodeAssetNew => type == 'code_assets/code'; + + NativeCodeAssetNew get asNativeCodeAssetNew => + NativeCodeAssetNew.fromJson(json, path: path); +} + class OS { final String name; diff --git a/pkgs/native_assets_cli/lib/src/data_assets/config.dart b/pkgs/native_assets_cli/lib/src/data_assets/config.dart index 52614172e..86b8632d6 100644 --- a/pkgs/native_assets_cli/lib/src/data_assets/config.dart +++ b/pkgs/native_assets_cli/lib/src/data_assets/config.dart @@ -81,7 +81,10 @@ extension AddDataAssetsDirectory on BuildOutputBuilder { /// Extension to the [HookConfig] providing access to configuration specific /// to data assets. extension DataAssetHookConfig on HookConfig { - bool get buildDataAssets => buildAssetTypes.contains(DataAssetType.type); + bool get buildDataAssets => + buildAssetTypes + .where((e) => DataAssetType.typesForBuildAssetTypes.contains(e)) + .isNotEmpty; } /// Extension to initialize data specific configuration on link/build inputs. diff --git a/pkgs/native_assets_cli/lib/src/data_assets/data_asset.dart b/pkgs/native_assets_cli/lib/src/data_assets/data_asset.dart index f98a4e103..b28f377a2 100644 --- a/pkgs/native_assets_cli/lib/src/data_assets/data_asset.dart +++ b/pkgs/native_assets_cli/lib/src/data_assets/data_asset.dart @@ -73,7 +73,7 @@ final class DataAsset { name: name, package: package, ); - return EncodedAsset(DataAssetType.type, encoding.json); + return EncodedAsset(DataAssetType.typeForAssets, encoding.json); } @override @@ -81,13 +81,21 @@ final class DataAsset { } extension DataAssetType on DataAsset { - // TODO(https://github.com/dart-lang/native/issues/2132): Change to be - // namespaced by package name. (We'll temporarily need to support both the - // old a new type.) - static const String type = syntax.DataAsset.typeValue; + /// Recognize both new and old type. + /// + /// And add both types to builtAssetTypes. + static const typesForBuildAssetTypes = [ + syntax.DataAssetNew.typeValue, + syntax.DataAsset.typeValue, + ]; + + /// Write the old type to prevent old hooks and SDKs from failing. + // TODO(https://github.com/dart-lang/native/issues/2132): Change this to the + // new value after it has rolled. + static const String typeForAssets = syntax.DataAsset.typeValue; } extension EncodedDataAsset on EncodedAsset { - bool get isDataAsset => type == DataAssetType.type; + bool get isDataAsset => DataAssetType.typesForBuildAssetTypes.contains(type); DataAsset get asDataAsset => DataAsset.fromEncoded(this); } diff --git a/pkgs/native_assets_cli/lib/src/data_assets/extension.dart b/pkgs/native_assets_cli/lib/src/data_assets/extension.dart index 8ca89821d..9ae6357d4 100644 --- a/pkgs/native_assets_cli/lib/src/data_assets/extension.dart +++ b/pkgs/native_assets_cli/lib/src/data_assets/extension.dart @@ -13,8 +13,6 @@ import 'validation.dart'; final class DataAssetsExtension implements ProtocolExtension { DataAssetsExtension(); - static const List _buildAssetTypes = [DataAssetType.type]; - @override void setupBuildInput(BuildInputBuilder input) { _setupConfig(input); @@ -26,7 +24,7 @@ final class DataAssetsExtension implements ProtocolExtension { } void _setupConfig(HookInputBuilder input) { - input.config.addBuildAssetTypes(_buildAssetTypes); + input.config.addBuildAssetTypes(DataAssetType.typesForBuildAssetTypes); } @override diff --git a/pkgs/native_assets_cli/lib/src/data_assets/syntax.g.dart b/pkgs/native_assets_cli/lib/src/data_assets/syntax.g.dart index 73f422bfb..1e16c1a93 100644 --- a/pkgs/native_assets_cli/lib/src/data_assets/syntax.g.dart +++ b/pkgs/native_assets_cli/lib/src/data_assets/syntax.g.dart @@ -25,6 +25,9 @@ class Asset { if (result.isDataAsset) { return result.asDataAsset; } + if (result.isDataAssetNew) { + return result.asDataAssetNew; + } return result; } @@ -198,6 +201,55 @@ class DataAssetEncoding { String toString() => 'DataAssetEncoding($json)'; } +class DataAssetNew extends Asset { + static const typeValue = 'data_assets/data'; + + DataAssetNew.fromJson(super.json, {super.path}) : super._fromJson(); + + DataAssetNew({required DataAssetEncoding? encoding}) + : super(type: 'data_assets/data') { + _encoding = encoding; + json.sortOnKey(); + } + + /// Setup all fields for [DataAssetNew] that are not in + /// [Asset]. + void setup({required DataAssetEncoding? encoding}) { + _encoding = encoding; + json.sortOnKey(); + } + + DataAssetEncoding? get encoding { + final jsonValue = _reader.optionalMap('encoding'); + if (jsonValue == null) return null; + return DataAssetEncoding.fromJson(jsonValue, path: [...path, 'encoding']); + } + + set _encoding(DataAssetEncoding? value) { + json.setOrRemove('encoding', value?.json); + } + + List _validateEncoding() { + final mapErrors = _reader.validate?>('encoding'); + if (mapErrors.isNotEmpty) { + return mapErrors; + } + return encoding?.validate() ?? []; + } + + @override + List validate() => [...super.validate(), ..._validateEncoding()]; + + @override + String toString() => 'DataAssetNew($json)'; +} + +extension DataAssetNewExtension on Asset { + bool get isDataAssetNew => type == 'data_assets/data'; + + DataAssetNew get asDataAssetNew => DataAssetNew.fromJson(json, path: path); +} + class JsonReader { /// The JSON Object this reader is reading. final Map json; diff --git a/pkgs/native_assets_cli/test/checksum_test.dart b/pkgs/native_assets_cli/test/checksum_test.dart index baf0c1278..7eeea7630 100644 --- a/pkgs/native_assets_cli/test/checksum_test.dart +++ b/pkgs/native_assets_cli/test/checksum_test.dart @@ -96,69 +96,69 @@ void main() { // needing to update this list). final expectedChecksums = [ - '94c285a130d88664be8f21c1d6ef34cd', - '57721cad5c11285edb0016515541e2d5', - 'd9b5d713b0b6a18c67d5e490cdbd074f', - 'db5406082ee570220c97eb1f123e718c', - 'b78638ece1b0a543d09318d48aa9a6c8', - 'ca297a62f6b0dfcf2823528ae4dfd08e', - '264c307b448f3f9304b1ccab6ec60075', - 'b4a04739d33b007f4058492d3df94955', - 'ec48ca9f46c95620b209837d710e46d4', - 'faa7c97c28a4fc4b4856e7a27f34d717', - 'cb775af7eb5733a85226089f6fb5a8c6', - '6d815c7d59f04707891ede5a23136787', - '0231d5d5a4def1870ea81b316c0f232b', - 'b87236e226c6338dccff134e9ee971f9', - '6e7b17bf18d55557e0eed5d2050e4401', - 'e393e7d58700da05843a5cf8db102fde', - 'd3080b3502953a53cb63a5509bba1eee', - 'a27bf133693f18dee751b7f9661725ad', - '93a1f07ea89f1b9f57a23bb7aed77c7e', - '6f802ed01d66cb9529540387ec26d4bc', - 'a648f38bcc571d5800d549fa9146c161', - 'e7a0bed5b00346177a24ced2860136bb', - '14b0fcffdc10411a0119641a04e84f24', - '3a9112376cfba8ed524306533e0ba64c', - '87ba90976f0ac1720ac9ae3ab3e04ed6', - 'ebcc2a8b819d79ea3bd9ba8669c49286', - '1441b71d0db6c1fa226a013605716bcb', - 'e1946bf4587c22123e97ef19d2c63050', - '83acde5a35b0cde1a861082d1ffd0097', - 'fd6bc0ef963c6d65ef616779f203dc0f', - '5b5a62e841327b1afdda64dba0f8a3e2', - 'c64865e81ee7e701a2a52ea344998693', - '050ad3d2db8581feed77c17c22564789', - '118569cd7c4c12baa4eaea9c70dc2dd3', - '5e38c88dcdec92bf701d170f10cb0063', - 'dd330565f2ff2a2d7bb2a480cfc25b12', - '8e36a6f17eb303799056f0aa1737a1fe', - '40035559d1a93b3ebe7d2986b2c99aea', - '786716ef01b49293cf3493b22fcb2518', - '9f8655c03f8f2f0bc27ae6917390f4e1', - '3139d774dcddfba7705072397a59b9fe', - '59bc110e371c5e9c8b04f6453d09584d', - 'f3c6c5de6568f639d67e03b07818acc6', - '59b5e3250d97b1cfe15ad65198882e7c', - '6bc2d951c8f99290a94b9a865476c512', - '6aa6ede0d3f0be509a7ee30121403d2c', - '80b03895e3dd0e4e4697558bf57a354d', - '03de9929411b19bb1c840c7188e2bddb', - 'c1179c3e37c5936c915747bdaa9bc180', - '86c530550aea1db7f07501eecd5461ab', - 'a7911874e29e9696bba7dceeaef99a78', - '9cd55f6b3c45ecb8563c476bc88052a8', - 'b05ed1e42541d90f2ef3b4180921fc67', - '229db175097f0ea52b6f2a995a526dff', - 'd2a66fc795288cc2e5d68d4ed7286fd0', - 'be81bebbf4c55f9deb56a73d25cc2750', - 'c2be87cc81c5a1276c454d67d00238e0', - '4ff44ba1c783becaa20f5810fb02f9d1', - 'ed210e050e2907f66a0e420d143be823', - '3d768c496687797c2f141cbc9af0d641', - 'e9a36b9242d1f5b5eddb7fd084903264', - '645460d5ebb3374201eba75e5545d0d2', - 'bbdaf85e3a026c0bd87a56e7102a6beb', + '14467cab1bec35bf16fb8c2f4cb6674e', + '09167db5c99bdb7885e1ce56f3d322db', + '650772a5e6639815cb90fc382a2d3b74', + '992eb4527cf1063f82102e90da1a8b3b', + '8a59d2c6c1838c201f51a61d581ca58c', + 'bb1065211dd4bd4bc09127eabb8e0d59', + '9ea5e05985d33473215c61d761231efb', + 'dca9f3b1dee3ca3cd99bf09846b7b05a', + '0560df60824772923c28a911a288c0a7', + 'd57299126dc6d2152b1227757c5e69db', + 'b8bd03516fec369bd3961587b9200bd0', + '1ae91509da85a70735cd82573fd15034', + '59c4ddf2dbc17f8f29bc34344fca0129', + 'c6817e34ad4ace2429ee700ea9aafaa5', + '59a2ca5f19310116711a5d3116ba48a2', + '2e6ad514c35dfe0ef6e807406f5aad91', + 'c6988649cadeb6be599b27fb62c79441', + '8b4597c6c37ec390bd61f1b2d594cf4f', + 'c4983d1ae610c2ad2a8b13c06b19bca1', + 'fd49106d6de59e357b4fc08fc8ecadca', + '9c2ac9e569e599fb9a836db63c8650a0', + '2a9662ad8edd94a4639f316a0f1720f5', + 'fbcaec48c1e6a0c975b3cbe7b0d5b0bf', + '2ee945d328dc1076f779d4ef406fab9b', + '2da299e6faf63a5832f3c55d0bca6526', + '5930992ec9350aaab2beaf52a7834046', + '2979e8e78ce570b26d099918a07160db', + '1cba6703c6c0ed21bf8e0461c76518a6', + '0b0699db219436c24723a1c41fbaf9b0', + '94cf39317b30c975326f3a82e1121cc9', + '24184c50c99204efdcd69b433a1ad558', + '34bb5fbeefcb8785a83ac28ea7d71f60', + '34a006a2215e9000797b87c245b5c76e', + '7a25aabe33082b6dd8c8cde30cede29f', + 'bf0aeb2b671a525b3aab9c92d98f88dd', + '4728bbd9ca0b2ee47c28d802acaacff2', + 'c1eec49274a61e7651770efd9faf84fc', + '90e668957ef8ef35ef66290e66a0f15c', + '2ff397bd4b8fd01e07ae23774a3f8528', + '98709d874b873f988e76458f39066c6d', + '3b5c330f37413d3280d5768c6644dbf2', + '7532763af0b47a892d0ee33286e3b90e', + '0fabe0fb6901347900622977dd32286e', + 'fe21838f4287bcc3136f6bc3b459ef6d', + '461e0fa108606e344d27d2a6b253921f', + 'd6f37cf47b243b8341572bb59dc3a94e', + 'ac7760a8df3292af12e544a051771626', + 'd4963d201d80d3e71f3a1b9f8782d9ee', + '2370a5aba28f2620aab069c1956319b6', + '41ac2dfbdf2e41d7206566b83b81168e', + 'b9c6b602b2129b83f4827b0e45bf1116', + '54a21fce89d60f21c919810cb8a7f7f3', + 'ee5afa17e3d7e1d775aa38dd670788b7', + '4eec6cff58e8c5ce65f6df7ca7675d4a', + '187f30b16822cbcb8b20955a48b4b934', + 'ac7dc37446380c7a79a248bbb807ce8c', + '71d8c4dd59fc6f1ac02cadb28c17dae2', + '5c639983a598930470ee207f83953dba', + '97ff526835ac8d7c6511f8f51ce19595', + '0ea93279778827004ec8100113cf9449', + 'c7ec217ff823f30358ab1b7c74a402d8', + '47ae4d4dd0953da542072e376d9689b0', + '14afd786c5906860a854a3839d30660d', ]; printOnFailure('final expectedChecksums = ['); printOnFailure(checksums.map((e) => " '$e',").join('\n')); diff --git a/pkgs/native_assets_cli/test/code_assets/code_asset_test.dart b/pkgs/native_assets_cli/test/code_assets/code_asset_test.dart index 5f57fc356..279cb81ac 100644 --- a/pkgs/native_assets_cli/test/code_assets/code_asset_test.dart +++ b/pkgs/native_assets_cli/test/code_assets/code_asset_test.dart @@ -6,7 +6,7 @@ import 'package:native_assets_cli/code_assets_builder.dart'; import 'package:test/test.dart'; void main() async { - test('DataAsset', () { + test('CodeAsset toJson', () { expect( CodeAsset( package: 'my_package', @@ -33,4 +33,41 @@ void main() async { }, ); }); + + for (final assetType in ['native_code', 'code_assets/code']) { + for (final nestInEncoding in [true, false]) { + test('CodeAsset fromJson', () { + final encodedAsset = EncodedAsset.fromJson({ + 'type': assetType, + if (!nestInEncoding) ...{ + 'architecture': 'riscv64', + 'file': 'not there', + 'id': 'package:my_package/name', + 'link_mode': {'type': 'dynamic_loading_bundle'}, + 'os': 'android', + }, + if (nestInEncoding) + 'encoding': { + 'architecture': 'riscv64', + 'file': 'not there', + 'id': 'package:my_package/name', + 'link_mode': {'type': 'dynamic_loading_bundle'}, + 'os': 'android', + }, + }); + expect(encodedAsset.isCodeAsset, isTrue); + expect( + CodeAsset.fromEncoded(encodedAsset), + CodeAsset( + package: 'my_package', + name: 'name', + linkMode: DynamicLoadingBundled(), + os: OS.android, + file: Uri.file('not there'), + architecture: Architecture.riscv64, + ), + ); + }); + } + } } diff --git a/pkgs/native_assets_cli/test/code_assets/config_test.dart b/pkgs/native_assets_cli/test/code_assets/config_test.dart index f299647c2..1528ceb88 100644 --- a/pkgs/native_assets_cli/test/code_assets/config_test.dart +++ b/pkgs/native_assets_cli/test/code_assets/config_test.dart @@ -97,7 +97,7 @@ void main() async { ], 'config': { 'code': codeConfig, - 'build_asset_types': ['native_code'], + 'build_asset_types': ['code_assets/code', 'native_code'], 'extensions': {'code_assets': codeConfig}, if (hookType == 'build') 'linking_enabled': false, }, @@ -173,7 +173,10 @@ void main() async { expect(input.packageRoot, packageRootUri); expect(input.outputDirectoryShared, outputDirectoryShared); expect(input.config.linkingEnabled, false); - expect(input.config.buildAssetTypes, [CodeAssetType.type]); + expect( + input.config.buildAssetTypes, + CodeAssetType.typesForBuildAssetTypes, + ); expectCorrectCodeConfig(input.config.code, targetOS: targetOS); } }); @@ -226,7 +229,10 @@ void main() async { expect(input.packageName, packageName); expect(input.packageRoot, packageRootUri); expect(input.outputDirectoryShared, outputDirectoryShared); - expect(input.config.buildAssetTypes, [CodeAssetType.type]); + expect( + input.config.buildAssetTypes, + CodeAssetType.typesForBuildAssetTypes, + ); expectCorrectCodeConfig(input.config.code, targetOS: targetOS); } }); diff --git a/pkgs/native_assets_cli/test/data_assets/data_asset_test.dart b/pkgs/native_assets_cli/test/data_assets/data_asset_test.dart index 8cd6651bc..43d2d673f 100644 --- a/pkgs/native_assets_cli/test/data_assets/data_asset_test.dart +++ b/pkgs/native_assets_cli/test/data_assets/data_asset_test.dart @@ -6,7 +6,7 @@ import 'package:native_assets_cli/data_assets_builder.dart'; import 'package:test/test.dart'; void main() async { - test('DataAsset', () { + test('DataAsset toJson', () { expect( DataAsset( package: 'my_package', @@ -26,4 +26,34 @@ void main() async { }, ); }); + + for (final assetType in ['data', 'data_assets/data']) { + for (final nestInEncoding in [true, false]) { + test('DataAsset fromJson', () { + final encodedAsset = EncodedAsset.fromJson({ + 'type': assetType, + if (!nestInEncoding) ...{ + 'file': 'not there', + 'name': 'name', + 'package': 'my_package', + }, + if (nestInEncoding) + 'encoding': { + 'file': 'not there', + 'name': 'name', + 'package': 'my_package', + }, + }); + expect(encodedAsset.isDataAsset, isTrue); + expect( + DataAsset.fromEncoded(encodedAsset), + DataAsset( + package: 'my_package', + name: 'name', + file: Uri.file('not there'), + ), + ); + }); + } + } }