Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1541)

Side by Side Diff: pkg/barback/test/asset_graph/transform_test.dart

Issue 16854005: First pass at build dependency graph for barback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 library barback.test.asset_graph.transform_test;
5
6 import 'dart:async';
7
8 import 'package:scheduled_test/scheduled_test.dart';
9
10 import 'package:barback/barback.dart';
11 import 'package:barback/src/asset_graph.dart';
12
13 import '../utils.dart';
14
15 main() {
16 initConfig();
17 test("gets a transformed asset with a different path", () {
18 var provider = new MockProvider({"app|foo.blub": "foo"});
19 var graph = new AssetGraph(provider, [
20 [new RewriteTransformer("blub", "blab")]
21 ]);
22 graph.updateSources([AssetId.parse("app|foo.blub")]);
23
24 expectAsset(graph, "app|foo.blab", "foo.blab");
25 });
26
27 test("gets a transformed asset with the same path", () {
28 var provider = new MockProvider({"app|foo.blub": "blub"});
29 var graph = new AssetGraph(provider, [
30 [new RewriteTransformer("blub", "blub")]
31 ]);
32 graph.updateSources([AssetId.parse("app|foo.blub")]);
33
34 expectAsset(graph, "app|foo.blub", "blub.blub");
35 });
36
37 test("doesn't find an output from a later phase", () {
38 var provider = new MockProvider({"app|foo.a": "a"});
39 var graph = new AssetGraph(provider, [
40 [new RewriteTransformer("b", "c")],
41 [new RewriteTransformer("a", "b")]
42 ]);
43 graph.updateSources([AssetId.parse("app|foo.a")]);
44
45 expectNoAsset(graph, "app|foo.c");
46 });
47
48 test("doesn't find an output from the same stage", () {
nweiz 2013/06/14 00:57:57 You're using "phase" and "stage" interchangeably.
Bob Nystrom 2013/06/17 23:35:05 Done.
49 var provider = new MockProvider({"app|foo.a": "a"});
50 var graph = new AssetGraph(provider, [
51 [
52 new RewriteTransformer("a", "b"),
53 new RewriteTransformer("b", "c")
54 ]
55 ]);
56 graph.updateSources([AssetId.parse("app|foo.a")]);
57
58 expectNoAsset(graph, "app|foo.c");
nweiz 2013/06/14 00:57:57 Expect that "foo.b" exists.
Bob Nystrom 2013/06/17 23:35:05 Done.
59 });
60
61 test("errors if two transformers output the same file", () {
62 var provider = new MockProvider({"app|foo.a": "foo"});
63 var graph = new AssetGraph(provider, [
64 [
65 new RewriteTransformer("a", "b"),
66 new RewriteTransformer("a", "b")
67 ]
68 ]);
69 graph.updateSources([AssetId.parse("app|foo.a")]);
70
71 expectCollision(graph, "app|foo.b");
72 });
73
74 test("finds the latest output before the transformer's stage", () {
75 var provider = new MockProvider({"app|foo.blub": "foo"});
76 var graph = new AssetGraph(provider, [
77 [new RewriteTransformer("blub", "blub")],
78 [
79 new RewriteTransformer("blub", "blub"),
80 new RewriteTransformer("blub", "done")
81 ],
82 [new RewriteTransformer("blub", "blub")]
83 ]);
84 graph.updateSources([AssetId.parse("app|foo.blub")]);
85
86 expectAsset(graph, "app|foo.done", "foo.blub.done");
87 });
88
89 test("applies multiple transformations to an asset", () {
90 var provider = new MockProvider({"app|foo.a": "a"});
91 var graph = new AssetGraph(provider, [
92 [new RewriteTransformer("a", "b")],
93 [new RewriteTransformer("b", "c")],
94 [new RewriteTransformer("c", "d")],
95 [new RewriteTransformer("d", "e")],
96 [new RewriteTransformer("e", "f")],
97 [new RewriteTransformer("f", "g")],
98 [new RewriteTransformer("g", "h")],
99 [new RewriteTransformer("h", "i")],
100 [new RewriteTransformer("i", "j")],
101 [new RewriteTransformer("j", "k")],
102 ]);
103 graph.updateSources([AssetId.parse("app|foo.a")]);
104
105 expectAsset(graph, "app|foo.k", "a.b.c.d.e.f.g.h.i.j.k");
106 });
107
108 test("only runs a transform once for all of its outputs", () {
109 var provider = new MockProvider(["app|foo.blub"]);
110 var transformer = new RewriteTransformer("blub", "a b c");
111 var graph = new AssetGraph(provider, [[transformer]]);
112 graph.updateSources([AssetId.parse("app|foo.blub")]);
113
114 expectAsset(graph, "app|foo.a", ".a");
115 expectAsset(graph, "app|foo.b", ".b");
116 expectAsset(graph, "app|foo.c", ".c");
117 schedule(() {
118 expect(transformer.numRuns, equals(1));
119 });
120 });
121
122 test("does not reapply transform when inputs are not modified", () {
123 var provider = new MockProvider({"app|foo.blub": "foo"});
124 var transformer = new RewriteTransformer("blub", "blab");
125 var graph = new AssetGraph(provider, [[transformer]]);
126 graph.updateSources([AssetId.parse("app|foo.blub")]);
127 expectAsset(graph, "app|foo.blab", "foo.blab");
128 expectAsset(graph, "app|foo.blab", "foo.blab");
129 expectAsset(graph, "app|foo.blab", "foo.blab");
130
131 schedule(() {
132 expect(transformer.numRuns, equals(1));
133 });
134 });
135
136 test("reapplies a transform when its input is modified", () {
137 var provider = new MockProvider({"app|foo.blub": "foo"});
138 var transformer = new RewriteTransformer("blub", "blab");
139 var graph = new AssetGraph(provider, [[transformer]]);
140
141 schedule(() {
142 graph.updateSources([AssetId.parse("app|foo.blub")]);
143 });
144
145 expectAsset(graph, "app|foo.blab", "foo.blab");
146
147 schedule(() {
148 graph.updateSources([AssetId.parse("app|foo.blub")]);
149 });
150
151 expectAsset(graph, "app|foo.blab", "foo.blab");
152
153 schedule(() {
154 graph.updateSources([AssetId.parse("app|foo.blub")]);
155 });
156
157 expectAsset(graph, "app|foo.blab", "foo.blab");
158
159 schedule(() {
160 expect(transformer.numRuns, equals(3));
161 });
162 });
163
164 test("allows a transform to generate multiple outputs", () {
165 var provider = new MockProvider({"app|foo.txt": "a.out,b.out"});
166 var graph = new AssetGraph(provider, [
167 [new OneToManyTransformer("txt")]
nweiz 2013/06/14 00:57:57 Can't RewriteTransformer already produce multiple
Bob Nystrom 2013/06/17 23:35:05 Not for a single input. It's a 1-1 transform*er*,
nweiz 2013/06/18 23:14:45 In that case, what's going on in "only runs a tran
Bob Nystrom 2013/06/20 00:23:59 Oh, right. I forgot I added support for outputting
168 ]);
169
170 graph.updateSources([AssetId.parse("app|foo.txt")]);
171
172 expectAsset(graph, "app|a.out", "spread txt");
173 expectAsset(graph, "app|b.out", "spread txt");
174 });
175
176 test("does not rebuild transforms that don't use modified source", () {
177 var provider = new MockProvider(["app|foo.a", "app|foo.b"]);
178 var a = new RewriteTransformer("a", "aa");
179 var aa = new RewriteTransformer("aa", "aaa");
180 var b = new RewriteTransformer("b", "bb");
181 var bb = new RewriteTransformer("bb", "bbb");
182
183 var graph = new AssetGraph(provider, [
184 [a, b],
185 [aa, bb],
186 ]);
187
188 graph.updateSources([AssetId.parse("app|foo.a")]);
189 graph.updateSources([AssetId.parse("app|foo.b")]);
190
191 expectAsset(graph, "app|foo.aaa", ".aa.aaa");
192 expectAsset(graph, "app|foo.bbb", ".bb.bbb");
193
194 schedule(() {
195 graph.updateSources([AssetId.parse("app|foo.a")]);
196 });
197
198 expectAsset(graph, "app|foo.aaa", ".aa.aaa");
199 expectAsset(graph, "app|foo.bbb", ".bb.bbb");
200
201 schedule(() {
202 expect(aa.numRuns, equals(2));
203 expect(bb.numRuns, equals(1));
204 });
205 });
206
207 test("doesn't get an output from a transform whose primary was removed", () {
nweiz 2013/06/14 00:57:57 "primary" -> "primary input" I don't understand t
Bob Nystrom 2013/06/17 23:35:05 Some sort of copy/paste screw up on my part. I thi
208 var provider = new MockProvider({"app|foo.txt": "a.out,b.out"});
209 var graph = new AssetGraph(provider, [
210 [new OneToManyTransformer("txt")]
211 ]);
212
213 graph.updateSources([AssetId.parse("app|foo.txt")]);
214
215 expectAsset(graph, "app|a.out", "spread txt");
216 expectAsset(graph, "app|b.out", "spread txt");
217
218 schedule(() {
219 provider.modifyAsset("app|foo.txt", "a.out");
220 graph.updateSources([AssetId.parse("app|foo.txt")]);
221 });
222
223 expectAsset(graph, "app|a.out", "spread txt");
224 expectNoAsset(graph, "app|b.out");
225 });
226
227 test("reapplies a transform when a non-primary input changes", () {
228 var provider = new MockProvider({
229 "app|a.txt": "a.inc",
230 "app|a.inc": "a"
231 });
232
233 var graph = new AssetGraph(provider, [
234 [new ManyToOneTransformer("txt")]
235 ]);
236
237 graph.updateSources([
238 AssetId.parse("app|a.txt"),
239 AssetId.parse("app|a.inc")
240 ]);
241
242 expectAsset(graph, "app|a.out", "a");
243
244 schedule(() {
245 provider.modifyAsset("app|a.inc", "after");
246 graph.updateSources([AssetId.parse("app|a.inc")]);
247 });
248
249 expectAsset(graph, "app|a.out", "after");
250 });
251
252
253 test("fails if a non-primary input is removed", () {
254 var provider = new MockProvider({
255 "app|a.txt": "a.inc,b.inc,c.inc",
256 "app|a.inc": "a",
257 "app|b.inc": "b",
258 "app|c.inc": "c"
259 });
260
261 var graph = new AssetGraph(provider, [
262 [new ManyToOneTransformer("txt")]
263 ]);
264
265 graph.updateSources([
266 AssetId.parse("app|a.txt"),
267 AssetId.parse("app|a.inc"),
268 AssetId.parse("app|b.inc"),
269 AssetId.parse("app|c.inc")
270 ]);
271
272 expectAsset(graph, "app|a.out", "abc");
273
274 schedule(() {
275 graph.removeSources([AssetId.parse("app|b.inc")]);
276 });
277
278 expectMissingInput(graph, "app|a.out", "app|b.inc");
279 });
280 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698