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

Side by Side Diff: pkg/barback/test/package_graph/transform/declaring_aggregate_test.dart

Issue 808713003: Remove barback from the repo. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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) 2014, 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.transform.declaring_aggregate_test;
6
7 import 'package:barback/src/utils.dart';
8 import 'package:scheduled_test/scheduled_test.dart';
9
10 import '../../utils.dart';
11
12 main() {
13 initConfig();
14 group("a declaring aggregate transformer", () {
15 test("is eager by default", () {
16 var transformer = new DeclaringAggregateManyToOneTransformer(
17 "txt", "out.txt");
18 initGraph(["app|foo.txt"], {"app": [[transformer]]});
19
20 updateSources(["app|foo.txt"]);
21 buildShouldSucceed();
22
23 expect(transformer.numRuns, completion(equals(1)));
24 });
25
26 test("is deferred if any primary input is deferred", () {
27 var rewrite = new LazyRewriteTransformer("in", "txt");
28 var aggregate = new DeclaringAggregateManyToOneTransformer(
29 "txt", "out.txt");
30 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
31 [rewrite]
32 ]});
33
34 updateSources(["app|foo.in", "app|bar.txt", "app|baz.txt"]);
35 buildShouldSucceed();
36
37 // Add [aggregate] to the graph after a build has been completed so that
38 // all its inputs are available immediately. Otherwise it could start
39 // applying eagerly before receiving its lazy input.
40 updateTransformers("app", [[rewrite], [aggregate]]);
41 buildShouldSucceed();
42 expect(aggregate.numRuns, completion(equals(0)));
43
44 expectAsset("app|out.txt", "bar\nbaz\nfoo.txt");
45 buildShouldSucceed();
46 expect(aggregate.numRuns, completion(equals(1)));
47 });
48
49 test("switches from eager to deferred if a deferred primary input is added",
50 () {
51 var transformer = new DeclaringAggregateManyToOneTransformer(
52 "txt", "out.txt");
53 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
54 [new LazyRewriteTransformer("in", "txt")],
55 [transformer]
56 ]});
57
58 updateSources(["app|bar.txt", "app|baz.txt"]);
59 buildShouldSucceed();
60 expect(transformer.numRuns, completion(equals(1)));
61
62 updateSources(["app|foo.in"]);
63 buildShouldSucceed();
64 expect(transformer.numRuns, completion(equals(1)));
65
66 expectAsset("app|out.txt", "bar\nbaz\nfoo.txt");
67 buildShouldSucceed();
68 expect(transformer.numRuns, completion(equals(2)));
69 });
70
71 test("switches from deferred to eager if its last deferred primary input "
72 "is removed", () {
73 var rewrite = new LazyRewriteTransformer("in", "txt");
74 var aggregate = new DeclaringAggregateManyToOneTransformer(
75 "txt", "out.txt");
76 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
77 [rewrite]
78 ]});
79
80 updateSources(["app|foo.in", "app|bar.txt", "app|baz.txt"]);
81 buildShouldSucceed();
82
83 // Add [aggregate] to the graph after a build has been completed so that
84 // all its inputs are available immediately. Otherwise it could start
85 // applying eagerly before receiving its lazy input.
86 updateTransformers("app", [[rewrite], [aggregate]]);
87 buildShouldSucceed();
88 expect(aggregate.numRuns, completion(equals(0)));
89
90 removeSources(["app|foo.in"]);
91 buildShouldSucceed();
92 expect(aggregate.numRuns, completion(equals(1)));
93 });
94
95 test("begins running eagerly when all its deferred primary inputs become "
96 "available", () {
97 var lazyPhase = [
98 new LazyAssetsTransformer(["app|foo.txt", "app|foo.x"],
99 input: "app|foo.in"),
100 new LazyAssetsTransformer(["app|bar.txt", "app|bar.x"],
101 input: "app|bar.in")
102 ];
103 var transformer = new DeclaringAggregateManyToOneTransformer(
104 "txt", "out.txt");
105 initGraph(["app|foo.in", "app|bar.in", "app|baz.txt"], {"app": [
106 lazyPhase,
107 ]});
108
109 updateSources(["app|foo.in", "app|bar.in", "app|baz.txt"]);
110 buildShouldSucceed();
111
112 // Add [transformer] to the graph after a build has been completed so that
113 // all its inputs are available immediately. Otherwise it could start
114 // applying eagerly before receiving its lazy inputs.
115 updateTransformers("app", [lazyPhase, [transformer]]);
116 buildShouldSucceed();
117 expect(transformer.numRuns, completion(equals(0)));
118
119 // Now "app|foo.txt" will be available, but "app|bar.txt" won't, so the
120 // [transformer] shouldn't run.
121 expectAsset("app|foo.x", "app|foo.x");
122 buildShouldSucceed();
123 expect(transformer.numRuns, completion(equals(0)));
124
125 // Now "app|foo.txt" and "app|bar.txt" will both be available, so the
126 // [transformer] should run.
127 expectAsset("app|bar.x", "app|bar.x");
128 buildShouldSucceed();
129 expect(transformer.numRuns, completion(equals(1)));
130 });
131
132 test("stops running eagerly when any of its deferred primary inputs become "
133 "unavailable", () {
134 var lazyPhase = [
135 new LazyAssetsTransformer(["app|foo.txt", "app|foo.x"],
136 input: "app|foo.in"),
137 new LazyAssetsTransformer(["app|bar.txt", "app|bar.x"],
138 input: "app|bar.in")
139 ];
140 var transformer = new DeclaringAggregateManyToOneTransformer(
141 "txt", "out.txt");
142 initGraph(["app|foo.in", "app|bar.in", "app|baz.txt"], {"app": [
143 lazyPhase
144 ]});
145
146 updateSources(["app|foo.in", "app|bar.in", "app|baz.txt"]);
147 expectAsset("app|foo.x", "app|foo.x");
148 expectAsset("app|bar.x", "app|bar.x");
149 buildShouldSucceed();
150
151 // Add [transformer] to the graph after a build has been completed so that
152 // all its inputs are available immediately. Otherwise it could start
153 // applying eagerly before receiving its lazy inputs.
154 updateTransformers("app", [lazyPhase, [transformer]]);
155 buildShouldSucceed();
156 expect(transformer.numRuns, completion(equals(1)));
157
158 // Now "app|foo.txt" is unavailable, so the [transformer] shouldn't run.
159 updateSources(["app|foo.in"]);
160 buildShouldSucceed();
161 expect(transformer.numRuns, completion(equals(1)));
162 });
163
164 test("re-declares its outputs for a new primary input", () {
165 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
166 [new LazyRewriteTransformer("in", "txt")],
167 [new DeclaringAggregateManyToManyTransformer("txt")]
168 ]});
169
170 updateSources(["app|foo.in", "app|bar.txt"]);
171 buildShouldSucceed();
172
173 updateSources(["app|baz.txt"]);
174 buildShouldSucceed();
175
176 // If the aggregate transformer didn't re-declare its outputs upon getting
177 // a new primary input, getting "baz.txt" wouldn't trigger an apply and
178 // would just return the unmodified baz.
179 expectAsset("app|baz.txt", "modified baz");
180 });
181
182 test("re-declares its outputs for a new primary input received while "
183 "applying", () {
184 var transformer = new DeclaringAggregateManyToManyTransformer("txt");
185 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
186 [new LazyRewriteTransformer("in", "txt")],
187 [transformer]
188 ]});
189
190 transformer.pauseApply();
191 updateSources(["app|foo.in", "app|bar.txt"]);
192
193 // Ensure we're waiting on `apply()`.
194 schedule(pumpEventQueue);
195
196 updateSources(["app|baz.txt"]);
197 transformer.resumeApply();
198 buildShouldSucceed();
199
200 expectAsset("app|baz.txt", "modified baz");
201 });
202
203 test("re-declares its outputs for a new primary input received while "
204 "applying after a primary input was modified", () {
205 var transformer = new DeclaringAggregateManyToManyTransformer("txt");
206 initGraph(["app|foo.in", "app|bar.txt", "app|baz.txt"], {"app": [
207 [new LazyRewriteTransformer("in", "txt")],
208 [transformer]
209 ]});
210
211 transformer.pauseApply();
212 updateSources(["app|foo.in", "app|bar.txt"]);
213
214 // Ensure we're waiting on `apply()`.
215 schedule(pumpEventQueue);
216
217 updateSources(["app|bar.txt"]);
218
219 // Make sure the change to "bar.txt" is fully processed.
220 schedule(pumpEventQueue);
221
222 updateSources(["app|baz.txt"]);
223 transformer.resumeApply();
224 buildShouldSucceed();
225
226 expectAsset("app|baz.txt", "modified baz");
227 });
228 });
229
230 group("a lazy aggregate transformer", () {
231 test("doesn't run eagerly", () {
232 var transformer = new LazyAggregateManyToOneTransformer("txt", "out.txt");
233 initGraph(["app|foo.txt"], {"app": [[transformer]]});
234
235 updateSources(["app|foo.txt"]);
236 buildShouldSucceed();
237
238 expect(transformer.numRuns, completion(equals(0)));
239 });
240
241 test("runs when an output is requested", () {
242 initGraph(["app|foo.txt"], {"app": [[
243 new LazyAggregateManyToOneTransformer("txt", "out.txt")
244 ]]});
245
246 updateSources(["app|foo.txt"]);
247 buildShouldSucceed();
248 expectAsset("app|out.txt", "foo");
249 });
250 });
251 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698