perennial 0.2.2.2 → 1.0.0.1

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,511 +0,0 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
- require 'fakefs'
3
- require 'test/unit'
4
-
5
- class FakeFSTest < Test::Unit::TestCase
6
- include FakeFS
7
-
8
- def setup
9
- FileSystem.clear
10
- end
11
-
12
- def test_can_be_initialized_empty
13
- fs = FileSystem
14
- assert_equal 0, fs.files.size
15
- end
16
-
17
- def xtest_can_be_initialized_with_an_existing_directory
18
- fs = FileSystem
19
- fs.clone(File.expand_path(File.dirname(__FILE__))).inspect
20
- puts fs.files.inspect
21
- assert_equal 1, fs.files.size
22
- end
23
-
24
- def test_can_create_directories
25
- FileUtils.mkdir_p("/path/to/dir")
26
- assert_kind_of MockDir, FileSystem.fs['path']['to']['dir']
27
- end
28
-
29
- def test_knows_directories_exist
30
- FileUtils.mkdir_p(path = "/path/to/dir")
31
- assert File.exists?(path)
32
- end
33
-
34
- def test_knows_directories_are_directories
35
- FileUtils.mkdir_p(path = "/path/to/dir")
36
- assert File.directory?(path)
37
- end
38
-
39
- def test_knows_symlink_directories_are_directories
40
- FileUtils.mkdir_p(path = "/path/to/dir")
41
- FileUtils.ln_s path, sympath = '/sympath'
42
- assert File.directory?(sympath)
43
- end
44
-
45
- def test_knows_non_existent_directories_arent_directories
46
- path = 'does/not/exist/'
47
- assert_equal RealFile.directory?(path), File.directory?(path)
48
- end
49
-
50
- def test_doesnt_overwrite_existing_directories
51
- FileUtils.mkdir_p(path = "/path/to/dir")
52
- assert File.exists?(path)
53
- FileUtils.mkdir_p("/path/to")
54
- assert File.exists?(path)
55
- end
56
-
57
- def test_can_create_symlinks
58
- FileUtils.mkdir_p(target = "/path/to/target")
59
- FileUtils.ln_s(target, "/path/to/link")
60
- assert_kind_of MockSymlink, FileSystem.fs['path']['to']['link']
61
-
62
- assert_raises(Errno::EEXIST) {
63
- FileUtils.ln_s(target, '/path/to/link')
64
- }
65
- end
66
-
67
- def test_can_follow_symlinks
68
- FileUtils.mkdir_p(target = "/path/to/target")
69
- FileUtils.ln_s(target, link = "/path/to/symlink")
70
- assert_equal target, File.readlink(link)
71
- end
72
-
73
- def test_knows_symlinks_are_symlinks
74
- FileUtils.mkdir_p(target = "/path/to/target")
75
- FileUtils.ln_s(target, link = "/path/to/symlink")
76
- assert File.symlink?(link)
77
- end
78
-
79
- def test_can_create_files
80
- path = '/path/to/file.txt'
81
- File.open(path, 'w') do |f|
82
- f.write "Yatta!"
83
- end
84
-
85
- assert File.exists?(path)
86
- end
87
-
88
- def test_can_read_files_once_written
89
- path = '/path/to/file.txt'
90
- File.open(path, 'w') do |f|
91
- f.write "Yatta!"
92
- end
93
-
94
- assert_equal "Yatta!", File.read(path)
95
- end
96
-
97
- def test_can_write_to_files
98
- path = '/path/to/file.txt'
99
- File.open(path, 'w') do |f|
100
- f << 'Yada Yada'
101
- end
102
- assert_equal 'Yada Yada', File.read(path)
103
- end
104
-
105
- def test_can_read_with_File_readlines
106
- path = '/path/to/file.txt'
107
- File.open(path, 'w') do |f|
108
- f.puts "Yatta!"
109
- f.puts "woot"
110
- end
111
-
112
- assert_equal ["Yatta!", "woot"], File.readlines(path)
113
- end
114
-
115
- def test_File_close_disallows_further_access
116
- path = '/path/to/file.txt'
117
- file = File.open(path, 'w')
118
- file.write 'Yada'
119
- file.close
120
- assert_raise IOError do
121
- file.read
122
- end
123
- end
124
-
125
- def test_can_read_from_file_objects
126
- path = '/path/to/file.txt'
127
- File.open(path, 'w') do |f|
128
- f.write "Yatta!"
129
- end
130
-
131
- assert_equal "Yatta!", File.new(path).read
132
- end
133
-
134
- def test_file_read_errors_appropriately
135
- assert_raise Errno::ENOENT do
136
- File.read('anything')
137
- end
138
- end
139
-
140
- def test_knows_files_are_files
141
- path = '/path/to/file.txt'
142
- File.open(path, 'w') do |f|
143
- f.write "Yatta!"
144
- end
145
-
146
- assert File.file?(path)
147
- end
148
-
149
- def test_knows_symlink_files_are_files
150
- path = '/path/to/file.txt'
151
- File.open(path, 'w') do |f|
152
- f.write "Yatta!"
153
- end
154
- FileUtils.ln_s path, sympath='/sympath'
155
-
156
- assert File.file?(sympath)
157
- end
158
-
159
- def test_knows_non_existent_files_arent_files
160
- assert_equal RealFile.file?('does/not/exist.txt'), File.file?('does/not/exist.txt')
161
- end
162
-
163
- def test_can_chown_files
164
- good = 'file.txt'
165
- bad = 'nofile.txt'
166
- File.open(good,'w'){|f| f.write "foo" }
167
-
168
- assert_equal [good], FileUtils.chown('noone', 'nogroup', good, :verbose => true)
169
- assert_raises(Errno::ENOENT) do
170
- FileUtils.chown('noone', 'nogroup', bad, :verbose => true)
171
- end
172
-
173
- assert_equal [good], FileUtils.chown('noone', 'nogroup', good)
174
- assert_raises(Errno::ENOENT) do
175
- FileUtils.chown('noone', 'nogroup', bad)
176
- end
177
-
178
- assert_equal [good], FileUtils.chown('noone', 'nogroup', [good])
179
- assert_raises(Errno::ENOENT) do
180
- FileUtils.chown('noone', 'nogroup', [good, bad])
181
- end
182
- end
183
-
184
- def test_can_chown_R_files
185
- FileUtils.mkdir_p '/path/'
186
- File.open('/path/foo', 'w'){|f| f.write 'foo' }
187
- File.open('/path/foobar', 'w'){|f| f.write 'foo' }
188
- resp = FileUtils.chown_R('no', 'no', '/path')
189
- assert_equal ['/path'], resp
190
- end
191
-
192
- def test_dir_globs_paths
193
- FileUtils.mkdir_p '/path'
194
- File.open('/path/foo', 'w'){|f| f.write 'foo' }
195
- File.open('/path/foobar', 'w'){|f| f.write 'foo' }
196
-
197
- FileUtils.mkdir_p '/path/bar'
198
- File.open('/path/bar/baz', 'w'){|f| f.write 'foo' }
199
-
200
- FileUtils.cp_r '/path/bar', '/path/bar2'
201
-
202
- assert_equal ['/path'], Dir['/path']
203
- assert_equal %w( /path/bar /path/bar2 /path/foo /path/foobar ), Dir['/path/*']
204
-
205
- assert_equal ['/path/bar/baz'], Dir['/path/bar/*']
206
-
207
- # Unsupported so far. More hackery than I want to work on right now
208
- # assert_equal ['/path'], Dir['/path*']
209
- end
210
-
211
- def test_chdir_changes_directories_like_a_boss
212
- # I know memes!
213
- FileUtils.mkdir_p '/path'
214
- assert_equal '.', FileSystem.fs.name
215
- assert_equal({}, FileSystem.fs['path'])
216
- Dir.chdir '/path' do
217
- File.open('foo', 'w'){|f| f.write 'foo'}
218
- File.open('foobar', 'w'){|f| f.write 'foo'}
219
- end
220
-
221
- assert_equal '.', FileSystem.fs.name
222
- assert_equal(['foo', 'foobar'], FileSystem.fs['path'].keys.sort)
223
-
224
- c = nil
225
- Dir.chdir '/path' do
226
- c = File.open('foo', 'r'){|f| f.read }
227
- end
228
-
229
- assert_equal 'foo', c
230
- end
231
-
232
- def test_chdir_shouldnt_keep_us_from_absolute_paths
233
- FileUtils.mkdir_p '/path'
234
-
235
- Dir.chdir '/path' do
236
- File.open('foo', 'w'){|f| f.write 'foo'}
237
- File.open('/foobar', 'w'){|f| f.write 'foo'}
238
- end
239
- assert_equal ['foo'], FileSystem.fs['path'].keys.sort
240
- assert_equal ['foobar', 'path'], FileSystem.fs.keys.sort
241
-
242
- Dir.chdir '/path' do
243
- FileUtils.rm('foo')
244
- FileUtils.rm('/foobar')
245
- end
246
-
247
- assert_equal [], FileSystem.fs['path'].keys.sort
248
- assert_equal ['path'], FileSystem.fs.keys.sort
249
- end
250
-
251
- def test_chdir_should_be_nestable
252
- FileUtils.mkdir_p '/path/me'
253
- Dir.chdir '/path' do
254
- File.open('foo', 'w'){|f| f.write 'foo'}
255
- Dir.chdir 'me' do
256
- File.open('foobar', 'w'){|f| f.write 'foo'}
257
- end
258
- end
259
-
260
- assert_equal ['foo','me'], FileSystem.fs['path'].keys.sort
261
- assert_equal ['foobar'], FileSystem.fs['path']['me'].keys.sort
262
- end
263
-
264
- def test_chdir_should_flop_over_and_die_if_the_dir_doesnt_exist
265
- assert_raise(Errno::ENOENT) do
266
- Dir.chdir('/nope') do
267
- 1
268
- end
269
- end
270
- end
271
-
272
- def test_chdir_shouldnt_lose_state_because_of_errors
273
- FileUtils.mkdir_p '/path'
274
-
275
- Dir.chdir '/path' do
276
- File.open('foo', 'w'){|f| f.write 'foo'}
277
- File.open('foobar', 'w'){|f| f.write 'foo'}
278
- end
279
-
280
- begin
281
- Dir.chdir('/path') do
282
- raise Exception
283
- end
284
- rescue Exception # hardcore
285
- end
286
-
287
- Dir.chdir('/path') do
288
- begin
289
- Dir.chdir('nope'){ }
290
- rescue Errno::ENOENT
291
- end
292
-
293
- assert_equal ['/path'], FileSystem.dir_levels
294
- end
295
-
296
- assert_equal(['foo', 'foobar'], FileSystem.fs['path'].keys.sort)
297
- end
298
-
299
- def test_chdir_with_no_block_is_awesome
300
- FileUtils.mkdir_p '/path'
301
- Dir.chdir('/path')
302
- FileUtils.mkdir_p 'subdir'
303
- assert_equal ['subdir'], FileSystem.current_dir.keys
304
- Dir.chdir('subdir')
305
- File.open('foo', 'w'){|f| f.write 'foo'}
306
- assert_equal ['foo'], FileSystem.current_dir.keys
307
-
308
- assert_raises(Errno::ENOENT) do
309
- Dir.chdir('subsubdir')
310
- end
311
-
312
- assert_equal ['foo'], FileSystem.current_dir.keys
313
- end
314
-
315
- def test_file_open_defaults_to_read
316
- File.open('foo','w'){|f| f.write 'bar' }
317
- assert_equal 'bar', File.open('foo'){|f| f.read }
318
- end
319
-
320
- def test_flush_exists_on_file
321
- r = File.open('foo','w'){|f| f.write 'bar'; f.flush }
322
- assert_equal 'foo', r.path
323
- end
324
-
325
- def test_mv_should_raise_error_on_missing_file
326
- assert_raise(Errno::ENOENT) do
327
- FileUtils.mv 'blafgag', 'foo'
328
- end
329
- end
330
-
331
- def test_mv_actually_works
332
- File.open('foo', 'w') {|f| f.write 'bar' }
333
- FileUtils.mv 'foo', 'baz'
334
- assert_equal 'bar', File.open('baz'){|f| f.read }
335
- end
336
-
337
- def test_cp_actually_works
338
- File.open('foo', 'w') {|f| f.write 'bar' }
339
- FileUtils.cp('foo', 'baz')
340
- assert_equal 'bar', File.read('baz')
341
- end
342
-
343
- def test_cp_file_into_dir
344
- File.open('foo', 'w') {|f| f.write 'bar' }
345
- FileUtils.mkdir_p 'baz'
346
-
347
- FileUtils.cp('foo', 'baz')
348
- assert_equal 'bar', File.read('baz/foo')
349
- end
350
-
351
- def test_cp_overwrites_dest_file
352
- File.open('foo', 'w') {|f| f.write 'FOO' }
353
- File.open('bar', 'w') {|f| f.write 'BAR' }
354
-
355
- FileUtils.cp('foo', 'bar')
356
- assert_equal 'FOO', File.read('bar')
357
- end
358
-
359
- def test_cp_fails_on_no_source
360
- assert_raise Errno::ENOENT do
361
- FileUtils.cp('foo', 'baz')
362
- end
363
- end
364
-
365
- def test_cp_fails_on_directory_copy
366
- FileUtils.mkdir_p 'baz'
367
-
368
- assert_raise Errno::EISDIR do
369
- FileUtils.cp('baz', 'bar')
370
- end
371
- end
372
-
373
- def test_cp_r_doesnt_tangle_files_together
374
- File.open('foo', 'w') {|f| f.write 'bar' }
375
- FileUtils.cp_r('foo', 'baz')
376
- File.open('baz', 'w') {|f| f.write 'quux' }
377
- assert_equal 'bar', File.open('foo'){|f| f.read }
378
- end
379
-
380
- def test_cp_r_should_raise_error_on_missing_file
381
- # Yes, this error sucks, but it conforms to the original Ruby
382
- # method.
383
- assert_raise(RuntimeError) do
384
- FileUtils.cp_r 'blafgag', 'foo'
385
- end
386
- end
387
-
388
- def test_cp_r_handles_copying_directories
389
- FileUtils.mkdir_p 'subdir'
390
- Dir.chdir('subdir'){ File.open('foo', 'w'){|f| f.write 'footext' } }
391
-
392
- FileUtils.mkdir_p 'baz'
393
-
394
- # To a previously uncreated directory
395
- FileUtils.cp_r('subdir', 'quux')
396
- assert_equal 'footext', File.open('quux/foo'){|f| f.read }
397
-
398
- # To a directory that already exists
399
- FileUtils.cp_r('subdir', 'baz')
400
- assert_equal 'footext', File.open('baz/subdir/foo'){|f| f.read }
401
-
402
- # To a subdirectory of a directory that does not exist
403
- assert_raises(Errno::ENOENT) {
404
- FileUtils.cp_r('subdir', 'nope/something')
405
- }
406
- end
407
-
408
- def test_cp_r_only_copies_into_directories
409
- FileUtils.mkdir_p 'subdir'
410
- Dir.chdir('subdir'){ File.open('foo', 'w'){|f| f.write 'footext' } }
411
-
412
- File.open('bar', 'w') {|f| f.write 'bartext' }
413
-
414
- assert_raises(Errno::EEXIST) do
415
- FileUtils.cp_r 'subdir', 'bar'
416
- end
417
-
418
- FileUtils.mkdir_p 'otherdir'
419
- FileUtils.ln_s 'otherdir', 'symdir'
420
-
421
- FileUtils.cp_r 'subdir', 'symdir'
422
- assert_equal 'footext', File.open('symdir/subdir/foo'){|f| f.read }
423
- end
424
-
425
- def test_cp_r_sets_parent_correctly
426
- FileUtils.mkdir_p '/path/foo'
427
- File.open('/path/foo/bar', 'w'){|f| f.write 'foo' }
428
- File.open('/path/foo/baz', 'w'){|f| f.write 'foo' }
429
-
430
- FileUtils.cp_r '/path/foo', '/path/bar'
431
-
432
- assert File.exists?('/path/bar/baz')
433
- FileUtils.rm_rf '/path/bar/baz'
434
- assert_equal %w( /path/bar/bar ), Dir['/path/bar/*']
435
- end
436
-
437
- def test_clone_clones_normal_files
438
- RealFile.open(here('foo'), 'w'){|f| f.write 'bar' }
439
- assert !File.exists?(here('foo'))
440
- FileSystem.clone(here('foo'))
441
- assert_equal 'bar', File.open(here('foo')){|f| f.read }
442
- ensure
443
- RealFile.unlink(here('foo')) if RealFile.exists?(here('foo'))
444
- end
445
-
446
- def test_clone_clones_directories
447
- RealFileUtils.mkdir_p(here('subdir'))
448
-
449
- FileSystem.clone(here('subdir'))
450
-
451
- assert File.exists?(here('subdir')), 'subdir was cloned'
452
- assert File.directory?(here('subdir')), 'subdir is a directory'
453
- ensure
454
- RealFileUtils.rm_rf(here('subdir')) if RealFile.exists?(here('subdir'))
455
- end
456
-
457
- def test_clone_clones_dot_files_even_hard_to_find_ones
458
- RealFileUtils.mkdir_p(here('subdir/.bar/baz/.quux/foo'))
459
- assert !File.exists?(here('subdir'))
460
-
461
- FileSystem.clone(here('subdir'))
462
- assert_equal ['.bar'], FileSystem.find(here('subdir')).keys
463
- assert_equal ['foo'], FileSystem.find(here('subdir/.bar/baz/.quux')).keys
464
- ensure
465
- RealFileUtils.rm_rf(here('subdir')) if RealFile.exists?(here('subdir'))
466
- end
467
-
468
- def test_putting_a_dot_at_end_copies_the_contents
469
- FileUtils.mkdir_p 'subdir'
470
- Dir.chdir('subdir'){ File.open('foo', 'w'){|f| f.write 'footext' } }
471
-
472
- FileUtils.mkdir_p 'newdir'
473
- FileUtils.cp_r 'subdir/.', 'newdir'
474
- assert_equal 'footext', File.open('newdir/foo'){|f| f.read }
475
- end
476
-
477
- def test_file_can_read_from_symlinks
478
- File.open('first', 'w'){|f| f.write '1'}
479
- FileUtils.ln_s 'first', 'one'
480
- assert_equal '1', File.open('one'){|f| f.read }
481
-
482
- FileUtils.mkdir_p 'subdir'
483
- File.open('subdir/nother','w'){|f| f.write 'works' }
484
- FileUtils.ln_s 'subdir', 'new'
485
- assert_equal 'works', File.open('new/nother'){|f| f.read }
486
- end
487
-
488
- def test_files_can_be_touched
489
- FileUtils.touch('touched_file')
490
- assert File.exists?('touched_file')
491
- list = ['newfile', 'another']
492
- FileUtils.touch(list)
493
- list.each { |fp| assert(File.exists?(fp)) }
494
- end
495
-
496
- def test_touch_does_not_work_if_the_dir_path_cannot_be_found
497
- assert_raises(Errno::ENOENT) {
498
- FileUtils.touch('this/path/should/not/be/here')
499
- }
500
- FileUtils.mkdir_p('subdir')
501
- list = ['subdir/foo', 'nosubdir/bar']
502
-
503
- assert_raises(Errno::ENOENT) {
504
- FileUtils.touch(list)
505
- }
506
- end
507
-
508
- def here(fname)
509
- RealFile.expand_path(RealFile.dirname(__FILE__)+'/'+fname)
510
- end
511
- end
@@ -1,27 +0,0 @@
1
- # Figure out what's missing from fakefs
2
- #
3
- # USAGE
4
- #
5
- # $ ruby test/verify.rb | grep "not implemented"
6
- require 'fakefs'
7
- require 'test/unit'
8
-
9
- class FakeFSVerifierTest < Test::Unit::TestCase
10
- (RealFile.methods - Class.new.methods).each do |name|
11
- define_method("test #{name} class method") do
12
- assert File.respond_to?(name), "File.#{name} not implemented"
13
- end
14
- end
15
-
16
- (RealFile.instance_methods - Enumerable.instance_methods).each do |name|
17
- define_method("test #{name} instance method") do
18
- assert File.instance_methods.include?(name), "File##{name} not implemented"
19
- end
20
- end
21
-
22
- (RealFileUtils.methods - Class.new.methods).each do |name|
23
- define_method("test #{name} module method") do
24
- assert FileUtils.respond_to?(name), "FileUtils.#{name} not implemented"
25
- end
26
- end
27
- end