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 |