@@ -27,9 +27,14 @@ void main() {
27
27
return path.replaceAll ('/' , globals.fs.path.separator);
28
28
}
29
29
30
- void writePubspecFile (String path, String name, { List <String >? assets }) {
30
+ void writePubspecFile (
31
+ String path,
32
+ String name, {
33
+ List <String >? assets,
34
+ List <(String path, String flavor)>? flavoredAssets,
35
+ }) {
31
36
String assetsSection;
32
- if (assets == null ) {
37
+ if (assets == null && flavoredAssets == null ) {
33
38
assetsSection = '' ;
34
39
} else {
35
40
final StringBuffer buffer = StringBuffer ();
@@ -38,11 +43,20 @@ flutter:
38
43
assets:
39
44
''' );
40
45
41
- for (final String asset in assets) {
46
+ for (final String asset in ( assets ?? < String > []) ) {
42
47
buffer.write ('''
43
48
- $asset
44
49
''' );
45
50
}
51
+
52
+ for (final (String path, String flavor) in flavoredAssets ?? < (String , String )> []) {
53
+ buffer.write ('''
54
+ - path: $path
55
+ flavors:
56
+ - $flavor
57
+ ''' );
58
+ }
59
+
46
60
assetsSection = buffer.toString ();
47
61
}
48
62
@@ -57,7 +71,7 @@ $assetsSection
57
71
''' );
58
72
}
59
73
60
- void writePackageConfigFile (Map <String , String > packages) {
74
+ void writePackageConfigFile (Map <String , String > packages) {
61
75
globals.fs.directory ('.dart_tool' ).childFile ('package_config.json' )
62
76
..createSync (recursive: true )
63
77
..writeAsStringSync (
@@ -89,11 +103,15 @@ void writePackageConfigFile(Map<String, String> packages) {
89
103
Future <void > buildAndVerifyAssets (
90
104
List <String > assets,
91
105
List <String > packages,
92
- Map <Object ,Object > expectedAssetManifest
93
- ) async {
106
+ Map <Object , Object > expectedAssetManifest, {
107
+ String ? flavor,
108
+ }) async {
94
109
95
110
final AssetBundle bundle = AssetBundleFactory .instance.createBundle ();
96
- await bundle.build (packageConfigPath: '.dart_tool/package_config.json' );
111
+ await bundle.build (
112
+ packageConfigPath: '.dart_tool/package_config.json' ,
113
+ flavor: flavor,
114
+ );
97
115
98
116
for (final String packageName in packages) {
99
117
for (final String asset in assets) {
@@ -532,6 +550,73 @@ void writePackageConfigFile(Map<String, String> packages) {
532
550
FileSystem : () => testFileSystem,
533
551
ProcessManager : () => FakeProcessManager .any (),
534
552
});
553
+
554
+ testUsingContext ('Flavored assets are bundled when the app depends on a package' , () async {
555
+ writePubspecFile (
556
+ 'pubspec.yaml' ,
557
+ 'test' ,
558
+ );
559
+ writePackageConfigFile (
560
+ < String , String > {
561
+ 'test_package' : 'p/p/' ,
562
+ },
563
+ );
564
+ writePubspecFile (
565
+ 'p/p/pubspec.yaml' ,
566
+ 'test_package' ,
567
+ flavoredAssets: < (String , String )> [('assets/vanilla.txt' , 'vanilla' )],
568
+ );
569
+
570
+ final List <String > assets = < String > ['assets/vanilla.txt' ];
571
+ writeAssets ('p/p' , assets);
572
+
573
+ const Map <Object , Object > expectedAssetManifest = < Object , Object > {
574
+ 'packages/test_package/assets/vanilla.txt' : < Map <String , Object >> [
575
+ < String , Object > {'asset' : 'packages/test_package/assets/vanilla.txt' },
576
+ ]
577
+ };
578
+
579
+ await buildAndVerifyAssets (
580
+ assets,
581
+ < String > ['test_package' ],
582
+ expectedAssetManifest,
583
+ flavor: 'vanilla' ,
584
+ );
585
+ }, overrides: < Type , Generator > {
586
+ FileSystem : () => testFileSystem,
587
+ ProcessManager : () => FakeProcessManager .any (),
588
+ });
589
+ });
590
+
591
+ testUsingContext ('Asset paths can contain URL reserved characters' , () async {
592
+ writePubspecFile ('pubspec.yaml' , 'test' );
593
+ writePackageConfigFile (< String , String > {'test_package' : 'p/p/' });
594
+
595
+ final List <String > assets = < String > ['a/foo' , 'a/foo [x]' ];
596
+ writePubspecFile (
597
+ 'p/p/pubspec.yaml' ,
598
+ 'test_package' ,
599
+ assets: assets,
600
+ );
601
+
602
+ writeAssets ('p/p/' , assets);
603
+ const Map <Object , Object > expectedAssetManifest = < Object , Object > {
604
+ 'packages/test_package/a/foo' : < Map <String , Object >> [
605
+ < String , Object > {'asset' : 'packages/test_package/a/foo' }
606
+ ],
607
+ 'packages/test_package/a/foo [x]' : < Map <String , Object >> [
608
+ < String , Object > {'asset' : 'packages/test_package/a/foo [x]' }
609
+ ]
610
+ };
611
+
612
+ await buildAndVerifyAssets (
613
+ assets,
614
+ < String > ['test_package' ],
615
+ expectedAssetManifest,
616
+ );
617
+ }, overrides: < Type , Generator > {
618
+ FileSystem : () => testFileSystem,
619
+ ProcessManager : () => FakeProcessManager .any (),
535
620
});
536
621
537
622
testUsingContext ('Asset paths can contain URL reserved characters' , () async {
0 commit comments