Index: pkg/barback/test/package_graph/transform_test.dart |
diff --git a/pkg/barback/test/package_graph/transform_test.dart b/pkg/barback/test/package_graph/transform_test.dart |
index ba14d16eb58f9a1dc85241e9af2691291d50fd6c..9248e578544d62de509f0e2ff707415cbce1722d 100644 |
--- a/pkg/barback/test/package_graph/transform_test.dart |
+++ b/pkg/barback/test/package_graph/transform_test.dart |
@@ -806,6 +806,202 @@ main() { |
buildShouldSucceed(); |
}); |
+ group("added/removed transformers", () { |
Bob Nystrom
2013/08/20 19:08:54
Let's move this to a separate test suite. This one
nweiz
2013/08/20 21:39:17
Done.
|
+ test("a new transformer is applied to a matching asset", () { |
+ initGraph(["app|foo.blub"]); |
+ |
+ updateSources(["app|foo.blub"]); |
+ expectAsset("app|foo.blub", "foo"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [[new RewriteTransformer("blub", "blab")]]); |
+ expectAsset("app|foo.blab", "foo.blab"); |
+ expectNoAsset("app|foo.blub"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a new transformer is not applied to a non-matching asset", () { |
+ initGraph(["app|foo.blub"]); |
+ |
+ updateSources(["app|foo.blub"]); |
+ expectAsset("app|foo.blub", "foo"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [[new RewriteTransformer("zip", "zap")]]); |
+ expectAsset("app|foo.blub", "foo"); |
+ expectNoAsset("app|foo.zap"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("updateTransformers doesn't re-run an old transformer", () { |
Bob Nystrom
2013/08/20 19:08:54
What if the old transformer is updated to be in a
nweiz
2013/08/20 21:39:17
Barback sees that as two new transformers. A trans
|
+ var rewrite = new RewriteTransformer("blub", "blab"); |
+ initGraph(["app|foo.blub"], {"app": [[rewrite]]}); |
+ |
+ updateSources(["app|foo.blub"]); |
+ expectAsset("app|foo.blab", "foo.blab"); |
+ expectNoAsset("app|foo.blub"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [[rewrite]]); |
+ expectAsset("app|foo.blab", "foo.blab"); |
+ expectNoAsset("app|foo.blub"); |
+ buildShouldSucceed(); |
+ |
+ expect(rewrite.numRuns, completion(equals(1))); |
+ }); |
+ |
+ test("a removed transformer is no longer applied", () { |
+ initGraph(["app|foo.blub"], {"app": [ |
+ [new RewriteTransformer("blub", "blab")] |
+ ]}); |
+ |
+ updateSources(["app|foo.blub"]); |
+ expectAsset("app|foo.blab", "foo.blab"); |
+ expectNoAsset("app|foo.blub"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", []); |
+ expectAsset("app|foo.blub", "foo"); |
+ expectNoAsset("app|foo.blab"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a new transformer is pipelined", () { |
+ var rewrite1 = new RewriteTransformer("source", "phase1"); |
+ var rewrite3 = new RewriteTransformer("phase2", "phase3"); |
+ initGraph(["app|foo.source"], {"app": [ |
+ [rewrite1], |
+ [rewrite3] |
+ ]}); |
+ |
+ updateSources(["app|foo.source"]); |
+ expectNoAsset("app|foo.phase3"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [ |
+ [rewrite1], |
+ [new RewriteTransformer("phase1", "phase2")], |
+ [rewrite3] |
+ ]); |
+ expectAsset("app|foo.phase3", "foo.phase1.phase2.phase3"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a removed transformer is un-pipelined", () { |
+ var rewrite1 = new RewriteTransformer("source", "phase1"); |
+ var rewrite3 = new RewriteTransformer("phase2", "phase3"); |
+ initGraph(["app|foo.source"], {"app": [ |
+ [rewrite1], |
+ [new RewriteTransformer("phase1", "phase2")], |
+ [rewrite3] |
+ ]}); |
+ |
+ updateSources(["app|foo.source"]); |
+ expectAsset("app|foo.phase3", "foo.phase1.phase2.phase3"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [[rewrite1], [rewrite3]]); |
+ expectNoAsset("app|foo.phase3"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a transformer is removed during isPrimary", () { |
+ var rewrite = new RewriteTransformer("blub", "blab"); |
+ initGraph(["app|foo.blub"], {"app": [[rewrite]]}); |
+ |
+ rewrite.pauseIsPrimary("app|foo.blub"); |
+ updateSources(["app|foo.blub"]); |
+ // Ensure we're waiting on [rewrite.isPrimary]. |
+ schedule(pumpEventQueue); |
+ |
+ updateTransformers("app", []); |
+ rewrite.resumeIsPrimary("app|foo.blub"); |
+ expectAsset("app|foo.blub", "foo"); |
+ expectNoAsset("app|foo.blab"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a transformer is removed during apply", () { |
+ var rewrite = new RewriteTransformer("blub", "blab"); |
+ initGraph(["app|foo.blub"], {"app": [[rewrite]]}); |
+ |
+ rewrite.pauseApply(); |
+ updateSources(["app|foo.blub"]); |
+ // Ensure we're waiting on [rewrite.apply]. |
+ schedule(pumpEventQueue); |
+ |
+ updateTransformers("app", []); |
+ rewrite.resumeApply(); |
+ expectAsset("app|foo.blub", "foo"); |
+ expectNoAsset("app|foo.blab"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a new transformer can see pass-through assets", () { |
+ var rewrite = new RewriteTransformer("zip", "zap"); |
+ initGraph(["app|foo.blub"], {"app": [[rewrite]]}); |
+ |
+ updateSources(["app|foo.blub"]); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("app", [ |
+ [rewrite], |
+ [new RewriteTransformer("blub", "blab")] |
+ ]); |
+ expectAsset("app|foo.blab", "foo.blab"); |
+ expectNoAsset("app|foo.blub"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a cross-package transform sees a new transformer in a new phase", () { |
+ // TODO(nweiz): make this work. |
+ return; |
Bob Nystrom
2013/08/20 19:08:54
I'd like this to be more visible. How about pullin
nweiz
2013/08/20 21:39:17
It won't be around for more than a week or two; I'
Bob Nystrom
2013/08/20 22:18:12
SGTM.
|
+ |
+ var rewrite = new RewriteTransformer("inc", "inc"); |
+ initGraph({ |
+ "pkg1|foo.txt": "pkg2|foo.inc", |
+ "pkg2|foo.inc": "foo" |
+ }, { |
+ "pkg1": [[new ManyToOneTransformer("txt")]], |
+ "pkg2": [[rewrite]] |
+ }); |
+ |
+ updateSources(["pkg1|foo.txt", "pkg2|foo.inc"]); |
+ expectAsset("pkg1|foo.out", "foo"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("pkg2", [ |
+ [rewrite], |
+ [new RewriteTransformer("inc", "inc")] |
+ ]); |
+ expectAsset("pkg1|foo.out", "foo.inc.inc"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("a cross-package transform doesn't see a removed transformer in a " |
+ "removed phase", () { |
+ var rewrite = new RewriteTransformer("inc", "inc"); |
+ initGraph({ |
+ "pkg1|foo.txt": "pkg2|foo.inc", |
+ "pkg2|foo.inc": "foo" |
+ }, { |
+ "pkg1": [[new ManyToOneTransformer("txt")]], |
+ "pkg2": [ |
+ [rewrite], |
+ [new RewriteTransformer("inc", "inc")] |
+ ] |
+ }); |
+ |
+ updateSources(["pkg1|foo.txt", "pkg2|foo.inc"]); |
+ expectAsset("pkg1|foo.out", "foo.inc.inc"); |
+ buildShouldSucceed(); |
+ |
+ updateTransformers("pkg2", [[rewrite]]); |
+ expectAsset("pkg1|foo.out", "foo.inc"); |
+ buildShouldSucceed(); |
+ }); |
+ }); |
+ |
group("pass-through", () { |
test("passes an asset through a phase in which no transforms apply", () { |
initGraph([ |
@@ -1055,5 +1251,45 @@ main() { |
expectNoAsset("pkg1|c.done"); |
buildShouldSucceed(); |
}); |
+ |
+ test("sees a transformer that's newly applied to a cross-package " |
+ "dependency", () { |
+ initGraph({ |
+ "pkg1|a.txt": "pkg2|a.inc", |
+ "pkg2|a.inc": "a" |
+ }, { |
+ "pkg1": [[new ManyToOneTransformer("txt")]], |
+ "pkg2": [[new CheckContentTransformer("b", " transformed")]] |
+ }); |
+ |
+ updateSources(["pkg1|a.txt", "pkg2|a.inc"]); |
+ expectAsset("pkg1|a.out", "a"); |
+ buildShouldSucceed(); |
+ |
+ modifyAsset("pkg2|a.inc", "b"); |
+ updateSources(["pkg2|a.inc"]); |
+ expectAsset("pkg1|a.out", "b transformed"); |
+ buildShouldSucceed(); |
+ }); |
+ |
+ test("doesn't see a transformer that's newly not applied to a " |
+ "cross-package dependency", () { |
+ initGraph({ |
+ "pkg1|a.txt": "pkg2|a.inc", |
+ "pkg2|a.inc": "a" |
+ }, { |
+ "pkg1": [[new ManyToOneTransformer("txt")]], |
+ "pkg2": [[new CheckContentTransformer("a", " transformed")]] |
+ }); |
+ |
+ updateSources(["pkg1|a.txt", "pkg2|a.inc"]); |
+ expectAsset("pkg1|a.out", "a transformed"); |
+ buildShouldSucceed(); |
+ |
+ modifyAsset("pkg2|a.inc", "b"); |
+ updateSources(["pkg2|a.inc"]); |
+ expectAsset("pkg1|a.out", "b"); |
+ buildShouldSucceed(); |
+ }); |
}); |
} |