@@ -55,6 +55,44 @@ class HasInputTransformer extends Transformer {
55
55
}
56
56
""" ;
57
57
58
+ const COPY_TRANSFORMER = """
59
+ import 'dart:async';
60
+
61
+ import 'package:barback/barback.dart';
62
+
63
+ class CopyTransformer extends Transformer {
64
+ CopyTransformer.asPlugin();
65
+
66
+ bool isPrimary(AssetId id) => true;
67
+
68
+ Future apply(Transform transform) async {
69
+ transform.addOutput(new Asset.fromString(
70
+ transform.primaryInput.id.addExtension('.copy'),
71
+ await transform.primaryInput.readAsString()));
72
+ }
73
+ }
74
+ """ ;
75
+
76
+ const LIST_INPUTS_TRANSFORMER = """
77
+ import 'dart:async';
78
+
79
+ import 'package:barback/barback.dart';
80
+
81
+ class ListInputsTransformer extends AggregateTransformer {
82
+ ListInputsTransformer.asPlugin();
83
+
84
+ String classifyPrimary(AssetId id) => '';
85
+
86
+ Future apply(AggregateTransform transform) async {
87
+ var inputs = await transform.primaryInputs.toList();
88
+ var names = inputs.map((asset) => asset.id.toString()).toList();
89
+ names.sort();
90
+ transform.addOutput(new Asset.fromString(
91
+ new AssetId(transform.package, 'lib/inputs.txt'), names.join('\\ n')));
92
+ }
93
+ }
94
+ """ ;
95
+
58
96
main () {
59
97
integration ("caches a transformed dependency" , () {
60
98
servePackages ((builder) {
@@ -414,6 +452,48 @@ main() {
414
452
d.dir (appPath, [d.nothing (".pub/deps/debug/foo" )]).validate ();
415
453
});
416
454
455
+ // Regression test for https://github.com/dart-lang/pub/issues/1586.
456
+ integration (
457
+ "AggregateTransformers can read generated inputs from cached packages" ,
458
+ () {
459
+ servePackages ((builder) {
460
+ builder.serveRealPackage ('barback' );
461
+
462
+ builder.serve ("foo" , "1.2.3" , deps: {
463
+ 'barback' : 'any'
464
+ }, pubspec: {
465
+ 'transformers' : ['foo/copy_transformer' , 'foo/list_transformer' ],
466
+ }, contents: [
467
+ d.dir ("lib" , [
468
+ d.file ("hello.dart" , "String get hello => 'hello';" ),
469
+ d.file ("copy_transformer.dart" , COPY_TRANSFORMER ),
470
+ d.file ("list_transformer.dart" , LIST_INPUTS_TRANSFORMER ),
471
+ ])
472
+ ]);
473
+ });
474
+
475
+ d.appDir ({"foo" : "1.2.3" }).create ();
476
+
477
+ pubGet (output: contains ("Precompiled foo" ));
478
+
479
+ d.dir (appPath, [
480
+ d.matcherFile (
481
+ ".pub/deps/debug/foo/lib/inputs.txt" , contains ('hello.dart.copy' ))
482
+ ]).validate ();
483
+
484
+ pubServe ();
485
+ requestShouldSucceed (
486
+ "packages/foo/inputs.txt" ,
487
+ """
488
+ foo|lib/copy_transformer.dart
489
+ foo|lib/copy_transformer.dart.copy
490
+ foo|lib/hello.dart
491
+ foo|lib/hello.dart.copy
492
+ foo|lib/list_transformer.dart
493
+ foo|lib/list_transformer.dart.copy""" );
494
+ endPubServe ();
495
+ });
496
+
417
497
group ("with --no-precompile" , () {
418
498
integration ("doesn't cache a transformed dependency" , () {
419
499
servePackages ((builder) {
0 commit comments