| Index: packages/barback/test/package_graph/transform/cross_package_test.dart
|
| diff --git a/packages/barback/test/package_graph/transform/cross_package_test.dart b/packages/barback/test/package_graph/transform/cross_package_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b499604680d968d767eb3ad36e6d30af09b0a8c6
|
| --- /dev/null
|
| +++ b/packages/barback/test/package_graph/transform/cross_package_test.dart
|
| @@ -0,0 +1,193 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library barback.test.package_graph.transform.pass_through_test;
|
| +
|
| +import 'package:barback/src/utils.dart';
|
| +import 'package:scheduled_test/scheduled_test.dart';
|
| +
|
| +import '../../utils.dart';
|
| +
|
| +main() {
|
| + initConfig();
|
| + test("can access other packages' source assets", () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.inc": "a"
|
| + }, {"pkg1": [[new ManyToOneTransformer("txt")]]});
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.inc"]);
|
| + expectAsset("pkg1|a.out", "a");
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("can access other packages' transformed assets", () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.txt": "a"
|
| + }, {
|
| + "pkg1": [[new ManyToOneTransformer("txt")]],
|
| + "pkg2": [[new RewriteTransformer("txt", "inc")]]
|
| + });
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.txt"]);
|
| + expectAsset("pkg1|a.out", "a.inc");
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("re-runs a transform when an input from another package changes", () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.inc": "a"
|
| + }, {
|
| + "pkg1": [[new ManyToOneTransformer("txt")]]
|
| + });
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.inc"]);
|
| + expectAsset("pkg1|a.out", "a");
|
| + buildShouldSucceed();
|
| +
|
| + modifyAsset("pkg2|a.inc", "new a");
|
| + updateSources(["pkg2|a.inc"]);
|
| + expectAsset("pkg1|a.out", "new a");
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("re-runs a transform when a transformed input from another package "
|
| + "changes", () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.txt": "a"
|
| + }, {
|
| + "pkg1": [[new ManyToOneTransformer("txt")]],
|
| + "pkg2": [[new RewriteTransformer("txt", "inc")]]
|
| + });
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.txt"]);
|
| + expectAsset("pkg1|a.out", "a.inc");
|
| + buildShouldSucceed();
|
| +
|
| + modifyAsset("pkg2|a.txt", "new a");
|
| + updateSources(["pkg2|a.txt"]);
|
| + expectAsset("pkg1|a.out", "new a.inc");
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("doesn't complete the build until all packages' transforms are "
|
| + "finished running", () {
|
| + var transformer = new ManyToOneTransformer("txt");
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.inc": "a"
|
| + }, {
|
| + "pkg1": [[transformer]]
|
| + });
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.inc"]);
|
| + expectAsset("pkg1|a.out", "a");
|
| + buildShouldSucceed();
|
| +
|
| + transformer.pauseApply();
|
| + modifyAsset("pkg2|a.inc", "new a");
|
| + updateSources(["pkg2|a.inc"]);
|
| + buildShouldNotBeDone();
|
| +
|
| + transformer.resumeApply();
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("runs a transform that's added because of a change in another package",
|
| + () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.inc": "b"
|
| + }, {
|
| + "pkg1": [
|
| + [new ManyToOneTransformer("txt")],
|
| + [new OneToManyTransformer("out")],
|
| + [new RewriteTransformer("md", "done")]
|
| + ],
|
| + });
|
| +
|
| + // pkg1|a.txt generates outputs based on the contents of pkg2|a.inc. At
|
| + // first pkg2|a.inc only includes "b", which is not transformed. Then
|
| + // pkg2|a.inc is updated to include "b,c.md". pkg1|c.md triggers the
|
| + // md->done rewrite transformer, producing pkg1|c.done.
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.inc"]);
|
| + expectAsset("pkg1|b", "spread out");
|
| + buildShouldSucceed();
|
| +
|
| + modifyAsset("pkg2|a.inc", "b,c.md");
|
| + updateSources(["pkg2|a.inc"]);
|
| + expectAsset("pkg1|b", "spread out");
|
| + expectAsset("pkg1|c.done", "spread out.done");
|
| + buildShouldSucceed();
|
| + });
|
| +
|
| + test("doesn't run a transform that's removed because of a change in "
|
| + "another package", () {
|
| + initGraph({
|
| + "pkg1|a.txt": "pkg2|a.inc",
|
| + "pkg2|a.inc": "b,c.md"
|
| + }, {
|
| + "pkg1": [
|
| + [new ManyToOneTransformer("txt")],
|
| + [new OneToManyTransformer("out")],
|
| + [new RewriteTransformer("md", "done")]
|
| + ],
|
| + });
|
| +
|
| + updateSources(["pkg1|a.txt", "pkg2|a.inc"]);
|
| + expectAsset("pkg1|b", "spread out");
|
| + expectAsset("pkg1|c.done", "spread out.done");
|
| + buildShouldSucceed();
|
| +
|
| + modifyAsset("pkg2|a.inc", "b");
|
| + updateSources(["pkg2|a.inc"]);
|
| + expectAsset("pkg1|b", "spread out");
|
| + 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();
|
| + });
|
| +}
|
|
|