rant 0.5.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
 
2
- # rantvar.rb - Constants required by all Rant code.
2
+ # rantvar.rb - Support for the +var+ method in Rantfiles.
3
3
  #
4
4
  # Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
5
5
  #
@@ -17,7 +17,6 @@
17
17
  # README[link:files/README.html].
18
18
 
19
19
  module Rant
20
- VERSION = '0.5.0'
21
20
 
22
21
  # Those are the filenames for rantfiles.
23
22
  # Case matters!
@@ -44,11 +43,6 @@ module Rant
44
43
  module Generators
45
44
  end
46
45
 
47
- @__rant_no_value__ = Object.new.freeze
48
- def self.__rant_no_value__
49
- @__rant_no_value__
50
- end
51
-
52
46
  module RantVar
53
47
 
54
48
  class Error < Rant::Error
@@ -16,7 +16,7 @@ gen Directory, "build.t"
16
16
  gen Directory, "build2.t"
17
17
 
18
18
  gen Action do
19
- rac.build "build.t"
19
+ make "build.t"
20
20
  end
21
21
 
22
22
  gen DirectedRule, "build2.t" => ["src.t"], '.2a' => '.2b' do |t|
@@ -0,0 +1,481 @@
1
+
2
+ require 'test/unit'
3
+ require 'tutil'
4
+ require 'rant/filelist'
5
+ require 'rant/import/sys/more'
6
+
7
+ $test_lib_dir ||= File.expand_path(File.dirname(__FILE__))
8
+
9
+ class TestRantFileList < Test::Unit::TestCase
10
+ include Rant::TestUtil
11
+ def assert_entries(entry_ary, fl)
12
+ assert_equal entry_ary.size, fl.size
13
+ entry_ary.each { |entry| assert fl.include?(entry) }
14
+ end
15
+ def setup
16
+ # Ensure we run in test directory.
17
+ Dir.chdir($test_lib_dir)
18
+ end
19
+ def test_require
20
+ in_local_temp_dir do
21
+ Rant::Sys.write_to_file "fl.rb", <<-EOF
22
+ require 'rant/filelist'
23
+ File.open("out", "w") do |f|
24
+ f.puts Rant::FileList["*.{rb,t}"].sort!
25
+ end
26
+ EOF
27
+ Rant::Sys.touch "a.t"
28
+ Rant::Sys.ruby "-I", ENV["RANT_DEV_LIB_DIR"], "fl.rb"
29
+ assert_equal "a.t\nfl.rb\n", File.read("out")
30
+ end
31
+ end
32
+ def test_create_new
33
+ fl = Rant::FileList.new
34
+ assert_equal [], fl.entries
35
+ in_local_temp_dir do
36
+ Rant::Sys.touch ["a.t", ".a.t"]
37
+ fl.include "*.t"
38
+ assert_entries(["a.t", ".a.t"], fl)
39
+ end
40
+ end
41
+ def test_create_new_with_ary
42
+ ary = ["foo", "bar"]
43
+ fl = Rant::FileList.new(ary)
44
+ assert_equal ["foo", "bar"], fl.entries
45
+ end
46
+ def test_create_bracket_op
47
+ in_local_temp_dir do
48
+ Rant::Sys.touch ["a.t", ".a.t"]
49
+ fl = Rant::FileList["*.t"]
50
+ assert_entries(["a.t"], fl)
51
+ end
52
+ end
53
+ def test_create_glob
54
+ in_local_temp_dir do
55
+ Rant::Sys.touch ["a.t", ".a.t"]
56
+ fl = Rant::FileList.glob("*.t")
57
+ assert_entries(["a.t"], fl)
58
+ fl = Rant::FileList.glob(".*.t")
59
+ # note: no "." and ".." entries
60
+ assert_entries([".a.t"], fl)
61
+ fl = Rant::FileList.glob("*.t") do |fl|
62
+ fl.glob ".*.t"
63
+ end
64
+ assert_equal ["a.t", ".a.t"], fl.entries
65
+ end
66
+ end
67
+ def test_create_glob_all
68
+ in_local_temp_dir do
69
+ Rant::Sys.touch ["a.t", ".a.t"]
70
+ fl = Rant::FileList.glob_all("*.t")
71
+ assert_entries(["a.t", ".a.t"], fl)
72
+ fl = Rant::FileList.glob_all(".*.t")
73
+ # note: no "." and ".." entries
74
+ assert_entries([".a.t"], fl)
75
+ fl = Rant::FileList.glob_all("*.t") do |fl|
76
+ fl.keep(".")
77
+ end
78
+ assert_entries ["a.t", ".a.t", "."], fl
79
+ end
80
+ end
81
+ def test_conversion_from_filelist
82
+ fl1 = Rant::FileList.new
83
+ fl2 = Rant::FileList(fl1)
84
+ assert fl1.equal?(fl2) # same object
85
+ end
86
+ def test_conversion_from_ary
87
+ fl = Rant::FileList(["foo", "bar"])
88
+ assert fl.kind_of?(Rant::FileList)
89
+ assert_equal ["foo", "bar"], fl.entries
90
+ end
91
+ def test_conversion_from_to_ary
92
+ obj = Object.new
93
+ def obj.to_ary
94
+ ["foo", "bar"]
95
+ end
96
+ fl = Rant::FileList(obj)
97
+ assert fl.kind_of?(Rant::FileList)
98
+ assert_equal ["foo", "bar"], fl.entries
99
+ end
100
+ def test_conversion_from_to_rant_filelist
101
+ obj = Object.new
102
+ def obj.to_rant_filelist
103
+ Rant::FileList.new ["foo", "bar"]
104
+ end
105
+ fl = Rant::FileList(obj)
106
+ assert fl.kind_of?(Rant::FileList)
107
+ assert_equal ["foo", "bar"], fl.entries
108
+ end
109
+ # note: this behaviour might change
110
+ def test_conversion_type_error_string
111
+ assert_raise_kind_of(TypeError) do
112
+ fl = Rant::FileList("some_string")
113
+ end
114
+ end
115
+ def test_conversion_type_error
116
+ assert_raise_kind_of(TypeError) do
117
+ fl = Rant::FileList(Object.new)
118
+ end
119
+ end
120
+ def test_each
121
+ in_local_temp_dir do
122
+ Rant::Sys.touch ["a.t", "b.t", "c.t"]
123
+ ary = []
124
+ fl = Rant::FileList["*.t"]
125
+ assert(fl.each { |fn|
126
+ ary << fn
127
+ }.equal?(fl))
128
+ assert_entries ["a.t", "b.t", "c.t"], ary
129
+ end
130
+ end
131
+ def test_enumerable_find
132
+ fl = Rant::FileList.new ["bb", "aa", "c", "d", "a"]
133
+ assert_equal "aa", fl.find { |fn| fn =~ /a/ }
134
+ end
135
+ def test_glob
136
+ in_local_temp_dir do
137
+ all = ["a.t", "b.t", "c.t", ".a.t"]
138
+ Rant::Sys.touch all
139
+ fl = Rant::FileList.new
140
+ assert fl.include("*.t").equal?(fl)
141
+ assert_entries all, fl
142
+ fl = Rant::FileList.new
143
+ assert fl.glob("*.t").equal?(fl)
144
+ assert_entries all, fl
145
+ fl = Rant::FileList.new
146
+ fl.hide_dotfiles
147
+ fl.glob "*.t"
148
+ assert_entries all - [".a.t"], fl
149
+ fl = Rant::FileList.new
150
+ fl.glob "*a*", "*c*"
151
+ assert_entries ["a.t", "c.t", ".a.t"], fl
152
+ assert fl.entries.index("a.t") < fl.entries.index("c.t")
153
+ end
154
+ end
155
+ def test_exclude
156
+ fl = Rant::FileList(["a.rb", "b.t", "foo_bar"])
157
+ assert fl.exclude("*.rb").equal?(fl)
158
+ assert_entries ["b.t", "foo_bar"], fl
159
+
160
+ fl.concat ["b.rb", "a.rb"]
161
+ assert_entries ["b.t", "foo_bar", "b.rb", "a.rb"], fl
162
+ end
163
+ def test_exclude_regexp
164
+ fl = Rant::FileList(["a.rb", "b.t", "foo_bar"])
165
+ fl.exclude %r{_}
166
+ assert_entries ["a.rb", "b.t"], fl
167
+
168
+ Rant::Sys.touch "a_b.t"
169
+ fl.include "*.t"
170
+ assert_entries ["a.rb", "b.t", "a_b.t"], fl
171
+ ensure
172
+ Rant::Sys.rm_f "a_b.t"
173
+ end
174
+ def test_exclude_more_args
175
+ fl = Rant::FileList(["a.rb", "b.t", "foo_bar"])
176
+ fl.exclude "*.t", /_/
177
+ assert_entries ["a.rb"], fl
178
+ end
179
+ def test_exclude_dotfiles_always
180
+ in_local_temp_dir do
181
+ Rant::Sys.touch [".a.t", "b.t", "c.t", "a.rb"]
182
+ fl = Rant::FileList[".*.{rb,t}", "*.{rb,t}"]
183
+ assert_entries [".a.t", "b.t", "c.t", "a.rb"], fl
184
+ fl.exclude "*.t"
185
+ assert_entries ["a.rb"], fl
186
+ end
187
+ end
188
+ def test_shun
189
+ fl = Rant::FileList(["a/CVS/b", "CVS", "CVS.rb", "cvs"])
190
+ assert fl.shun("CVS").equal?(fl)
191
+ assert_entries ["CVS.rb", "cvs"], fl
192
+ fl.push "CVS/foo"
193
+ assert_entries ["CVS/foo", "CVS.rb", "cvs"], fl
194
+ end
195
+ def test_exclude_name
196
+ fl = Rant::FileList(["a/CVS/b", "CVS", "CVS.rb", "cvs"])
197
+ assert fl.exclude_name("CVS").equal?(fl)
198
+ assert_entries ["CVS.rb", "cvs"], fl
199
+ fl.push "CVS/foo"
200
+ assert_entries ["CVS/foo", "CVS.rb", "cvs"], fl
201
+ end
202
+ def test_exclude_path
203
+ fl = Rant::FileList(["a.rb", "lib/b.rb", "lib/foo/c.rb"])
204
+ assert fl.exclude_path("lib/*.rb").equal?(fl)
205
+ assert_equal ["a.rb", "lib/foo/c.rb"], fl.entries
206
+ end
207
+ def test_exclude_vs_exclude_path
208
+ fl = Rant::FileList(["a.rb", "lib/b.rb", "lib/foo/c.rb"])
209
+ assert fl.exclude("lib/*.rb").equal?(fl)
210
+ assert_equal ["a.rb"], fl.entries
211
+ end
212
+ def test_ignore
213
+ fl = Rant::FileList(["a/CVS/b", "CVS", "CVS.rb", "cvs"])
214
+ assert fl.ignore("CVS").equal?(fl)
215
+ assert_entries ["CVS.rb", "cvs"], fl
216
+ fl.push "CVS/foo"
217
+ assert_entries ["CVS.rb", "cvs"], fl
218
+ end
219
+ def test_no_dir
220
+ in_local_temp_dir do
221
+ Rant::Sys.mkdir_p ["foo/bar", "baz"]
222
+ Rant::Sys.touch ["foo/bar/xy", "xy"]
223
+ fl = Rant::FileList["**/*"]
224
+ assert_entries ["foo", "foo/bar", "baz", "foo/bar/xy", "xy"], fl
225
+ assert fl.no_dir.equal?(fl)
226
+ assert_entries ["foo/bar/xy", "xy"], fl
227
+ end
228
+ end
229
+ def test_select
230
+ fl1 = Rant::FileList(["a", "b", "c.rb", "d.rb"])
231
+ fl2 = fl1.select { |fn| fn =~ /\.rb$/ }
232
+ assert fl2.kind_of?(Rant::FileList)
233
+ assert_entries ["c.rb", "d.rb"], fl2
234
+ assert_entries ["a", "b", "c.rb", "d.rb"], fl1
235
+ fl2.push "e.rb"
236
+ assert_entries ["c.rb", "d.rb", "e.rb"], fl2
237
+ assert_entries ["a", "b", "c.rb", "d.rb"], fl1
238
+ fl1.push "c"
239
+ assert_entries ["a", "b", "c", "c.rb", "d.rb"], fl1
240
+ assert_entries ["c.rb", "d.rb", "e.rb"], fl2
241
+ end
242
+ def test_map
243
+ fl1 = Rant::FileList(["a.rb", "b.rb"])
244
+ fl2 = fl1.map { |fn| "#{fn}~" }
245
+ assert_entries ["a.rb~", "b.rb~"], fl2
246
+ assert_entries ["a.rb", "b.rb"], fl1
247
+ fl1.push "foo"
248
+ assert_entries ["a.rb", "b.rb", "foo"], fl1
249
+ assert_entries ["a.rb~", "b.rb~"], fl2
250
+ end
251
+ def test_ext
252
+ fl1 = Rant::FileList(["a.c", "b.c"])
253
+ fl2 = fl1.ext("o")
254
+ assert fl2.kind_of?(Rant::FileList)
255
+ assert !fl1.equal?(fl2)
256
+ assert_entries ["a.c", "b.c"], fl1
257
+ assert_entries ["a.o", "b.o"], fl2
258
+
259
+ assert_entries ["a.txt"], Rant::FileList(["a"]).ext("txt")
260
+ end
261
+ def test_uniq!
262
+ fl = Rant::FileList(["a", "b", "a"])
263
+ assert fl.uniq!.equal?(fl)
264
+ assert_entries ["a", "b"], fl
265
+ assert fl.uniq!.equal?(fl)
266
+ assert_entries ["a", "b"], fl
267
+ end
268
+ def test_sort!
269
+ fl = Rant::FileList(["a", "c", "b"])
270
+ assert fl.sort!.equal?(fl)
271
+ assert_equal ["a", "b", "c"], fl.entries
272
+ assert fl.sort!.equal?(fl)
273
+ assert_equal ["a", "b", "c"], fl.entries
274
+ end
275
+ def test_map!
276
+ fl = Rant::FileList(["a", "b", "c"])
277
+ assert(fl.map! { |fn| "#{fn}.rb" }.equal?(fl))
278
+ assert_equal ["a.rb", "b.rb", "c.rb"], fl.entries
279
+ end
280
+ def test_reject!
281
+ fl = Rant::FileList(["a.rb", "b", "c", "d.rb"])
282
+ assert(fl.reject! { |fn| fn =~ /\.rb$/ }.equal?(fl))
283
+ assert_equal ["b", "c"], fl.entries
284
+ end
285
+ def resolve
286
+ fl = Rant::FileList(["a", "b"])
287
+ fl2 = nil
288
+ out = capture_stdout do
289
+ fl2 = fl.map { |fn| puts fn; "#{fn}.rb" }
290
+ assert fl2.resolve.equal?(fl2)
291
+ end
292
+ assert_equal "a\nb\n", out
293
+ end
294
+ def test_to_a
295
+ ary = Rant::FileList(["a", "b"]).to_a
296
+ assert ary.kind_of?(Array)
297
+ assert_equal ["a", "b"], ary
298
+ end
299
+ def test_to_ary
300
+ ary = Rant::FileList(["a", "b"]).to_ary
301
+ assert ary.kind_of?(Array)
302
+ assert_equal ["a", "b"], ary
303
+ end
304
+
305
+ # TODO: comprehensive testing of FileList#+ operator
306
+
307
+ def test_size
308
+ assert_equal 2, Rant::FileList(["a", "b"]).size
309
+ end
310
+ def test_empty?
311
+ fl = Rant::FileList(["a", "b"])
312
+ assert !fl.empty?
313
+ fl.exclude "a", "b"
314
+ assert fl.empty?
315
+ end
316
+ def test_join
317
+ fl = Rant::FileList(["a", "b"])
318
+ assert_equal "a b", fl.join
319
+ assert_equal "a\nb", fl.join("\n")
320
+ end
321
+ def test_pop
322
+ fl = Rant::FileList(["a", "b"])
323
+ assert_equal "b", fl.pop
324
+ assert_equal "a", fl.pop
325
+ assert_equal nil, fl.pop
326
+ assert_equal nil, fl.pop
327
+ end
328
+ def test_push
329
+ fl = Rant::FileList(["a", "b"])
330
+ assert fl.push("c").equal?(fl)
331
+ assert_equal ["a", "b", "c"], fl.entries
332
+ end
333
+ def test_shift
334
+ fl = Rant::FileList(["a", "b"])
335
+ assert_equal "a", fl.shift
336
+ assert_equal "b", fl.shift
337
+ assert_equal nil, fl.shift
338
+ assert_equal nil, fl.shift
339
+ end
340
+ def test_unshift
341
+ fl = Rant::FileList(["a", "b"])
342
+ assert fl.unshift("c").equal?(fl)
343
+ assert_equal ["c", "a", "b"], fl.entries
344
+ end
345
+ def test_keep
346
+ fl = Rant::FileList(["b.t"])
347
+ assert fl.keep("a.t").equal?(fl)
348
+ assert_entries ["b.t", "a.t"], fl
349
+ fl.exclude "*.t"
350
+ assert_entries ["a.t"], fl
351
+ fl.ignore "a.t"
352
+ assert_entries ["a.t"], fl
353
+ end
354
+ def test_to_rant_filelist
355
+ fl = Rant::FileList.new
356
+ assert fl.to_rant_filelist.equal?(fl)
357
+ end
358
+ def test_dup
359
+ fl1 = Rant::FileList(["a", "b"])
360
+ fl2 = fl1.dup
361
+ assert !fl1.equal?(fl2)
362
+ fl1.push "c"
363
+ assert_entries ["a", "b", "c"], fl1
364
+ assert_entries ["a", "b"], fl2
365
+ end
366
+ def test_copy
367
+ fl1 = Rant::FileList(["a", "b"])
368
+ fl2 = fl1.copy
369
+ fl1.each { |fn| fn << ".rb" }
370
+ assert_entries ["a.rb", "b.rb"], fl1
371
+ assert_entries ["a", "b"], fl2
372
+ end
373
+ def test_hide_dotfiles
374
+ fl = Rant::FileList.new
375
+ in_local_temp_dir do
376
+ Rant::Sys.touch ["a.t", ".a.t"]
377
+ assert fl.hide_dotfiles.equal?(fl)
378
+ fl.glob "*.t"
379
+ assert_entries ["a.t"], fl
380
+ end
381
+ end
382
+ def test_glob_dotfiles
383
+ fl = Rant::FileList.new
384
+ fl.glob_dotfiles = false
385
+ in_local_temp_dir do
386
+ Rant::Sys.touch ["a.t", ".a.t"]
387
+ assert fl.glob_dotfiles.equal?(fl)
388
+ fl.glob "*.t"
389
+ assert_entries [".a.t", "a.t"], fl
390
+ end
391
+ end
392
+ def test_concat
393
+ fl = Rant::FileList(["a"])
394
+ assert fl.concat(["b", "c"]).equal?(fl)
395
+ assert_equal ["a", "b", "c"], fl.entries
396
+ end
397
+ def test_concat_after_include_with_ignore
398
+ in_local_temp_dir do
399
+ Rant::Sys.touch ["a.1", "a.2", "b.1", "b.2"]
400
+ fl = Rant::FileList.new
401
+ fl.ignore %r{^a.*1$}
402
+ fl.include "*.[12]"
403
+ fl.concat ["abc1", "abc3"]
404
+ assert_entries ["a.2", "b.1", "b.2", "abc3"], fl
405
+ assert_equal 3, fl.entries.index("abc3")
406
+ end
407
+ end
408
+ def test_concat_with_ignore
409
+ fl = Rant::FileList.new.ignore("foo")
410
+ fl.concat ["foo", "bar", "bar/foo", "baz"]
411
+ assert_entries ["bar", "baz"], fl
412
+ end
413
+ def test_inspect
414
+ assert_nothing_raised do
415
+ assert Rant::FileList.new.inspect.kind_of?(String)
416
+ end
417
+ end
418
+ def test_object_inspect
419
+ assert_nothing_raised do
420
+ assert Rant::FileList.new.object_inspect.kind_of?(String)
421
+ end
422
+ end
423
+ def test_to_s
424
+ out = ext_rb_test <<-'EOF', :touch => ["a.c", "b.c"], :return => :stdout
425
+ require 'rant/filelist'
426
+ print "#{Rant::FileList['*.c']}"
427
+ EOF
428
+ assert_equal "a.c b.c", out
429
+ end
430
+ def test_no_dir_with_arg
431
+ files = ["a/bc/d.t", "xy/f.t", "a.t"]
432
+ out = ext_rb_test <<-'EOF', :touch => files, :return => :stdout
433
+ require 'rant/filelist'
434
+ puts Rant::FileList["**/*.t"].no_dir("bc")
435
+ EOF
436
+ lines = out.split(/\n/)
437
+ assert_equal ["a.t", "xy/f.t"], lines.sort
438
+ end
439
+ def test_files
440
+ files = ["a/bc/d.t", "xy/f.t", "a.t"]
441
+ out = ext_rb_test <<-'EOF', :touch => files, :return => :stdout
442
+ require 'rant/filelist'
443
+ puts Rant::FileList["**/*"].exclude("*.rb").files
444
+ EOF
445
+ lines = out.split(/\n/)
446
+ assert_entries ["a/bc/d.t", "a.t", "xy/f.t"], lines
447
+ end
448
+ def test_dirs
449
+ files = ["a/bc/d.t", "xy/f.t", "a.t"]
450
+ out = ext_rb_test <<-'EOF', :touch => files, :return => :stdout
451
+ require 'rant/filelist'
452
+ puts Rant::FileList["**/*"].exclude("*.rb").dirs
453
+ EOF
454
+ lines = out.split(/\n/)
455
+ assert_entries ["a", "a/bc", "xy"], lines
456
+ end
457
+ def test_rant_version
458
+ ext_rb_test <<-'EOF'
459
+ require 'rant/filelist'
460
+ if defined?(Rant::VERSION) && Rant::VERSION =~ /\d+\.\d+\.\d+/
461
+ exit 0
462
+ end
463
+ exit 1
464
+ EOF
465
+ end
466
+ def test_rant_sys_regular_filename
467
+ out = nil
468
+ if Rant::Env.on_windows?
469
+ out = ext_rb_test <<-'EOF', :return => :stdout
470
+ require 'rant/filelist'
471
+ print Rant::Sys.regular_filename('foo\bar/baz')
472
+ EOF
473
+ else
474
+ out = ext_rb_test <<-'EOF', :return => :stdout
475
+ require 'rant/filelist'
476
+ print Rant::Sys.regular_filename('foo//bar/baz')
477
+ EOF
478
+ end
479
+ assert_equal "foo/bar/baz", out
480
+ end
481
+ end