rant 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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