| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library barback.test.package_graph.source_test; | |
| 6 | |
| 7 import 'package:scheduled_test/scheduled_test.dart'; | |
| 8 | |
| 9 import '../utils.dart'; | |
| 10 | |
| 11 main() { | |
| 12 initConfig(); | |
| 13 test("gets a source asset", () { | |
| 14 initGraph(["app|foo.txt"]); | |
| 15 updateSources(["app|foo.txt"]); | |
| 16 expectAsset("app|foo.txt"); | |
| 17 buildShouldSucceed(); | |
| 18 }); | |
| 19 | |
| 20 test("doesn't get an unknown source", () { | |
| 21 initGraph(); | |
| 22 expectNoAsset("app|unknown.txt"); | |
| 23 }); | |
| 24 | |
| 25 test("doesn't get an unprovided source", () { | |
| 26 initGraph(); | |
| 27 updateSources(["app|unknown.txt"]); | |
| 28 expectNoAsset("app|unknown.txt"); | |
| 29 }); | |
| 30 | |
| 31 test("doesn't get an asset that isn't an updated source", () { | |
| 32 initGraph(["app|foo.txt"]); | |
| 33 | |
| 34 // Sources must be explicitly made visible to barback by calling | |
| 35 // updateSources() on them. It isn't enough for the provider to be able | |
| 36 // to provide it. | |
| 37 // | |
| 38 // This lets you distinguish between sources that you want to be primaries | |
| 39 // and the larger set of inputs that those primaries are allowed to pull in. | |
| 40 expectNoAsset("app|foo.txt"); | |
| 41 }); | |
| 42 | |
| 43 test("gets a source asset if not transformed", () { | |
| 44 initGraph(["app|foo.txt"], {"app": [ | |
| 45 [new RewriteTransformer("nottxt", "whatever")] | |
| 46 ]}); | |
| 47 | |
| 48 updateSources(["app|foo.txt"]); | |
| 49 expectAsset("app|foo.txt"); | |
| 50 buildShouldSucceed(); | |
| 51 }); | |
| 52 | |
| 53 test("doesn't get a removed source", () { | |
| 54 initGraph(["app|foo.txt"]); | |
| 55 | |
| 56 updateSources(["app|foo.txt"]); | |
| 57 expectAsset("app|foo.txt"); | |
| 58 buildShouldSucceed(); | |
| 59 | |
| 60 removeSources(["app|foo.txt"]); | |
| 61 expectNoAsset("app|foo.txt"); | |
| 62 buildShouldSucceed(); | |
| 63 }); | |
| 64 | |
| 65 test("collapses redundant updates", () { | |
| 66 var transformer = new RewriteTransformer("blub", "blab"); | |
| 67 initGraph(["app|foo.blub"], {"app": [[transformer]]}); | |
| 68 | |
| 69 schedule(() { | |
| 70 // Make a bunch of synchronous update calls. | |
| 71 updateSourcesSync(["app|foo.blub"]); | |
| 72 updateSourcesSync(["app|foo.blub"]); | |
| 73 updateSourcesSync(["app|foo.blub"]); | |
| 74 updateSourcesSync(["app|foo.blub"]); | |
| 75 }); | |
| 76 | |
| 77 expectAsset("app|foo.blab", "foo.blab"); | |
| 78 buildShouldSucceed(); | |
| 79 | |
| 80 expect(transformer.numRuns, completion(equals(1))); | |
| 81 }); | |
| 82 | |
| 83 test("a removal cancels out an update", () { | |
| 84 initGraph(["app|foo.txt"]); | |
| 85 | |
| 86 schedule(() { | |
| 87 updateSourcesSync(["app|foo.txt"]); | |
| 88 removeSourcesSync(["app|foo.txt"]); | |
| 89 }); | |
| 90 | |
| 91 expectNoAsset("app|foo.txt"); | |
| 92 buildShouldSucceed(); | |
| 93 }); | |
| 94 | |
| 95 test("an update cancels out a removal", () { | |
| 96 initGraph(["app|foo.txt"]); | |
| 97 | |
| 98 schedule(() { | |
| 99 removeSourcesSync(["app|foo.txt"]); | |
| 100 updateSourcesSync(["app|foo.txt"]); | |
| 101 }); | |
| 102 | |
| 103 expectAsset("app|foo.txt"); | |
| 104 buildShouldSucceed(); | |
| 105 }); | |
| 106 | |
| 107 test("reloads an asset that's updated while loading", () { | |
| 108 initGraph({"app|foo.txt": "foo"}); | |
| 109 | |
| 110 pauseProvider(); | |
| 111 // The mock provider synchronously loads the value of the assets, so this | |
| 112 // will kick off two loads with different values. The second one should | |
| 113 // win. | |
| 114 updateSources(["app|foo.txt"]); | |
| 115 modifyAsset("app|foo.txt", "bar"); | |
| 116 updateSources(["app|foo.txt"]); | |
| 117 | |
| 118 resumeProvider(); | |
| 119 expectAsset("app|foo.txt", "bar"); | |
| 120 buildShouldSucceed(); | |
| 121 }); | |
| 122 | |
| 123 test("restarts a build if a source is updated while sources are loading", () { | |
| 124 var transformer = new RewriteTransformer("txt", "out"); | |
| 125 initGraph(["app|foo.txt", "app|other.bar"], {"app": [[transformer]]}); | |
| 126 | |
| 127 // Run the whole graph so all nodes are clean. | |
| 128 updateSources(["app|foo.txt", "app|other.bar"]); | |
| 129 expectAsset("app|foo.out", "foo.out"); | |
| 130 expectAsset("app|other.bar"); | |
| 131 | |
| 132 buildShouldSucceed(); | |
| 133 | |
| 134 // Make the provider slow to load a source. | |
| 135 pauseProvider(); | |
| 136 | |
| 137 // Update an asset that doesn't trigger any transformers. | |
| 138 updateSources(["app|other.bar"]); | |
| 139 | |
| 140 // Now update an asset that does trigger a transformer. | |
| 141 updateSources(["app|foo.txt"]); | |
| 142 | |
| 143 resumeProvider(); | |
| 144 | |
| 145 buildShouldSucceed(); | |
| 146 | |
| 147 expect(transformer.numRuns, completion(equals(2))); | |
| 148 }); | |
| 149 } | |
| OLD | NEW |