OLD | NEW |
| (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 pub.test.preprocess_test; | |
6 | |
7 import 'package:pub_semver/pub_semver.dart'; | |
8 import 'package:unittest/unittest.dart'; | |
9 | |
10 import '../lib/src/preprocess.dart'; | |
11 import 'test_pub.dart'; | |
12 | |
13 main() { | |
14 initConfig(); | |
15 | |
16 test("does nothing on a file without preprocessor directives", () { | |
17 var text = ''' | |
18 some text | |
19 // normal comment | |
20 // # | |
21 //# not beginning of line | |
22 '''; | |
23 | |
24 expect(_preprocess(text), equals(text)); | |
25 }); | |
26 | |
27 test("allows bare insert directive", () { | |
28 expect(_preprocess('//> foo'), equals('foo')); | |
29 }); | |
30 | |
31 test("allows empty insert directive", () { | |
32 expect(_preprocess(''' | |
33 //> foo | |
34 //> | |
35 //> bar | |
36 '''), equals('foo\n\nbar\n')); | |
37 }); | |
38 | |
39 group("if", () { | |
40 group("with a version range", () { | |
41 test("removes sections with non-matching versions", () { | |
42 expect(_preprocess(''' | |
43 before | |
44 //# if barback <1.0.0 | |
45 inside | |
46 //# end | |
47 after | |
48 '''), equals(''' | |
49 before | |
50 after | |
51 ''')); | |
52 }); | |
53 | |
54 test("doesn't insert section with non-matching versions", () { | |
55 expect(_preprocess(''' | |
56 before | |
57 //# if barback <1.0.0 | |
58 //> inside | |
59 //# end | |
60 after | |
61 '''), equals(''' | |
62 before | |
63 after | |
64 ''')); | |
65 }); | |
66 | |
67 test("doesn't remove sections with matching versions", () { | |
68 expect(_preprocess(''' | |
69 before | |
70 //# if barback >1.0.0 | |
71 inside | |
72 //# end | |
73 after | |
74 '''), equals(''' | |
75 before | |
76 inside | |
77 after | |
78 ''')); | |
79 }); | |
80 | |
81 test("inserts sections with matching versions", () { | |
82 expect(_preprocess(''' | |
83 before | |
84 //# if barback >1.0.0 | |
85 //> inside | |
86 //# end | |
87 after | |
88 '''), equals(''' | |
89 before | |
90 inside | |
91 after | |
92 ''')); | |
93 }); | |
94 | |
95 test("allows multi-element version ranges", () { | |
96 expect(_preprocess(''' | |
97 before | |
98 //# if barback >=1.0.0 <2.0.0 | |
99 inside 1 | |
100 //# end | |
101 //# if barback >=0.9.0 <1.0.0 | |
102 inside 2 | |
103 //# end | |
104 after | |
105 '''), equals(''' | |
106 before | |
107 inside 1 | |
108 after | |
109 ''')); | |
110 }); | |
111 }); | |
112 | |
113 group("with a package name", () { | |
114 test("removes sections for a nonexistent package", () { | |
115 expect(_preprocess(''' | |
116 before | |
117 //# if fblthp | |
118 inside | |
119 //# end | |
120 after | |
121 '''), equals(''' | |
122 before | |
123 after | |
124 ''')); | |
125 }); | |
126 | |
127 test("doesn't insert sections for a nonexistent package", () { | |
128 expect(_preprocess(''' | |
129 before | |
130 //# if fblthp | |
131 //> inside | |
132 //# end | |
133 after | |
134 '''), equals(''' | |
135 before | |
136 after | |
137 ''')); | |
138 }); | |
139 | |
140 test("doesn't remove sections with an existent package", () { | |
141 expect(_preprocess(''' | |
142 before | |
143 //# if barback | |
144 inside | |
145 //# end | |
146 after | |
147 '''), equals(''' | |
148 before | |
149 inside | |
150 after | |
151 ''')); | |
152 }); | |
153 | |
154 test("inserts sections with an existent package", () { | |
155 expect(_preprocess(''' | |
156 before | |
157 //# if barback | |
158 //> inside | |
159 //# end | |
160 after | |
161 '''), equals(''' | |
162 before | |
163 inside | |
164 after | |
165 ''')); | |
166 }); | |
167 }); | |
168 }); | |
169 | |
170 group("else", () { | |
171 test("removes non-matching sections", () { | |
172 expect(_preprocess(''' | |
173 before | |
174 //# if barback >1.0.0 | |
175 inside 1 | |
176 //# else | |
177 inside 2 | |
178 //# end | |
179 after | |
180 '''), equals(''' | |
181 before | |
182 inside 1 | |
183 after | |
184 ''')); | |
185 }); | |
186 | |
187 test("doesn't insert non-matching sections", () { | |
188 expect(_preprocess(''' | |
189 before | |
190 //# if barback >1.0.0 | |
191 inside 1 | |
192 //# else | |
193 //> inside 2 | |
194 //# end | |
195 after | |
196 '''), equals(''' | |
197 before | |
198 inside 1 | |
199 after | |
200 ''')); | |
201 }); | |
202 | |
203 test("doesn't remove matching sections", () { | |
204 expect(_preprocess(''' | |
205 before | |
206 //# if barback <1.0.0 | |
207 inside 1 | |
208 //# else | |
209 inside 2 | |
210 //# end | |
211 after | |
212 '''), equals(''' | |
213 before | |
214 inside 2 | |
215 after | |
216 ''')); | |
217 }); | |
218 | |
219 test("inserts matching sections", () { | |
220 expect(_preprocess(''' | |
221 before | |
222 //# if barback <1.0.0 | |
223 inside 1 | |
224 //# else | |
225 //> inside 2 | |
226 //# end | |
227 after | |
228 '''), equals(''' | |
229 before | |
230 inside 2 | |
231 after | |
232 ''')); | |
233 }); | |
234 }); | |
235 | |
236 group("errors", () { | |
237 test("disallows unknown statements", () { | |
238 expect(() => _preprocess('//# foo bar\n//# end'), throwsFormatException); | |
239 }); | |
240 | |
241 test("disallows insert directive without space", () { | |
242 expect(() => _preprocess('//>foo'), throwsFormatException); | |
243 }); | |
244 | |
245 group("if", () { | |
246 test("disallows if with no arguments", () { | |
247 expect(() => _preprocess('//# if\n//# end'), throwsFormatException); | |
248 }); | |
249 | |
250 test("disallows if with no package", () { | |
251 expect( | |
252 () => _preprocess('//# if <=1.0.0\n//# end'), | |
253 throwsFormatException); | |
254 }); | |
255 | |
256 test("disallows invalid version constraint", () { | |
257 expect( | |
258 () => _preprocess('//# if barback >=1.0\n//# end'), | |
259 throwsFormatException); | |
260 }); | |
261 | |
262 test("disallows dangling end", () { | |
263 expect(() => _preprocess('//# end'), throwsFormatException); | |
264 }); | |
265 | |
266 test("disallows if without end", () { | |
267 expect( | |
268 () => _preprocess('//# if barback >=1.0.0'), | |
269 throwsFormatException); | |
270 }); | |
271 | |
272 test("disallows nested if", () { | |
273 expect(() => _preprocess(''' | |
274 //# if barback >=1.0.0 | |
275 //# if barback >= 1.5.0 | |
276 //# end | |
277 //# end | |
278 '''), throwsFormatException); | |
279 }); | |
280 }); | |
281 | |
282 group("else", () { | |
283 test("disallows else without if", () { | |
284 expect(() => _preprocess('//# else\n//# end'), throwsFormatException); | |
285 }); | |
286 | |
287 test("disallows else without end", () { | |
288 expect( | |
289 () => _preprocess('//# if barback >=1.0.0\n//# else'), | |
290 throwsFormatException); | |
291 }); | |
292 | |
293 test("disallows else with an argument", () { | |
294 expect(() => _preprocess(''' | |
295 //# if barback >=1.0.0 | |
296 //# else barback <0.5.0 | |
297 //# end | |
298 '''), throwsFormatException); | |
299 }); | |
300 }); | |
301 }); | |
302 } | |
303 | |
304 String _preprocess(String input) => preprocess(input, { | |
305 'barback': new Version.parse("1.2.3") | |
306 }, 'source/url'); | |
OLD | NEW |