bee 0.3.1 → 0.4.0

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,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Copyright 2006 Michel Casabianca <casa@sweetohm.net>
3
+ # Copyright 2006-2007 Michel Casabianca <michel.casabianca@gmail.com>
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -16,18 +16,22 @@
16
16
 
17
17
  require 'test/unit'
18
18
  $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
+ require 'bee'
19
20
  require 'bee_console'
20
21
 
22
+ # Test case for console formatter.
21
23
  class TestBeeConsoleFormatter < Test::Unit::TestCase
22
24
 
25
+ # Test default target title formatting.
23
26
  def test_format_target_default
24
27
  expected = "#{'-'*72} TEST --"
25
- formatter = Bee::Console::Formatter.new(nil)
28
+ formatter = Bee::Console::Formatter.new('ll:80')
26
29
  target = Bee::Target.new({ 'target' => 'TEST' }, nil)
27
30
  actual = formatter.format_target(target)
28
31
  assert_equal(expected, actual)
29
32
  end
30
-
33
+
34
+ # Test target title formatting with colorization.
31
35
  def test_format_target
32
36
  expected = "\e[1;31;42m#{'#'*64} TEST ##\e[0m"
33
37
  style = {
@@ -43,4 +47,35 @@ class TestBeeConsoleFormatter < Test::Unit::TestCase
43
47
  assert_equal(expected, actual)
44
48
  end
45
49
 
50
+ def test_format_task
51
+ expected = '- foo: bar'
52
+ task = {'foo' => 'bar'}
53
+ formatter = Bee::Console::Formatter.new('')
54
+ actual = formatter.format_task(task)
55
+ assert_equal(expected, actual)
56
+ expected = '- rb: bar'
57
+ task = {'rb' => 'bar'}
58
+ actual = formatter.format_task(task)
59
+ assert_equal(expected, actual)
60
+ end
61
+
62
+ def test_help_build
63
+ expected = "- Build: \"test\"
64
+ Description: Test description
65
+ - Properties:
66
+ - base: \"#{Dir.pwd}\"
67
+ - foo: \"bar\"
68
+ - test: \"test\"
69
+ - Targets:
70
+ - test: Test description
71
+ - Default: test"
72
+ object = [{'build' => 'test', 'description' => 'Test description'},
73
+ {'properties' => [{'test' => 'test'}, {'foo' => 'bar'}]},
74
+ {'target' => 'test', 'description' => 'Test description'}]
75
+ build = Bee::Build.new(object, nil)
76
+ formatter = Bee::Console::Formatter.new(nil)
77
+ actual = formatter.help_build(build)
78
+ assert_equal(expected, actual)
79
+ end
80
+
46
81
  end
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006-2007 Michel Casabianca <michel.casabianca@gmail.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
+ require 'bee'
20
+
21
+ # Test context.
22
+ class TestBeeContext < Test::Unit::TestCase
23
+
24
+ # Initialize a context.
25
+ def setup
26
+ @context = Bee::Context.new
27
+ end
28
+
29
+ # Test object evaluation.
30
+ def test_evaluate_object
31
+ # nil: must evaluate to nil
32
+ expected = nil
33
+ actual = @context.evaluate_object(expected)
34
+ assert_equal(expected, actual)
35
+ # string: return value with property references replaced
36
+ expected = "This is a test!"
37
+ actual = @context.evaluate_object(expected)
38
+ assert_equal(expected, actual)
39
+ @context.set_property(:foo, 'bar')
40
+ expected = 'This is bar!'
41
+ actual = @context.evaluate_object('This is #{foo}!')
42
+ assert_equal(expected, actual)
43
+ # symbol: replace with property value
44
+ expected = 'bar'
45
+ actual = @context.evaluate_object(:foo)
46
+ assert_equal(expected, actual)
47
+ # array: return array with elements evaluated
48
+ expected = [1, 2, 3]
49
+ actual = @context.evaluate_object([1, 2, 3])
50
+ assert_equal(expected, actual)
51
+ expected = ['a', 'b', 'bar']
52
+ actual = @context.evaluate_object(['a', 'b', :foo])
53
+ assert_equal(expected, actual)
54
+ # hash: return hash with keys and values evaluated
55
+ expected = { 1 => 'bar', 'bar' => 2 }
56
+ actual = @context.evaluate_object({ 1 => :foo, '#{foo}' => 2 })
57
+ assert_equal(expected, actual)
58
+ # complex: symbol referencing an array
59
+ expected = [1, 2, 3]
60
+ @context.set_property('int', 3)
61
+ @context.set_property('array', [1, 2, :int])
62
+ actual = @context.evaluate_object(:array)
63
+ assert_equal(expected, actual)
64
+ end
65
+
66
+ # Test property access
67
+ def test_set
68
+ # nominal case
69
+ @context.set_property(:foo, 'bar')
70
+ assert_equal(@context.get_property(:foo), 'bar')
71
+ # error case
72
+ begin
73
+ @context.set_property('123', 'foo')
74
+ flunk "Property setting should have failed"
75
+ rescue
76
+ end
77
+ begin
78
+ @context.get_property('^^^^^123')
79
+ flunk "Property getting should have failed"
80
+ rescue
81
+ end
82
+ end
83
+
84
+ end
@@ -0,0 +1,467 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006-2007 Michel Casabianca <michel.casabianca@gmail.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ $:.unshift(File.join(File.dirname(__FILE__)))
18
+ require 'tmp_test_case'
19
+ require 'test_build'
20
+ require 'test_build_listener'
21
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
+ require 'bee'
23
+ require 'bee_task_default'
24
+ require 'fileutils'
25
+
26
+ # Test default bee tasks.
27
+ class TestBeeDefaultTasks < TmpTestCase
28
+
29
+ # Run before any test: create a context object and load tasks in it.
30
+ def setup
31
+ super
32
+ @context = Bee::Context.new
33
+ @listener = TestBuildListener.new
34
+ @build = TestBuild.new(@context, @listener)
35
+ @package = Bee::Task::Default.new(@build)
36
+ end
37
+
38
+ # Test task print.
39
+ def test_task_print
40
+ @package.print('TEST')
41
+ assert_equal("TEST\n", @listener.output)
42
+ @listener.output = ''
43
+ @package.print(['foo', 'bar'])
44
+ assert_equal("[\"foo\", \"bar\"]\n", @listener.output)
45
+ end
46
+
47
+ # Test task cat.
48
+ def test_task_cat
49
+ path = File.join(@tmp_dir, 'test.txt')
50
+ File.open(path, 'w') {|file| file.write('TEST')}
51
+ @package.cat(path)
52
+ assert_equal("TEST\n", @listener.output)
53
+ @listener.output = ''
54
+ begin
55
+ @package.cat('foo')
56
+ flunk "Cat should have failed"
57
+ rescue
58
+ assert_equal("File 'foo' not found", $!.message)
59
+ end
60
+ end
61
+
62
+ # Test task cd.
63
+ def test_task_cd
64
+ working_dir = File.expand_path(File.dirname(__FILE__))
65
+ # test nominal case
66
+ @package.cd(@tmp_dir)
67
+ expected = @tmp_dir
68
+ actual = Dir.getwd
69
+ assert_equal(expected, actual)
70
+ # test changing to a directory that doesn't exists
71
+ begin
72
+ dir = File.join(@tmp_dir, 'lkjqzcjv')
73
+ @package.cd(dir)
74
+ flunk "Should have raised an Errno::ENOENT"
75
+ rescue Errno::ENOENT
76
+ end
77
+ # test bad arguments
78
+ begin
79
+ @package.cd(Object.new)
80
+ flunk "Should have raised a BuildError"
81
+ rescue Bee::Util::BuildError
82
+ expected = 'cd parameter is a String'
83
+ actual = $!.message
84
+ assert_equal(expected, actual)
85
+ end
86
+ end
87
+
88
+ # Test task mkdir.
89
+ def test_task_mkdir
90
+ # nominal case with a single recursive dir
91
+ dir = File.join(@tmp_dir, 'foo', 'bar')
92
+ @package.mkdir(dir)
93
+ expected = true
94
+ actual = File.exists?(dir) and File.directory?(dir)
95
+ assert_equal(expected, actual)
96
+ # nominal case with a list of directories
97
+ dirs = [File.join(@tmp_dir, 'toto'), File.join(@tmp_dir, 'titi')]
98
+ @package.mkdir(dirs)
99
+ found = Dir.entries(@tmp_dir)
100
+ assert(found.member?('toto'))
101
+ assert(found.member?('titi'))
102
+ # error case
103
+ dir = Object.new
104
+ begin
105
+ @package.mkdir(dir)
106
+ flunk "Should have raised a BuildError"
107
+ rescue Bee::Util::BuildError => e
108
+ expected = 'mkdir parameter must a String or an array of Strings'
109
+ actual = $!.message
110
+ assert_equal(expected, actual)
111
+ end
112
+ # another error case
113
+ dirs = [File.join(@tmp_dir, 'foo'), Object.new]
114
+ begin
115
+ @package.mkdir(dirs)
116
+ flunk "Should have raised a BuildError"
117
+ rescue Bee::Util::BuildError => e
118
+ expected = 'mkdir parameter must a String or an array of Strings'
119
+ actual = $!.message
120
+ assert_equal(expected, actual)
121
+ end
122
+ end
123
+
124
+ # Test task cp.
125
+ def test_task_cp
126
+ # nominal case for a src and dest file
127
+ includes = File.join(@tmp_dir, 'file.txt')
128
+ create_file(includes)
129
+ dest = File.join(@tmp_dir, 'dest.txt')
130
+ @package.cp({ 'includes' => includes, 'dest' => dest })
131
+ assert_file(dest, includes)
132
+ # nominal case for src files and destination directory
133
+ clean_tmp
134
+ includes2 = File.join(@tmp_dir, 'file2.txt')
135
+ dest = File.join(@tmp_dir, 'dir')
136
+ create_file(includes)
137
+ create_file(includes2)
138
+ FileUtils.makedirs(dest)
139
+ @package.cp({ 'includes' => [includes, includes2], 'dest' => dest })
140
+ assert_file(File.join(dest, 'file.txt'), includes)
141
+ assert_file(File.join(dest, 'file2.txt'), includes2)
142
+ # nominal case for src and dest directory
143
+ clean_tmp
144
+ includes = File.join(@tmp_dir, 'dir')
145
+ dest = File.join(@tmp_dir, 'todir')
146
+ FileUtils.makedirs(includes)
147
+ FileUtils.makedirs(dest)
148
+ file1 = File.join(includes, 'file1.txt')
149
+ file2 = File.join(includes, 'file2.txt')
150
+ create_file(file1)
151
+ create_file(file2)
152
+ @package.cp({ 'includes' => includes, 'dest' => dest })
153
+ assert_file(File.join(dest, 'dir', 'file1.txt'), file1)
154
+ assert_file(File.join(dest, 'dir', 'file2.txt'), file2)
155
+ # error case: dest must be a string
156
+ clean_tmp
157
+ includes = File.join(@tmp_dir, 'dir')
158
+ dest = ['foo', 'bar']
159
+ begin
160
+ @package.cp({ 'includes' => includes, 'dest' => dest })
161
+ flunk "Should have failed because dest must be a string"
162
+ rescue
163
+ end
164
+ end
165
+
166
+ # Test task mv.
167
+ def test_task_mv
168
+ # nominal case for a src and dest file
169
+ includes = File.join(@tmp_dir, 'src.txt')
170
+ create_file(includes)
171
+ dest = File.join(@tmp_dir, 'dest.txt')
172
+ @package.mv({ 'includes' => includes, 'dest' => dest })
173
+ assert_file(dest, includes)
174
+ assert(!File.exists?(File.join(@tmp_dir, includes)))
175
+ # nominal case with two source files
176
+ clean_tmp
177
+ includes = File.join(@tmp_dir, 'src.txt')
178
+ includes2 = File.join(@tmp_dir, 'src2.txt')
179
+ dest = File.join(@tmp_dir, 'dir')
180
+ create_file(includes)
181
+ create_file(includes2)
182
+ FileUtils.makedirs(dest)
183
+ @package.mv({ 'includes' => File.join(@tmp_dir, '*.txt'), 'dest' => dest })
184
+ assert_file(File.join(dest, 'src.txt'), includes)
185
+ assert_file(File.join(dest, 'src2.txt'), includes2)
186
+ assert(!File.exists?(includes))
187
+ assert(!File.exists?(includes2))
188
+ # nominal case with directory for src and dest
189
+ clean_tmp
190
+ includes = File.join(@tmp_dir, 'dir1')
191
+ dest = File.join(@tmp_dir, 'dir2')
192
+ FileUtils.makedirs(includes)
193
+ create_file(File.join(includes, 'test.txt'))
194
+ @package.mv({ 'includes' => includes, 'dest' => dest })
195
+ assert(File.exists?(dest))
196
+ assert(File.directory?(dest))
197
+ assert_file(File.join(dest, 'test.txt'), File.join(includes, 'test.txt'))
198
+ assert(!File.exists?(includes))
199
+ # error case: dest must be a string
200
+ clean_tmp
201
+ includes = File.join(@tmp_dir, 'src.txt')
202
+ dest = ['foo', 'bar']
203
+ begin
204
+ @package.mv({ 'includes' => includes, 'dest' => dest })
205
+ flunk "Should have failed because dest must be a string"
206
+ rescue
207
+ end
208
+ end
209
+
210
+ # Test task rm.
211
+ def test_task_rm
212
+ # nominal case with a glob
213
+ file = File.join(@tmp_dir, 'test.txt')
214
+ create_file(file)
215
+ @package.rm(File.join(@tmp_dir, file))
216
+ assert(!File.exists?(File.join(@tmp_dir, file)))
217
+ # nominal case with two globs and three files
218
+ clean_tmp
219
+ file1 = File.join(@tmp_dir, 'test1.txt')
220
+ file2 = File.join(@tmp_dir, 'test2.txt')
221
+ file3 = File.join(@tmp_dir, 'test3.log')
222
+ create_file(file1)
223
+ create_file(file2)
224
+ create_file(file3)
225
+ @package.rm([File.join(@tmp_dir, '**/*.txt'),
226
+ File.join(@tmp_dir, '**/*.log')])
227
+ assert(!File.exists?(file1))
228
+ assert(!File.exists?(file2))
229
+ assert(!File.exists?(file3))
230
+ # error case: parameter must be a string or array of strings
231
+ clean_tmp
232
+ begin
233
+ @package.rm({ 'foo' => 'bar' })
234
+ flunk "Shound have failed because parameter must be a string or array"
235
+ rescue
236
+ end
237
+ begin
238
+ @package.rm(['foo', { 'foo' => 'bar' }])
239
+ flunk "Shound have failed because parameter must be a string or array"
240
+ rescue
241
+ end
242
+ end
243
+
244
+ # Test task rmdir.
245
+ def test_task_rmdir
246
+ # nominal case with one dir
247
+ dir = File.join(@tmp_dir, 'dir')
248
+ FileUtils.makedirs(dir)
249
+ @package.rmdir(dir)
250
+ assert(!File.exists?(dir))
251
+ # nominal case with two dirs
252
+ clean_tmp
253
+ dir1 = File.join(@tmp_dir, 'dir1')
254
+ dir2 = File.join(@tmp_dir, 'dir2')
255
+ FileUtils.makedirs(dir1)
256
+ FileUtils.makedirs(dir2)
257
+ @package.rmdir([dir1, dir2])
258
+ assert(!File.exists?(dir1))
259
+ assert(!File.exists?(dir2))
260
+ # error case: parameter must be a string or array of strings
261
+ clean_tmp
262
+ begin
263
+ @package.rmdir({ 'foo' => 'bar' })
264
+ flunk "Shound have failed because parameter must be a string or array"
265
+ rescue
266
+ end
267
+ begin
268
+ @package.rmdir(['foo', { 'foo' => 'bar' }])
269
+ flunk "Shound have failed because parameter must be a string or array"
270
+ rescue
271
+ end
272
+ end
273
+
274
+ # Test task find.
275
+ def test_task_find
276
+ file1 = File.join(@tmp_dir, 'file1.txt')
277
+ file2 = File.join(@tmp_dir, 'file2.txt')
278
+ dir = File.join(@tmp_dir, 'dir')
279
+ file3 = File.join(dir, 'file3.txt')
280
+ create_file(file1)
281
+ create_file(file2)
282
+ FileUtils.makedirs(dir)
283
+ create_file(file3)
284
+ @package.find({ 'includes' => "#{File.join(@tmp_dir, '**/*.txt')}",
285
+ 'property' => 'list'})
286
+ list = @context.get_property('list').sort
287
+ expected = [file1, file2, file3].sort
288
+ assert_equal(expected, list)
289
+ end
290
+
291
+ # Test task test.
292
+ def test_task_test
293
+ # TODO: write a test when test task fixed.
294
+ end
295
+
296
+ # Test task erb.
297
+ def test_task_erb
298
+ # nominal case in property
299
+ @context.set_property('test', 'TEST')
300
+ source = 'This is a <%= test %>'
301
+ @package.erb({ 'source' => source, 'property' => 'result' })
302
+ actual = @context.get_property(:result)
303
+ expected = 'This is a TEST'
304
+ assert_equal(expected, actual)
305
+ # nominal case in property
306
+ file = File.join(@tmp_dir, 'file.txt')
307
+ @package.erb({ 'source' => source, 'dest' => file })
308
+ actual = File.read(file)
309
+ expected = 'This is a TEST'
310
+ assert_equal(expected, actual)
311
+ # error case: source parameter must be a string
312
+ begin
313
+ @package.erb({ 'source' => [source], 'property' => 'result' })
314
+ flunk "should have failed because source parameter must be a string"
315
+ rescue
316
+ end
317
+ # error case: src parameter must be a string
318
+ begin
319
+ @package.erb({ 'src' => [source], 'property' => 'result' })
320
+ flunk "should have failed because src parameter must be a string"
321
+ rescue
322
+ end
323
+ # error case: dest parameter must be a string
324
+ begin
325
+ @package.erb({ 'src' => 'src', 'dest' => ['dest'] })
326
+ flunk "should have failed"
327
+ rescue
328
+ end
329
+ # error case: property parameter must be a string
330
+ begin
331
+ @package.erb({ 'src' => 'src', 'property' => ['result'] })
332
+ flunk "should have failed"
333
+ rescue
334
+ end
335
+ # error case: at least src or source parameter
336
+ begin
337
+ @package.erb({ 'dest' => 'dest' })
338
+ flunk "should have failed"
339
+ rescue
340
+ end
341
+ # error case: at least dest or property parameter
342
+ begin
343
+ @package.erb({ 'src' => 'src' })
344
+ flunk "should have failed"
345
+ rescue
346
+ end
347
+ # error case: error in erb source
348
+ source = 'This is a test <%= foo %>'
349
+ begin
350
+ @package.erb({ 'source' => source, 'property' => 'result' })
351
+ flunk "should have failed"
352
+ rescue
353
+ end
354
+ end
355
+
356
+ # Test task erb.
357
+ def test_task_rdoc
358
+ includes = __FILE__
359
+ dest = File.join(@tmp_dir, 'rdoc')
360
+ options = '-q'
361
+ @package.rdoc({'includes' => includes,
362
+ 'dest' => dest,
363
+ 'options' => options})
364
+ assert(File.exists?(File.join(dest, 'index.html')))
365
+ # error case: dest must be a string
366
+ begin
367
+ @package.rdoc({'includes' => includes, 'dest' => [dest]})
368
+ flunk "Should have failed"
369
+ rescue
370
+ end
371
+ end
372
+
373
+ # Test task zip.
374
+ def test_task_zip
375
+ file1 = File.join(@tmp_dir, 'file1.txt')
376
+ file2 = File.join(@tmp_dir, 'file2.txt')
377
+ File.open(file1, 'w') {|file| file.write('File 1')}
378
+ File.open(file2, 'w') {|file| file.write('File 2')}
379
+ includes = "#{@tmp_dir}/*.txt"
380
+ dest = File.join(@tmp_dir, 'test.zip')
381
+ @package.zip({'includes' => includes, 'dest' => dest, 'prefix' => 'test'})
382
+ # error case: dest must be a string
383
+ begin
384
+ @package.zip({'includes' => includes, 'dest' => [dest]})
385
+ flunk "Shoud have failed"
386
+ rescue
387
+ end
388
+ # error case: prefix must be a string
389
+ begin
390
+ @package.zip({'includes' => includes,
391
+ 'dest' => dest,
392
+ 'prefix' => ['test']})
393
+ flunk "Shoud have failed"
394
+ rescue
395
+ end
396
+ end
397
+
398
+ # Test task tar.
399
+ def test_task_tar
400
+ file1 = File.join(@tmp_dir, 'file1.txt')
401
+ file2 = File.join(@tmp_dir, 'file2.txt')
402
+ File.open(file1, 'w') {|file| file.write('File 1')}
403
+ File.open(file2, 'w') {|file| file.write('File 2')}
404
+ includes = "#{@tmp_dir}/*.txt"
405
+ dest = File.join(@tmp_dir, 'test.zip')
406
+ @package.tar({'includes' => includes, 'dest' => dest})
407
+ # error case: dest must be a string
408
+ begin
409
+ @package.tar({'includes' => includes, 'dest' => [dest]})
410
+ flunk "Shoud have failed"
411
+ rescue
412
+ end
413
+ end
414
+
415
+ # Test task gzip.
416
+ def test_task_gzip
417
+ src = File.join(@tmp_dir, 'file.txt')
418
+ File.open(src, 'w') {|file| file.write('File')}
419
+ dest = File.join(@tmp_dir, 'file.gzip')
420
+ @package.gzip({'src' => src, 'dest' => dest})
421
+ # error case: dest must be a string
422
+ begin
423
+ @package.gzip({'src' => file, 'dest' => [dest]})
424
+ flunk "Shoud have failed"
425
+ rescue
426
+ end
427
+ end
428
+
429
+ # Test task targz.
430
+ def test_task_targz
431
+ file1 = File.join(@tmp_dir, 'file1.txt')
432
+ file2 = File.join(@tmp_dir, 'file2.txt')
433
+ File.open(file1, 'w') {|file| file.write('File 1')}
434
+ File.open(file2, 'w') {|file| file.write('File 2')}
435
+ includes = "#{@tmp_dir}/*.txt"
436
+ dest = File.join(@tmp_dir, 'test.zip')
437
+ @package.targz({'includes' => includes, 'dest' => dest})
438
+ # error case: dest must be a string
439
+ begin
440
+ @package.targz({'includes' => includes, 'dest' => [dest]})
441
+ flunk "Shoud have failed"
442
+ rescue
443
+ end
444
+ end
445
+
446
+ private
447
+
448
+ # Clean temporary directory.
449
+ def clean_tmp
450
+ FileUtils.rm_rf(@tmp_dir)
451
+ FileUtils.makedirs(@tmp_dir)
452
+ end
453
+
454
+ # Create a given file in tmp directory with its name as contents.
455
+ # - name: file name, relative to temporary directory.
456
+ def create_file(name)
457
+ File.open(name, 'w') { |file| file.write(name) }
458
+ end
459
+
460
+ # Assert file exists and test its contents.
461
+ def assert_file(file, contents)
462
+ assert(File.exists?(file))
463
+ text = File.read(file)
464
+ assert_equal(contents, text)
465
+ end
466
+
467
+ end