fakefs 0.7.0 → 0.8.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.
- checksums.yaml +4 -4
- data/README.markdown +9 -9
- data/lib/fakefs/dir.rb +17 -12
- data/lib/fakefs/fake/file.rb +1 -1
- data/lib/fakefs/file.rb +18 -0
- data/lib/fakefs/fileutils.rb +22 -5
- data/lib/fakefs/globber.rb +1 -0
- data/lib/fakefs/pathname.rb +6 -3
- data/lib/fakefs/version.rb +1 -1
- metadata +19 -55
- data/.autotest +0 -5
- data/.gitignore +0 -12
- data/.rspec +0 -1
- data/.rubocop.yml +0 -54
- data/.travis.yml +0 -15
- data/CONTRIBUTORS +0 -97
- data/Gemfile +0 -3
- data/Rakefile +0 -62
- data/etc/git-rank-contributors +0 -57
- data/fakefs.gemspec +0 -27
- data/spec/fakefs/fakefs_bug_ruby_2.1.0-preview2_spec.rb +0 -18
- data/spec/fakefs/spec_helpers_spec.rb +0 -102
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -3
- data/test/dir/tempfile_test.rb +0 -21
- data/test/fake/file/join_test.rb +0 -20
- data/test/fake/file/lstat_test.rb +0 -60
- data/test/fake/file/stat_test.rb +0 -40
- data/test/fake/file/sysseek_test.rb +0 -45
- data/test/fake/file/syswrite_test.rb +0 -63
- data/test/fake/file_test.rb +0 -112
- data/test/fake/symlink_test.rb +0 -33
- data/test/fakefs_test.rb +0 -2769
- data/test/file/stat_test.rb +0 -158
- data/test/globber_test.rb +0 -28
- data/test/kernel_test.rb +0 -57
- data/test/pathname_test.rb +0 -75
- data/test/safe_test.rb +0 -84
- data/test/test_helper.rb +0 -33
- data/test/verify.rb +0 -34
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
# File SysWrite test class
|
4
|
-
class FileSysWriteTest < Minitest::Test
|
5
|
-
def setup
|
6
|
-
FakeFS.activate!
|
7
|
-
FakeFS::FileSystem.clear
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
FakeFS.deactivate!
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_returns_one_byte_when_written
|
15
|
-
f = File.open 'foo', 'w'
|
16
|
-
result = f.syswrite 'a'
|
17
|
-
assert_equal 1, result
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_returns_two_bytes_when_two_written
|
21
|
-
f = File.open 'foo', 'w'
|
22
|
-
result = f.syswrite 'ab'
|
23
|
-
assert_equal 2, result
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_syswrite_writes_file
|
27
|
-
f = File.open 'foo', 'w'
|
28
|
-
f.syswrite 'abcdef'
|
29
|
-
f.close
|
30
|
-
|
31
|
-
assert_equal 'abcdef', File.read('foo')
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_writes_to_the_actual_position_when_called_after_buffered_io_read
|
35
|
-
File.open('foo', 'w') do |file|
|
36
|
-
file.syswrite('012345678901234567890123456789')
|
37
|
-
end
|
38
|
-
|
39
|
-
file = File.open('foo', 'r+')
|
40
|
-
file.read(5)
|
41
|
-
file.syswrite('abcde')
|
42
|
-
|
43
|
-
File.open('foo') do |f|
|
44
|
-
assert_equal '01234abcde', f.sysread(10)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_writes_all_of_the_strings_bytes_but_does_not_buffer_them
|
49
|
-
File.open('foo', 'w') do |file|
|
50
|
-
file.syswrite('012345678901234567890123456789')
|
51
|
-
end
|
52
|
-
|
53
|
-
file = File.open('foo', 'r+')
|
54
|
-
file.syswrite('abcde')
|
55
|
-
|
56
|
-
File.open('foo') do |f|
|
57
|
-
assert_equal 'abcde56789', f.sysread(10)
|
58
|
-
f.seek(0)
|
59
|
-
f.fsync
|
60
|
-
assert_equal 'abcde56789', f.sysread(10)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
data/test/fake/file_test.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
# Fake File test class
|
4
|
-
class FakeFileTest < Minitest::Test
|
5
|
-
include FakeFS
|
6
|
-
|
7
|
-
def setup
|
8
|
-
FileSystem.clear
|
9
|
-
|
10
|
-
@file = FakeFile.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_fake_file_has_empty_content_by_default
|
14
|
-
assert_equal '', @file.content
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_fake_file_can_read_and_write_to_content
|
18
|
-
@file.content = 'foobar'
|
19
|
-
assert_equal 'foobar', @file.content
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_fake_file_has_1_link_by_default
|
23
|
-
assert_equal [@file], @file.links
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_fake_file_can_create_link
|
27
|
-
other_file = FakeFile.new
|
28
|
-
|
29
|
-
@file.link(other_file)
|
30
|
-
|
31
|
-
assert_equal [@file, other_file], @file.links
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_fake_file_wont_add_link_to_same_file_twice
|
35
|
-
other_file = FakeFile.new
|
36
|
-
|
37
|
-
@file.link other_file
|
38
|
-
@file.link other_file
|
39
|
-
|
40
|
-
assert_equal [@file, other_file], @file.links
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_links_are_mutual
|
44
|
-
other_file = FakeFile.new
|
45
|
-
|
46
|
-
@file.link(other_file)
|
47
|
-
|
48
|
-
assert_equal [@file, other_file], other_file.links
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_can_link_multiple_files
|
52
|
-
file_two = FakeFile.new
|
53
|
-
file_three = FakeFile.new
|
54
|
-
|
55
|
-
@file.link file_two
|
56
|
-
@file.link file_three
|
57
|
-
|
58
|
-
assert_equal [@file, file_two, file_three], @file.links
|
59
|
-
assert_equal [@file, file_two, file_three], file_two.links
|
60
|
-
assert_equal [@file, file_two, file_three], file_three.links
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_links_share_same_content
|
64
|
-
other_file = FakeFile.new
|
65
|
-
|
66
|
-
@file.link other_file
|
67
|
-
|
68
|
-
@file.content = 'foobar'
|
69
|
-
|
70
|
-
assert_equal 'foobar', other_file.content
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_clone_creates_new_inode
|
74
|
-
clone = @file.clone
|
75
|
-
refute clone.inode.equal?(@file.inode)
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_cloning_does_not_use_same_content_object
|
79
|
-
clone = @file.clone
|
80
|
-
|
81
|
-
clone.content = 'foo'
|
82
|
-
@file.content = 'bar'
|
83
|
-
|
84
|
-
assert_equal 'foo', clone.content
|
85
|
-
assert_equal 'bar', @file.content
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_raises_an_error_with_the_correct_path
|
89
|
-
path = '/some/non/existing/file'
|
90
|
-
begin
|
91
|
-
FakeFS::File.new path
|
92
|
-
msg = nil
|
93
|
-
rescue Errno::ENOENT => e
|
94
|
-
msg = e.message
|
95
|
-
end
|
96
|
-
assert_equal "No such file or directory - #{path}", msg
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_file_size_question_works
|
100
|
-
assert_nil FileTest.size?('does-not-exist.txt')
|
101
|
-
|
102
|
-
File.open('empty.txt', 'w') do |f|
|
103
|
-
f << ''
|
104
|
-
end
|
105
|
-
assert_nil FileTest.size?('empty.txt')
|
106
|
-
|
107
|
-
File.open('one-char.txt', 'w') do |f|
|
108
|
-
f << 'a'
|
109
|
-
end
|
110
|
-
assert_equal 1, FileTest.size?('one-char.txt')
|
111
|
-
end
|
112
|
-
end
|
data/test/fake/symlink_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
# Fake symlink test class
|
4
|
-
class FakeSymlinkTest < Minitest::Test
|
5
|
-
include FakeFS
|
6
|
-
|
7
|
-
def test_symlink_has_method_missing_as_private
|
8
|
-
methods = FakeSymlink.private_instance_methods.map(&:to_s)
|
9
|
-
assert methods.include?('method_missing')
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_symlink_respond_to_accepts_multiple_params
|
13
|
-
fake_symlink = FakeSymlink.new('foo')
|
14
|
-
assert fake_symlink.respond_to?(:to_s, false),
|
15
|
-
'has public method \#to_s'
|
16
|
-
assert fake_symlink.respond_to?(:to_s, true),
|
17
|
-
'has public or private method \#to_s'
|
18
|
-
refute fake_symlink.respond_to?(:initialize, false),
|
19
|
-
'has private method \#initialize'
|
20
|
-
assert fake_symlink.respond_to?(:initialize, true),
|
21
|
-
'has private method \#initialize'
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_symlink_respond_to_uses_same_param_defaults
|
25
|
-
fake_symlink = FakeSymlink.new('foo')
|
26
|
-
assert_equal fake_symlink.respond_to?(:to_s),
|
27
|
-
fake_symlink.entry.respond_to?(:to_s)
|
28
|
-
refute_equal fake_symlink.respond_to?(:to_s),
|
29
|
-
fake_symlink.entry.respond_to?(:initialize)
|
30
|
-
assert_equal fake_symlink.respond_to?(:initialize),
|
31
|
-
fake_symlink.entry.respond_to?(:initialize)
|
32
|
-
end
|
33
|
-
end
|
data/test/fakefs_test.rb
DELETED
@@ -1,2769 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
# FakeFS tests
|
5
|
-
class FakeFSTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
act_on_real_fs do
|
8
|
-
File.umask(0006)
|
9
|
-
FileUtils.rm_rf(real_file_sandbox)
|
10
|
-
FileUtils.mkdir_p(real_file_sandbox)
|
11
|
-
FileUtils.chmod(0777, real_file_sandbox)
|
12
|
-
end
|
13
|
-
|
14
|
-
FakeFS.activate!
|
15
|
-
FakeFS::FileSystem.clear
|
16
|
-
# Create /tmp so that Minitest can create files for diffing when an
|
17
|
-
# assertion fails. See https://github.com/defunkt/fakefs/issues/143
|
18
|
-
FileUtils.mkdir_p('/tmp')
|
19
|
-
end
|
20
|
-
|
21
|
-
def teardown
|
22
|
-
FakeFS.deactivate!
|
23
|
-
|
24
|
-
act_on_real_fs do
|
25
|
-
FileUtils.rm_rf(real_file_sandbox)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_can_be_initialized_empty
|
30
|
-
FakeFS::FileSystem.clear
|
31
|
-
fs = FakeFS::FileSystem
|
32
|
-
assert_equal 0, fs.files.size
|
33
|
-
end
|
34
|
-
|
35
|
-
def xtest_can_be_initialized_with_an_existing_directory
|
36
|
-
fs = FakeFS::FileSystem
|
37
|
-
fs.clone(File.expand_path(File.dirname(__FILE__))).inspect
|
38
|
-
assert_equal 1, fs.files.size
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_can_create_directories_with_file_utils_mkdir_p
|
42
|
-
FileUtils.mkdir_p('/path/to/dir')
|
43
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_can_cd_to_directory_with_block
|
47
|
-
FileUtils.mkdir_p('/path/to/dir')
|
48
|
-
new_path = nil
|
49
|
-
FileUtils.cd('/path/to') do
|
50
|
-
new_path = Dir.getwd
|
51
|
-
end
|
52
|
-
|
53
|
-
assert_equal new_path, '/path/to'
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_can_create_a_list_of_directories_with_file_utils_mkdir_p
|
57
|
-
FileUtils.mkdir_p(%w(/path/to/dir1 /path/to/dir2))
|
58
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir1']
|
59
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir2']
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_can_create_directories_with_options
|
63
|
-
FileUtils.mkdir_p('/path/to/dir', mode: 0755)
|
64
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_can_create_directories_with_file_utils_mkdir
|
68
|
-
FileUtils.mkdir_p('/path/to/dir')
|
69
|
-
FileUtils.mkdir('/path/to/dir/subdir')
|
70
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']['subdir']
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_can_create_a_list_of_directories_with_file_utils_mkdir
|
74
|
-
FileUtils.mkdir_p('/path/to/dir')
|
75
|
-
FileUtils.mkdir(%w(/path/to/dir/subdir1 /path/to/dir/subdir2))
|
76
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']['subdir1']
|
77
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']['subdir2']
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_raises_error_when_creating_a_new_dir_with_mkdir_in_non_existent_path
|
81
|
-
assert_raises Errno::ENOENT do
|
82
|
-
FileUtils.mkdir('/this/path/does/not/exists/newdir')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_raises_error_when_creating_a_new_dir_over_existing_file
|
87
|
-
File.open('file', 'w') { |f| f << 'This is a file, not a directory.' }
|
88
|
-
|
89
|
-
assert_raises Errno::EEXIST do
|
90
|
-
FileUtils.mkdir_p('file/subdir')
|
91
|
-
end
|
92
|
-
|
93
|
-
FileUtils.mkdir('dir')
|
94
|
-
File.open('dir/subfile', 'w') { |f| f << 'This is a file inside a directory.' }
|
95
|
-
|
96
|
-
assert_raises Errno::EEXIST do
|
97
|
-
FileUtils.mkdir_p('dir/subfile/subdir')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_can_create_directories_with_mkpath
|
102
|
-
FileUtils.mkpath('/path/to/dir')
|
103
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_can_create_directories_with_mkpath_and_options
|
107
|
-
FileUtils.mkpath('/path/to/dir', mode: 0755)
|
108
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_can_create_directories_with_mkdirs
|
112
|
-
FileUtils.makedirs('/path/to/dir')
|
113
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_can_create_directories_with_mkdirs_and_options
|
117
|
-
FileUtils.makedirs('/path/to/dir', mode: 0755)
|
118
|
-
assert_kind_of FakeFS::FakeDir, FakeFS::FileSystem.fs['path']['to']['dir']
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_unlink_errors_on_file_not_found
|
122
|
-
assert_raises Errno::ENOENT do
|
123
|
-
FileUtils.rm('/foo')
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_unlink_doesnt_error_on_file_not_found_when_forced
|
128
|
-
FileUtils.rm('/foo', force: true)
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_unlink_doesnt_error_on_file_not_found_with_rm_rf
|
132
|
-
FileUtils.rm_rf('/foo')
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_can_delete_directories
|
136
|
-
FileUtils.mkdir_p('/path/to/dir')
|
137
|
-
FileUtils.rmdir('/path/to/dir')
|
138
|
-
assert File.exist?('/path/to/')
|
139
|
-
assert File.exist?('/path/to/dir') == false
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_can_delete_multiple_files
|
143
|
-
FileUtils.touch(%w(foo bar))
|
144
|
-
FileUtils.rm(%w(foo bar))
|
145
|
-
assert File.exist?('foo') == false
|
146
|
-
assert File.exist?('bar') == false
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_aliases_exist
|
150
|
-
assert File.respond_to?(:unlink)
|
151
|
-
assert FileUtils.respond_to?(:rm_f)
|
152
|
-
assert FileUtils.respond_to?(:rm_r)
|
153
|
-
assert FileUtils.respond_to?(:rm)
|
154
|
-
assert FileUtils.respond_to?(:symlink)
|
155
|
-
assert FileUtils.respond_to?(:move)
|
156
|
-
assert FileUtils.respond_to?(:copy)
|
157
|
-
assert FileUtils.respond_to?(:remove)
|
158
|
-
assert FileUtils.respond_to?(:rmtree)
|
159
|
-
assert FileUtils.respond_to?(:safe_unlink)
|
160
|
-
assert FileUtils.respond_to?(:remove_entry_secure)
|
161
|
-
assert FileUtils.respond_to?(:cmp)
|
162
|
-
assert FileUtils.respond_to?(:identical?)
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_knows_directories_exist
|
166
|
-
FileUtils.mkdir_p(path = '/path/to/dir')
|
167
|
-
assert File.exist?(path)
|
168
|
-
end
|
169
|
-
|
170
|
-
def test_knows_directories_are_directories
|
171
|
-
FileUtils.mkdir_p(path = '/path/to/dir')
|
172
|
-
assert File.directory?(path)
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_knows_directories_are_directories_with_periods
|
176
|
-
FileUtils.mkdir_p(period_path = '/path/to/periodfiles/one.one')
|
177
|
-
FileUtils.mkdir('/path/to/periodfiles/one-one')
|
178
|
-
|
179
|
-
assert File.directory?(period_path)
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_knows_symlink_directories_are_directories
|
183
|
-
FileUtils.mkdir_p(path = '/path/to/dir')
|
184
|
-
FileUtils.ln_s path, sympath = '/sympath'
|
185
|
-
assert File.directory?(sympath)
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_knows_non_existent_directories_arent_directories
|
189
|
-
path = 'does/not/exist/'
|
190
|
-
assert_equal RealFile.directory?(path), File.directory?(path)
|
191
|
-
end
|
192
|
-
|
193
|
-
def test_doesnt_overwrite_existing_directories
|
194
|
-
FileUtils.mkdir_p(path = '/path/to/dir')
|
195
|
-
assert File.exist?(path)
|
196
|
-
FileUtils.mkdir_p('/path/to')
|
197
|
-
assert File.exist?(path)
|
198
|
-
assert_raises Errno::EEXIST do
|
199
|
-
FileUtils.mkdir('/path/to')
|
200
|
-
end
|
201
|
-
assert File.exist?(path)
|
202
|
-
end
|
203
|
-
|
204
|
-
def test_file_utils_mkdir_takes_options
|
205
|
-
FileUtils.mkdir('/foo', some: :option)
|
206
|
-
assert File.exist?('/foo')
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_symlink_with_missing_refferent_does_not_exist
|
210
|
-
File.symlink('/foo', '/bar')
|
211
|
-
refute File.exist?('/bar')
|
212
|
-
end
|
213
|
-
|
214
|
-
def test_can_create_symlinks
|
215
|
-
FileUtils.mkdir_p(target = '/path/to/target')
|
216
|
-
FileUtils.ln_s(target, '/path/to/link')
|
217
|
-
assert_kind_of FakeFS::FakeSymlink, FakeFS::FileSystem.fs['path']['to']['link']
|
218
|
-
|
219
|
-
assert_raises(Errno::EEXIST) do
|
220
|
-
FileUtils.ln_s(target, '/path/to/link')
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_can_force_creation_of_symlinks
|
225
|
-
FileUtils.mkdir_p(target = '/path/to/first/target')
|
226
|
-
FileUtils.ln_s(target, '/path/to/link')
|
227
|
-
assert_kind_of FakeFS::FakeSymlink, FakeFS::FileSystem.fs['path']['to']['link']
|
228
|
-
FileUtils.ln_s(target, '/path/to/link', force: true)
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_create_symlink_using_ln_sf
|
232
|
-
FileUtils.mkdir_p(target = '/path/to/first/target')
|
233
|
-
FileUtils.ln_s(target, '/path/to/link')
|
234
|
-
assert_kind_of FakeFS::FakeSymlink, FakeFS::FileSystem.fs['path']['to']['link']
|
235
|
-
FileUtils.ln_sf(target, '/path/to/link')
|
236
|
-
end
|
237
|
-
|
238
|
-
def test_can_follow_symlinks
|
239
|
-
FileUtils.mkdir_p(target = '/path/to/target')
|
240
|
-
FileUtils.ln_s(target, link = '/path/to/symlink')
|
241
|
-
assert_equal target, File.readlink(link)
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_symlinks_in_different_directories
|
245
|
-
FileUtils.mkdir_p('/path/to/bar')
|
246
|
-
FileUtils.mkdir_p(target = '/path/to/foo/target')
|
247
|
-
|
248
|
-
FileUtils.ln_s(target, link = '/path/to/bar/symlink')
|
249
|
-
assert_equal target, File.readlink(link)
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_symlink_with_relative_path_exists
|
253
|
-
FileUtils.touch('/file')
|
254
|
-
FileUtils.mkdir_p('/a/b')
|
255
|
-
FileUtils.ln_s('../../file', '/a/b/symlink')
|
256
|
-
assert File.exist?('/a/b/symlink')
|
257
|
-
end
|
258
|
-
|
259
|
-
def test_symlink_with_relative_path_and_nonexistant_file_does_not_exist
|
260
|
-
FileUtils.touch('/file')
|
261
|
-
FileUtils.mkdir_p('/a/b')
|
262
|
-
FileUtils.ln_s('../../file_foo', '/a/b/symlink')
|
263
|
-
refute File.exist?('/a/b/symlink')
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_symlink_with_relative_path_has_correct_target
|
267
|
-
FileUtils.touch('/file')
|
268
|
-
FileUtils.mkdir_p('/a/b')
|
269
|
-
FileUtils.ln_s('../../file', link = '/a/b/symlink')
|
270
|
-
assert_equal '../../file', File.readlink(link)
|
271
|
-
end
|
272
|
-
|
273
|
-
def test_symlinks_to_symlinks
|
274
|
-
FileUtils.mkdir_p(target = '/path/to/foo/target')
|
275
|
-
FileUtils.mkdir_p('/path/to/bar')
|
276
|
-
FileUtils.mkdir_p('/path/to/bar2')
|
277
|
-
|
278
|
-
FileUtils.ln_s(target, link1 = '/path/to/bar/symlink')
|
279
|
-
FileUtils.ln_s(link1, link2 = '/path/to/bar2/symlink')
|
280
|
-
assert_equal link1, File.readlink(link2)
|
281
|
-
end
|
282
|
-
|
283
|
-
def test_symlink_to_symlinks_should_raise_error_if_dir_doesnt_exist
|
284
|
-
FileUtils.mkdir_p(target = '/path/to/foo/target')
|
285
|
-
|
286
|
-
refute Dir.exist?('/path/to/bar')
|
287
|
-
|
288
|
-
assert_raises Errno::ENOENT do
|
289
|
-
FileUtils.ln_s(target, '/path/to/bar/symlink')
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
def test_knows_symlinks_are_symlinks
|
294
|
-
FileUtils.mkdir_p(target = '/path/to/target')
|
295
|
-
FileUtils.ln_s(target, link = '/path/to/symlink')
|
296
|
-
assert File.symlink?(link)
|
297
|
-
end
|
298
|
-
|
299
|
-
def test_can_create_files_in_current_dir
|
300
|
-
path = 'file.txt'
|
301
|
-
File.open(path, 'w') do |f|
|
302
|
-
f.write 'Yatta!'
|
303
|
-
end
|
304
|
-
|
305
|
-
assert File.exist?(path)
|
306
|
-
assert File.readable?(path)
|
307
|
-
assert File.writable?(path)
|
308
|
-
end
|
309
|
-
|
310
|
-
def test_nothing_is_sticky
|
311
|
-
refute File.sticky?('/')
|
312
|
-
end
|
313
|
-
|
314
|
-
def test_can_create_files_in_existing_dir
|
315
|
-
FileUtils.mkdir_p '/path/to'
|
316
|
-
path = '/path/to/file.txt'
|
317
|
-
|
318
|
-
File.open(path, 'w') do |f|
|
319
|
-
f.write 'Yatta!'
|
320
|
-
end
|
321
|
-
|
322
|
-
assert File.exist?(path)
|
323
|
-
assert File.readable?(path)
|
324
|
-
assert File.writable?(path)
|
325
|
-
end
|
326
|
-
|
327
|
-
def test_raises_ENOENT_trying_to_create_files_in_nonexistent_dir
|
328
|
-
path = '/path/to/file.txt'
|
329
|
-
|
330
|
-
assert_raises(Errno::ENOENT) do
|
331
|
-
File.open(path, 'w') do |f|
|
332
|
-
f.write 'Yatta!'
|
333
|
-
end
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
def test_raises_ENOENT_trying_to_create_files_in_relative_nonexistent_dir
|
338
|
-
FileUtils.mkdir_p '/some/path'
|
339
|
-
|
340
|
-
Dir.chdir('/some/path') do
|
341
|
-
assert_raises(Errno::ENOENT) do
|
342
|
-
File.open('../foo') { |f| f.write 'moo' }
|
343
|
-
end
|
344
|
-
end
|
345
|
-
end
|
346
|
-
|
347
|
-
def test_raises_ENOENT_trying_to_create_files_in_obscured_nonexistent_dir
|
348
|
-
FileUtils.mkdir_p '/some/path'
|
349
|
-
|
350
|
-
assert_raises(Errno::ENOENT) do
|
351
|
-
File.open('/some/path/../foo') { |f| f.write 'moo' }
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
def test_raises_ENOENT_trying_to_create_tilde_referenced_nonexistent_dir
|
356
|
-
path = "~/fakefs_test_#{$PID}_0000"
|
357
|
-
|
358
|
-
path = path.succ while File.exist? path
|
359
|
-
|
360
|
-
assert_raises(Errno::ENOENT) do
|
361
|
-
File.open("#{path}/foo") { |f| f.write 'moo' }
|
362
|
-
end
|
363
|
-
end
|
364
|
-
|
365
|
-
def test_raises_EISDIR_if_trying_to_open_existing_directory_name
|
366
|
-
path = '/path/to'
|
367
|
-
|
368
|
-
FileUtils.mkdir_p path
|
369
|
-
|
370
|
-
assert_raises(Errno::EISDIR) do
|
371
|
-
File.open(path, 'w') do |f|
|
372
|
-
f.write 'Yatta!'
|
373
|
-
end
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_can_create_files_with_bitmasks
|
378
|
-
FileUtils.mkdir_p('/path/to')
|
379
|
-
|
380
|
-
path = '/path/to/file.txt'
|
381
|
-
File.open(path, File::RDWR | File::CREAT) do |f|
|
382
|
-
f.write 'Yatta!'
|
383
|
-
end
|
384
|
-
|
385
|
-
assert File.exist?(path)
|
386
|
-
assert File.readable?(path)
|
387
|
-
assert File.writable?(path)
|
388
|
-
end
|
389
|
-
|
390
|
-
def test_file_opens_in_read_only_mode
|
391
|
-
File.open('foo', 'w') { |f| f << 'foo' }
|
392
|
-
|
393
|
-
f = File.open('foo')
|
394
|
-
|
395
|
-
assert_raises(IOError) do
|
396
|
-
f << 'bar'
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
def test_file_opens_in_read_only_mode_with_bitmasks
|
401
|
-
File.open('foo', 'w') { |f| f << 'foo' }
|
402
|
-
|
403
|
-
f = File.open('foo', File::RDONLY)
|
404
|
-
|
405
|
-
assert_raises(IOError) do
|
406
|
-
f << 'bar'
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
def test_file_opens_in_invalid_mode
|
411
|
-
FileUtils.touch('foo')
|
412
|
-
|
413
|
-
assert_raises(ArgumentError) do
|
414
|
-
File.open('foo', 'an_illegal_mode')
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
|
-
def test_raises_error_when_cannot_find_file_in_read_mode
|
419
|
-
assert_raises(Errno::ENOENT) do
|
420
|
-
File.open('does_not_exist', 'r')
|
421
|
-
end
|
422
|
-
end
|
423
|
-
|
424
|
-
def test_raises_error_when_cannot_find_file_in_read_write_mode
|
425
|
-
assert_raises(Errno::ENOENT) do
|
426
|
-
File.open('does_not_exist', 'r+')
|
427
|
-
end
|
428
|
-
end
|
429
|
-
|
430
|
-
def test_creates_files_in_write_only_mode
|
431
|
-
File.open('foo', 'w')
|
432
|
-
assert File.exist?('foo')
|
433
|
-
end
|
434
|
-
|
435
|
-
def test_creates_files_in_write_only_mode_with_bitmasks
|
436
|
-
File.open('foo', File::WRONLY | File::CREAT)
|
437
|
-
assert File.exist?('foo')
|
438
|
-
end
|
439
|
-
|
440
|
-
def test_raises_in_write_only_mode_without_create_bitmask
|
441
|
-
assert_raises(Errno::ENOENT) do
|
442
|
-
File.open('foo', File::WRONLY)
|
443
|
-
end
|
444
|
-
end
|
445
|
-
|
446
|
-
def test_creates_files_in_read_write_truncate_mode
|
447
|
-
File.open('foo', 'w+')
|
448
|
-
assert File.exist?('foo')
|
449
|
-
end
|
450
|
-
|
451
|
-
def test_creates_files_in_append_write_only
|
452
|
-
File.open('foo', 'a')
|
453
|
-
assert File.exist?('foo')
|
454
|
-
end
|
455
|
-
|
456
|
-
def test_creates_files_in_append_read_write
|
457
|
-
File.open('foo', 'a+')
|
458
|
-
assert File.exist?('foo')
|
459
|
-
end
|
460
|
-
|
461
|
-
def test_file_in_write_only_raises_error_when_reading
|
462
|
-
FileUtils.touch('foo')
|
463
|
-
|
464
|
-
f = File.open('foo', 'w')
|
465
|
-
|
466
|
-
assert_raises(IOError) do
|
467
|
-
f.read
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
def test_file_in_write_mode_truncates_existing_file
|
472
|
-
File.open('foo', 'w') { |f| f << 'contents' }
|
473
|
-
File.open('foo', 'w')
|
474
|
-
assert_equal '', File.read('foo')
|
475
|
-
end
|
476
|
-
|
477
|
-
def test_file_in_read_write_truncation_mode_truncates_file
|
478
|
-
File.open('foo', 'w') { |f| f << 'foo' }
|
479
|
-
File.open('foo', 'w+')
|
480
|
-
assert_equal '', File.read('foo')
|
481
|
-
end
|
482
|
-
|
483
|
-
def test_file_in_append_write_only_raises_error_when_reading
|
484
|
-
FileUtils.touch('foo')
|
485
|
-
|
486
|
-
f = File.open('foo', 'a')
|
487
|
-
|
488
|
-
assert_raises(IOError) do
|
489
|
-
f.read
|
490
|
-
end
|
491
|
-
end
|
492
|
-
|
493
|
-
def test_can_read_files_once_written
|
494
|
-
path = 'file.txt'
|
495
|
-
File.open(path, 'w') do |f|
|
496
|
-
f.write 'Yatta!'
|
497
|
-
end
|
498
|
-
|
499
|
-
assert_equal 'Yatta!', File.read(path)
|
500
|
-
end
|
501
|
-
|
502
|
-
def test_file_read_accepts_hashes
|
503
|
-
path = 'file.txt'
|
504
|
-
File.open(path, 'w') do |f|
|
505
|
-
f.write 'Yatta!'
|
506
|
-
end
|
507
|
-
|
508
|
-
# nothing raised
|
509
|
-
File.read(path, mode: 'r:UTF-8:-')
|
510
|
-
end
|
511
|
-
|
512
|
-
def test_file_read_respects_args
|
513
|
-
path = 'file.txt'
|
514
|
-
File.open(path, 'w') do |f|
|
515
|
-
f.write 'Yatta!'
|
516
|
-
end
|
517
|
-
|
518
|
-
assert_equal 'Ya', File.read(path, 2)
|
519
|
-
assert_equal 'at', File.read(path, 2, 1)
|
520
|
-
assert_equal 'atta!', File.read(path, nil, 1)
|
521
|
-
end
|
522
|
-
|
523
|
-
def test_can_write_to_files
|
524
|
-
path = 'file.txt'
|
525
|
-
File.open(path, 'w') do |f|
|
526
|
-
f << 'Yada Yada'
|
527
|
-
end
|
528
|
-
assert_equal 'Yada Yada', File.read(path)
|
529
|
-
end
|
530
|
-
|
531
|
-
def test_raises_error_when_opening_with_binary_mode_only
|
532
|
-
assert_raises ArgumentError do
|
533
|
-
File.open('/foo', 'b')
|
534
|
-
end
|
535
|
-
end
|
536
|
-
|
537
|
-
def test_can_open_file_in_binary_mode
|
538
|
-
File.open('foo', 'wb') { |x| x << 'a' }
|
539
|
-
assert_equal 'a', File.read('foo')
|
540
|
-
end
|
541
|
-
|
542
|
-
def test_can_chunk_io_when_reading
|
543
|
-
FileUtils.mkdir_p '/path/to'
|
544
|
-
path = '/path/to/file.txt'
|
545
|
-
File.open(path, 'w') do |f|
|
546
|
-
f << 'Yada Yada'
|
547
|
-
end
|
548
|
-
file = File.new(path, 'r')
|
549
|
-
assert_equal 'Yada', file.read(4)
|
550
|
-
assert_equal ' Yada', file.read(5)
|
551
|
-
assert_equal '', file.read
|
552
|
-
file.rewind
|
553
|
-
assert_equal 'Yada Yada', file.read
|
554
|
-
end
|
555
|
-
|
556
|
-
def test_can_get_size_of_files
|
557
|
-
path = 'file.txt'
|
558
|
-
File.open(path, 'w') do |f|
|
559
|
-
f << 'Yada Yada'
|
560
|
-
end
|
561
|
-
assert_equal 9, File.size(path)
|
562
|
-
end
|
563
|
-
|
564
|
-
def test_can_get_correct_size_for_files_with_multibyte_characters
|
565
|
-
path = 'file.txt'
|
566
|
-
File.open(path, 'wb') do |f|
|
567
|
-
f << "Y\xC3\xA1da"
|
568
|
-
end
|
569
|
-
assert_equal 5, File.size(path)
|
570
|
-
end
|
571
|
-
|
572
|
-
def test_can_check_if_file_has_size?
|
573
|
-
path = 'file.txt'
|
574
|
-
File.open(path, 'w') do |f|
|
575
|
-
f << 'Yada Yada'
|
576
|
-
end
|
577
|
-
assert_equal 9, File.size?(path)
|
578
|
-
assert_nil File.size?('other.txt')
|
579
|
-
end
|
580
|
-
|
581
|
-
def test_can_check_size_of_empty_file
|
582
|
-
path = 'file.txt'
|
583
|
-
File.open(path, 'w') do |f|
|
584
|
-
f << ''
|
585
|
-
end
|
586
|
-
assert_nil File.size?('file.txt')
|
587
|
-
end
|
588
|
-
|
589
|
-
def test_zero_on_empty_file
|
590
|
-
path = 'file.txt'
|
591
|
-
File.open(path, 'w') do |f|
|
592
|
-
f << ''
|
593
|
-
end
|
594
|
-
assert_equal true, File.zero?(path)
|
595
|
-
end
|
596
|
-
|
597
|
-
def test_zero_on_non_empty_file
|
598
|
-
path = 'file.txt'
|
599
|
-
File.open(path, 'w') do |f|
|
600
|
-
f << 'Not empty'
|
601
|
-
end
|
602
|
-
assert_equal false, File.zero?(path)
|
603
|
-
end
|
604
|
-
|
605
|
-
def test_zero_on_non_existent_file
|
606
|
-
path = 'file_does_not_exist.txt'
|
607
|
-
assert_equal false, File.zero?(path)
|
608
|
-
end
|
609
|
-
|
610
|
-
def test_raises_error_on_mtime_if_file_does_not_exist
|
611
|
-
assert_raises Errno::ENOENT do
|
612
|
-
File.mtime('/path/to/file.txt')
|
613
|
-
end
|
614
|
-
end
|
615
|
-
|
616
|
-
if RUBY_VERSION >= '1.9'
|
617
|
-
def test_can_set_mtime_on_new_file_touch_with_param
|
618
|
-
time = Time.new(2002, 10, 31, 2, 2, 2, '+02:00')
|
619
|
-
FileUtils.touch('foo.txt', mtime: time)
|
620
|
-
|
621
|
-
assert_equal File.mtime('foo.txt'), time
|
622
|
-
end
|
623
|
-
|
624
|
-
def test_can_set_mtime_on_existing_file_touch_with_param
|
625
|
-
FileUtils.touch('foo.txt')
|
626
|
-
|
627
|
-
time = Time.new(2002, 10, 31, 2, 2, 2, '+02:00')
|
628
|
-
FileUtils.touch('foo.txt', mtime: time)
|
629
|
-
|
630
|
-
assert_equal File.mtime('foo.txt'), time
|
631
|
-
end
|
632
|
-
end
|
633
|
-
|
634
|
-
def test_can_return_mtime_on_existing_file
|
635
|
-
path = 'file.txt'
|
636
|
-
File.open(path, 'w') do |f|
|
637
|
-
f << ''
|
638
|
-
end
|
639
|
-
assert File.mtime('file.txt').is_a?(Time)
|
640
|
-
end
|
641
|
-
|
642
|
-
def test_raises_error_on_ctime_if_file_does_not_exist
|
643
|
-
assert_raises Errno::ENOENT do
|
644
|
-
File.ctime('file.txt')
|
645
|
-
end
|
646
|
-
end
|
647
|
-
|
648
|
-
def test_can_return_ctime_on_existing_file
|
649
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
650
|
-
assert File.ctime('foo').is_a?(Time)
|
651
|
-
end
|
652
|
-
|
653
|
-
def test_raises_error_on_atime_if_file_does_not_exist
|
654
|
-
assert_raises Errno::ENOENT do
|
655
|
-
File.atime('file.txt')
|
656
|
-
end
|
657
|
-
end
|
658
|
-
|
659
|
-
def test_can_return_atime_on_existing_file
|
660
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
661
|
-
assert File.atime('foo').is_a?(Time)
|
662
|
-
end
|
663
|
-
|
664
|
-
def test_ctime_mtime_and_atime_are_equal_for_new_files
|
665
|
-
FileUtils.touch('foo')
|
666
|
-
|
667
|
-
ctime = File.ctime('foo')
|
668
|
-
mtime = File.mtime('foo')
|
669
|
-
atime = File.atime('foo')
|
670
|
-
assert ctime.is_a?(Time)
|
671
|
-
assert mtime.is_a?(Time)
|
672
|
-
assert atime.is_a?(Time)
|
673
|
-
assert_equal ctime, mtime
|
674
|
-
assert_equal ctime, atime
|
675
|
-
|
676
|
-
File.open('foo', 'r') do |f|
|
677
|
-
assert_equal ctime, f.ctime
|
678
|
-
assert_equal mtime, f.mtime
|
679
|
-
assert_equal atime, f.atime
|
680
|
-
end
|
681
|
-
end
|
682
|
-
|
683
|
-
def test_ctime_mtime_and_atime_are_equal_for_new_directories
|
684
|
-
FileUtils.mkdir_p('foo')
|
685
|
-
ctime = File.ctime('foo')
|
686
|
-
mtime = File.mtime('foo')
|
687
|
-
atime = File.atime('foo')
|
688
|
-
assert ctime.is_a?(Time)
|
689
|
-
assert mtime.is_a?(Time)
|
690
|
-
assert atime.is_a?(Time)
|
691
|
-
assert_equal ctime, mtime
|
692
|
-
assert_equal ctime, atime
|
693
|
-
end
|
694
|
-
|
695
|
-
def test_file_ctime_is_equal_to_file_stat_ctime
|
696
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
697
|
-
assert_equal File.stat('foo').ctime, File.ctime('foo')
|
698
|
-
end
|
699
|
-
|
700
|
-
def test_directory_ctime_is_equal_to_directory_stat_ctime
|
701
|
-
FileUtils.mkdir_p('foo')
|
702
|
-
assert_equal File.stat('foo').ctime, File.ctime('foo')
|
703
|
-
end
|
704
|
-
|
705
|
-
def test_file_mtime_is_equal_to_file_stat_mtime
|
706
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
707
|
-
assert_equal File.stat('foo').mtime, File.mtime('foo')
|
708
|
-
end
|
709
|
-
|
710
|
-
def test_directory_mtime_is_equal_to_directory_stat_mtime
|
711
|
-
FileUtils.mkdir_p('foo')
|
712
|
-
assert_equal File.stat('foo').mtime, File.mtime('foo')
|
713
|
-
end
|
714
|
-
|
715
|
-
def test_file_atime_is_equal_to_file_stat_atime
|
716
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
717
|
-
assert_equal File.stat('foo').atime, File.atime('foo')
|
718
|
-
end
|
719
|
-
|
720
|
-
def test_directory_atime_is_equal_to_directory_stat_atime
|
721
|
-
FileUtils.mkdir_p('foo')
|
722
|
-
assert_equal File.stat('foo').atime, File.atime('foo')
|
723
|
-
end
|
724
|
-
|
725
|
-
def test_utime_raises_error_if_path_does_not_exist
|
726
|
-
assert_raises Errno::ENOENT do
|
727
|
-
File.utime(Time.now, Time.now, '/path/to/file.txt')
|
728
|
-
end
|
729
|
-
end
|
730
|
-
|
731
|
-
def test_can_call_utime_on_an_existing_file
|
732
|
-
time = Time.now - 300 # Not now
|
733
|
-
path = 'file.txt'
|
734
|
-
File.open(path, 'w') do |f|
|
735
|
-
f << ''
|
736
|
-
end
|
737
|
-
File.utime(time, time, path)
|
738
|
-
assert_equal time, File.mtime('file.txt')
|
739
|
-
assert_equal time, File.atime('file.txt')
|
740
|
-
end
|
741
|
-
|
742
|
-
def test_utime_returns_number_of_paths
|
743
|
-
path1, path2 = 'file.txt', 'another_file.txt'
|
744
|
-
[path1, path2].each do |path|
|
745
|
-
File.open(path, 'w') do |f|
|
746
|
-
f << ''
|
747
|
-
end
|
748
|
-
end
|
749
|
-
assert_equal 2, File.utime(Time.now, Time.now, path1, path2)
|
750
|
-
end
|
751
|
-
|
752
|
-
def test_file_a_time_updated_when_file_is_read
|
753
|
-
old_atime = Time.now - 300
|
754
|
-
|
755
|
-
path = 'file.txt'
|
756
|
-
File.open(path, 'w') do |f|
|
757
|
-
f << 'Hello'
|
758
|
-
end
|
759
|
-
|
760
|
-
File.utime(old_atime, File.mtime(path), path)
|
761
|
-
|
762
|
-
assert_equal File.atime(path), old_atime
|
763
|
-
File.read(path)
|
764
|
-
assert File.atime(path) != old_atime
|
765
|
-
end
|
766
|
-
|
767
|
-
def test_can_read_with_File_readlines
|
768
|
-
path = 'file.txt'
|
769
|
-
File.open(path, 'w') do |f|
|
770
|
-
f.puts 'Yatta!', 'Gatta!'
|
771
|
-
f.puts %w(woot toot)
|
772
|
-
end
|
773
|
-
|
774
|
-
assert_equal ["Yatta!\n", "Gatta!\n", "woot\n", "toot\n"], File.readlines(path)
|
775
|
-
end
|
776
|
-
|
777
|
-
def test_can_read_with_File_readlines_and_only_empty_lines
|
778
|
-
path = 'file.txt'
|
779
|
-
File.open(path, 'w') do |f|
|
780
|
-
f.write "\n"
|
781
|
-
end
|
782
|
-
|
783
|
-
assert_equal ["\n"], File.readlines(path)
|
784
|
-
end
|
785
|
-
|
786
|
-
def test_can_read_with_File_readlines_and_new_lines
|
787
|
-
path = 'file.txt'
|
788
|
-
File.open(path, 'w') do |f|
|
789
|
-
f.write "this\nis\na\ntest\n"
|
790
|
-
end
|
791
|
-
|
792
|
-
assert_equal ["this\n", "is\n", "a\n", "test\n"], File.readlines(path)
|
793
|
-
end
|
794
|
-
|
795
|
-
def test_File_close_disallows_further_access
|
796
|
-
path = 'file.txt'
|
797
|
-
file = File.open(path, 'w')
|
798
|
-
file.write 'Yada'
|
799
|
-
file.close
|
800
|
-
assert_raises IOError do
|
801
|
-
file.read
|
802
|
-
end
|
803
|
-
end
|
804
|
-
|
805
|
-
def test_File_close_disallows_further_writes
|
806
|
-
path = 'file.txt'
|
807
|
-
file = File.open(path, 'w')
|
808
|
-
file.write 'Yada'
|
809
|
-
file.close
|
810
|
-
assert_raises IOError do
|
811
|
-
file << 'foo'
|
812
|
-
end
|
813
|
-
end
|
814
|
-
|
815
|
-
def test_can_read_from_file_objects
|
816
|
-
path = 'file.txt'
|
817
|
-
File.open(path, 'w') do |f|
|
818
|
-
f.write 'Yatta!'
|
819
|
-
end
|
820
|
-
|
821
|
-
assert_equal 'Yatta!', File.new(path).read
|
822
|
-
end
|
823
|
-
|
824
|
-
if RUBY_VERSION >= '1.9'
|
825
|
-
def test_file_object_has_default_external_encoding
|
826
|
-
Encoding.default_external = 'UTF-8'
|
827
|
-
path = 'file.txt'
|
828
|
-
File.open(path, 'w') { |f| f.write 'Yatta!' }
|
829
|
-
assert_equal 'UTF-8', File.new(path).read.encoding.name
|
830
|
-
end
|
831
|
-
end
|
832
|
-
|
833
|
-
def test_file_object_initialization_with_mode_in_hash_parameter
|
834
|
-
File.open('file.txt', mode: 'w') { |f| f.write 'Yatta!' }
|
835
|
-
end
|
836
|
-
|
837
|
-
def test_file_object_initialization_with_brackets_in_filename
|
838
|
-
skip 'TODO'
|
839
|
-
|
840
|
-
filename = 'bracket[1](2).txt'
|
841
|
-
expected_contents = 'Yokudekimashita'
|
842
|
-
# nothing raised
|
843
|
-
File.open(filename, mode: 'w') { |f| f.write "#{expected_contents}" }
|
844
|
-
the_file = Dir['/*']
|
845
|
-
assert_equal the_file.length, 1
|
846
|
-
assert_equal the_file[0], "/#{filename}"
|
847
|
-
contents = File.open("/#{filename}").read
|
848
|
-
assert_equal contents, expected_contents
|
849
|
-
end
|
850
|
-
|
851
|
-
def test_file_object_initialization_with_utf_chars
|
852
|
-
filename = "\u65e5\u672c\u8a9e.txt"
|
853
|
-
expected_contents = 'Yokudekimashita'
|
854
|
-
# nothing raised
|
855
|
-
File.open(filename, mode: 'w') { |f| f.write "#{expected_contents}" }
|
856
|
-
contents = File.open("/#{filename}").read
|
857
|
-
assert_equal contents, expected_contents
|
858
|
-
end
|
859
|
-
|
860
|
-
def test_file_read_errors_appropriately
|
861
|
-
assert_raises Errno::ENOENT do
|
862
|
-
File.read('anything')
|
863
|
-
end
|
864
|
-
end
|
865
|
-
|
866
|
-
def test_file_read_errors_on_directory
|
867
|
-
FileUtils.mkdir_p('a_directory')
|
868
|
-
|
869
|
-
assert_raises Errno::EISDIR do
|
870
|
-
File.read('a_directory')
|
871
|
-
end
|
872
|
-
end
|
873
|
-
|
874
|
-
def test_knows_files_are_files
|
875
|
-
path = 'file.txt'
|
876
|
-
File.open(path, 'w') do |f|
|
877
|
-
f.write 'Yatta!'
|
878
|
-
end
|
879
|
-
|
880
|
-
assert File.file?(path)
|
881
|
-
end
|
882
|
-
|
883
|
-
def test_size_returns_size
|
884
|
-
first_file = 'first.txt'
|
885
|
-
File.open(first_file, 'w') do |f|
|
886
|
-
f.write '12345678'
|
887
|
-
end
|
888
|
-
|
889
|
-
assert_equal File.size?(first_file), 8
|
890
|
-
|
891
|
-
File.open(first_file, 'w') do |f|
|
892
|
-
f.write 'abcd'
|
893
|
-
end
|
894
|
-
|
895
|
-
assert_equal File.size?(first_file), 4
|
896
|
-
|
897
|
-
second_file = 'second.txt'
|
898
|
-
File.open(second_file, 'w') do |f|
|
899
|
-
f.write '1'
|
900
|
-
end
|
901
|
-
assert_equal File.size?(second_file), 1
|
902
|
-
end
|
903
|
-
|
904
|
-
def test_File_io_returns_self
|
905
|
-
f = File.open('foo', 'w')
|
906
|
-
assert_equal f, f.to_io
|
907
|
-
end
|
908
|
-
|
909
|
-
def test_File_to_i_is_alias_for_filno
|
910
|
-
f = File.open('foo', 'w')
|
911
|
-
assert_equal f.method(:to_i), f.method(:fileno)
|
912
|
-
end
|
913
|
-
|
914
|
-
def test_knows_symlink_files_are_files
|
915
|
-
path = 'file.txt'
|
916
|
-
File.open(path, 'w') do |f|
|
917
|
-
f.write 'Yatta!'
|
918
|
-
end
|
919
|
-
FileUtils.ln_s path, sympath = '/sympath'
|
920
|
-
|
921
|
-
assert File.file?(sympath)
|
922
|
-
end
|
923
|
-
|
924
|
-
def test_knows_non_existent_files_arent_files
|
925
|
-
assert_equal RealFile.file?('does/not/exist.txt'), File.file?('does/not/exist.txt')
|
926
|
-
end
|
927
|
-
|
928
|
-
def test_executable_returns_false_for_non_existent_files
|
929
|
-
refute File.executable?('/does/not/exist')
|
930
|
-
end
|
931
|
-
|
932
|
-
def test_can_chown_files
|
933
|
-
good = 'file.txt'
|
934
|
-
bad = 'nofile.txt'
|
935
|
-
File.open(good, 'w') { |f| f.write 'foo' }
|
936
|
-
username = Etc.getpwuid(Process.uid).name
|
937
|
-
groupname = Etc.getgrgid(Process.gid).name
|
938
|
-
|
939
|
-
out = FileUtils.chown(1337, 1338, good, verbose: true)
|
940
|
-
assert_equal [good], out
|
941
|
-
assert_equal File.stat(good).uid, 1337
|
942
|
-
assert_equal File.stat(good).gid, 1338
|
943
|
-
assert_raises(Errno::ENOENT) do
|
944
|
-
FileUtils.chown(username, groupname, bad, verbose: true)
|
945
|
-
end
|
946
|
-
|
947
|
-
assert_equal [good], FileUtils.chown(username, groupname, good)
|
948
|
-
assert_equal File.stat(good).uid, Process.uid
|
949
|
-
assert_equal File.stat(good).gid, Process.gid
|
950
|
-
assert_raises(Errno::ENOENT) do
|
951
|
-
FileUtils.chown(username, groupname, bad)
|
952
|
-
end
|
953
|
-
|
954
|
-
assert_equal [good], FileUtils.chown(username, groupname, [good])
|
955
|
-
assert_equal File.stat(good).uid, Process.uid
|
956
|
-
assert_equal File.stat(good).gid, Process.gid
|
957
|
-
assert_raises(Errno::ENOENT) do
|
958
|
-
FileUtils.chown(username, groupname, [good, bad])
|
959
|
-
end
|
960
|
-
|
961
|
-
# FileUtils.chown with nil user and nil group should not change anything
|
962
|
-
FileUtils.chown(username, groupname, good)
|
963
|
-
assert_equal File.stat(good).uid, Process.uid
|
964
|
-
assert_equal File.stat(good).gid, Process.gid
|
965
|
-
assert_equal [good], FileUtils.chown(nil, nil, [good])
|
966
|
-
assert_equal File.stat(good).uid, Process.uid
|
967
|
-
assert_equal File.stat(good).gid, Process.gid
|
968
|
-
assert_raises(Errno::ENOENT) do
|
969
|
-
FileUtils.chown(nil, nil, [good, bad])
|
970
|
-
end
|
971
|
-
end
|
972
|
-
|
973
|
-
def test_can_chown_R_files
|
974
|
-
username = Etc.getpwuid(Process.uid).name
|
975
|
-
groupname = Etc.getgrgid(Process.gid).name
|
976
|
-
FileUtils.mkdir_p '/path/'
|
977
|
-
File.open('/path/foo', 'w') { |f| f.write 'foo' }
|
978
|
-
File.open('/path/foobar', 'w') { |f| f.write 'foo' }
|
979
|
-
assert_equal ['/path'], FileUtils.chown_R(username, groupname, '/path')
|
980
|
-
%w(/path /path/foo /path/foobar).each do |f|
|
981
|
-
assert_equal File.stat(f).uid, Process.uid
|
982
|
-
assert_equal File.stat(f).gid, Process.gid
|
983
|
-
end
|
984
|
-
end
|
985
|
-
|
986
|
-
def test_can_chmod_files
|
987
|
-
good = 'file.txt'
|
988
|
-
bad = 'nofile.txt'
|
989
|
-
FileUtils.touch(good)
|
990
|
-
|
991
|
-
assert_equal [good], FileUtils.chmod(0600, good, verbose: true)
|
992
|
-
assert_equal File.stat(good).mode, 0100600
|
993
|
-
assert_equal File.executable?(good), false
|
994
|
-
assert_raises(Errno::ENOENT) do
|
995
|
-
FileUtils.chmod(0600, bad)
|
996
|
-
end
|
997
|
-
|
998
|
-
assert_equal [good], FileUtils.chmod(0666, good)
|
999
|
-
assert_equal File.stat(good).mode, 0100666
|
1000
|
-
assert_raises(Errno::ENOENT) do
|
1001
|
-
FileUtils.chmod(0666, bad)
|
1002
|
-
end
|
1003
|
-
|
1004
|
-
assert_equal [good], FileUtils.chmod(0644, [good])
|
1005
|
-
assert_equal File.stat(good).mode, 0100644
|
1006
|
-
assert_raises(Errno::ENOENT) do
|
1007
|
-
FileUtils.chmod(0644, bad)
|
1008
|
-
end
|
1009
|
-
|
1010
|
-
assert_equal [good], FileUtils.chmod(0744, [good])
|
1011
|
-
assert_equal File.executable?(good), true
|
1012
|
-
|
1013
|
-
# This behaviour is unimplemented, the spec below is only to show that it
|
1014
|
-
# is a deliberate YAGNI omission.
|
1015
|
-
assert_equal [good], FileUtils.chmod(0477, [good])
|
1016
|
-
assert_equal File.executable?(good), false
|
1017
|
-
end
|
1018
|
-
|
1019
|
-
def test_can_chmod_R_files
|
1020
|
-
FileUtils.mkdir_p '/path/sub'
|
1021
|
-
FileUtils.touch '/path/file1'
|
1022
|
-
FileUtils.touch '/path/sub/file2'
|
1023
|
-
|
1024
|
-
assert_equal ['/path'], FileUtils.chmod_R(0600, '/path')
|
1025
|
-
assert_equal File.stat('/path').mode, 0100600
|
1026
|
-
assert_equal File.stat('/path/file1').mode, 0100600
|
1027
|
-
assert_equal File.stat('/path/sub').mode, 0100600
|
1028
|
-
assert_equal File.stat('/path/sub/file2').mode, 0100600
|
1029
|
-
|
1030
|
-
FileUtils.mkdir_p '/path2'
|
1031
|
-
FileUtils.touch '/path2/hej'
|
1032
|
-
assert_equal ['/path2'], FileUtils.chmod_R(0600, '/path2')
|
1033
|
-
end
|
1034
|
-
|
1035
|
-
def test_dir_globs_paths
|
1036
|
-
FileUtils.mkdir_p '/path'
|
1037
|
-
File.open('/path/foo', 'w') { |f| f.write 'foo' }
|
1038
|
-
File.open('/path/foobar', 'w') { |f| f.write 'foo' }
|
1039
|
-
File.open('/path/.bar', 'w') { |f| f.write 'foo' }
|
1040
|
-
|
1041
|
-
FileUtils.mkdir_p '/path/bar'
|
1042
|
-
File.open('/path/bar/baz', 'w') { |f| f.write 'foo' }
|
1043
|
-
|
1044
|
-
FileUtils.cp_r '/path/bar', '/path/bar2'
|
1045
|
-
|
1046
|
-
assert_equal ['/path'], Dir['/path']
|
1047
|
-
assert_equal ['/path/.bar'], Dir['**/{.*}']
|
1048
|
-
assert_equal ['/path/.bar'], Dir['/path**/{.*}']
|
1049
|
-
assert_equal ['/path/.bar'], Dir['/path/{.*}']
|
1050
|
-
assert_equal %w( /path/bar /path/bar2 /path/foo /path/foobar ), Dir['/path/*']
|
1051
|
-
|
1052
|
-
assert_equal ['/path/bar/baz'], Dir['/path/bar/*']
|
1053
|
-
assert_equal ['/path/foo'], Dir['/path/foo']
|
1054
|
-
|
1055
|
-
assert_equal ['/path'], Dir['/path*']
|
1056
|
-
assert_equal ['/path/foo', '/path/foobar'], Dir['/p*h/foo*']
|
1057
|
-
assert_equal ['/path/foo', '/path/foobar'], Dir['/p??h/foo*']
|
1058
|
-
|
1059
|
-
assert_equal ['/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/path/**/*']
|
1060
|
-
assert_equal ['/path', '/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar', '/tmp'], Dir['/**/*']
|
1061
|
-
|
1062
|
-
assert_equal ['/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/path/**/*']
|
1063
|
-
assert_equal ['/path/bar/baz'], Dir['/path/bar/**/*']
|
1064
|
-
|
1065
|
-
assert_equal ['/path/bar/baz', '/path/bar2/baz'], Dir['/path/bar/**/*', '/path/bar2/**/*']
|
1066
|
-
assert_equal ['/path/bar/baz', '/path/bar2/baz', '/path/bar/baz'], Dir['/path/ba*/**/*', '/path/bar/**/*']
|
1067
|
-
|
1068
|
-
FileUtils.cp_r '/path', '/otherpath'
|
1069
|
-
|
1070
|
-
assert_equal %w( /otherpath/foo /otherpath/foobar /path/foo /path/foobar ), Dir['/*/foo*']
|
1071
|
-
|
1072
|
-
assert_equal ['/path/bar', '/path/foo'], Dir['/path/{foo,bar}']
|
1073
|
-
|
1074
|
-
assert_equal ['/path/bar', '/path/bar2'], Dir['/path/bar{2,}']
|
1075
|
-
|
1076
|
-
assert_equal ['/path/bar', '/path/foo'], Dir['{/nowhere,/path/{foo,bar}}']
|
1077
|
-
assert_equal ['/path/bar', '/path/foo'], Dir['{/nowhere,/path/{foo,{bar,bar2/baz}}}']
|
1078
|
-
|
1079
|
-
Dir.chdir '/path' do
|
1080
|
-
assert_equal ['foo'], Dir['foo']
|
1081
|
-
end
|
1082
|
-
end
|
1083
|
-
|
1084
|
-
def test_file_utils_cp_allows_verbose_option
|
1085
|
-
File.open('foo', 'w') { |f| f << 'TEST' }
|
1086
|
-
assert_equal "cp foo bar\n", capture_stderr { FileUtils.cp 'foo', 'bar', verbose: true }
|
1087
|
-
end
|
1088
|
-
|
1089
|
-
def test_file_utils_cp_allows_noop_option
|
1090
|
-
File.open('foo', 'w') { |f| f << 'TEST' }
|
1091
|
-
FileUtils.cp 'foo', 'bar', noop: true
|
1092
|
-
refute File.exist?('bar'), 'does not actually copy'
|
1093
|
-
end
|
1094
|
-
|
1095
|
-
def test_file_utils_cp_raises_on_invalid_option
|
1096
|
-
assert_raises ArgumentError do
|
1097
|
-
FileUtils.cp 'foo', 'bar', whatisthis: "I don't know"
|
1098
|
-
end
|
1099
|
-
end
|
1100
|
-
|
1101
|
-
def test_file_utils_cp_r_allows_verbose_option
|
1102
|
-
FileUtils.touch '/foo'
|
1103
|
-
assert_equal "cp -r /foo /bar\n", capture_stderr { FileUtils.cp_r '/foo', '/bar', verbose: true }
|
1104
|
-
end
|
1105
|
-
|
1106
|
-
def test_file_utils_cp_r_allows_noop_option
|
1107
|
-
FileUtils.touch '/foo'
|
1108
|
-
FileUtils.cp_r '/foo', '/bar', noop: true
|
1109
|
-
refute File.exist?('/bar'), 'does not actually copy'
|
1110
|
-
end
|
1111
|
-
|
1112
|
-
def test_dir_glob_handles_root
|
1113
|
-
FileUtils.mkdir_p '/path'
|
1114
|
-
|
1115
|
-
# this fails. the root dir should be named '/' but it is '.'
|
1116
|
-
assert_equal ['/'], Dir['/']
|
1117
|
-
end
|
1118
|
-
|
1119
|
-
def test_dir_glob_takes_optional_flags
|
1120
|
-
FileUtils.touch '/foo'
|
1121
|
-
assert_equal Dir.glob('/*', 0), ['/foo', '/tmp']
|
1122
|
-
end
|
1123
|
-
|
1124
|
-
def test_dir_glob_handles_recursive_globs
|
1125
|
-
FileUtils.mkdir_p '/one/two/three'
|
1126
|
-
File.open('/one/two/three/four.rb', 'w')
|
1127
|
-
File.open('/one/five.rb', 'w')
|
1128
|
-
assert_equal ['/one/five.rb', '/one/two/three/four.rb'], Dir['/one/**/*.rb']
|
1129
|
-
assert_equal ['/one/two'], Dir['/one/**/two']
|
1130
|
-
assert_equal ['/one/two/three'], Dir['/one/**/three']
|
1131
|
-
end
|
1132
|
-
|
1133
|
-
def test_dir_recursive_glob_ending_in_wildcards_returns_both_files_and_dirs
|
1134
|
-
FileUtils.mkdir_p '/one/two/three'
|
1135
|
-
File.open('/one/two/three/four.rb', 'w')
|
1136
|
-
File.open('/one/five.rb', 'w')
|
1137
|
-
assert_equal ['/one/five.rb', '/one/two', '/one/two/three', '/one/two/three/four.rb'], Dir['/one/**/*']
|
1138
|
-
assert_equal ['/one/five.rb', '/one/two'], Dir['/one/**']
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
def test_dir_glob_ending_in_group_and_wildcard
|
1142
|
-
FileUtils.mkdir_p '/tmp/python-3.4.1'
|
1143
|
-
FileUtils.mkdir_p '/tmp/python-2.7.8'
|
1144
|
-
assert_equal ['/tmp/python-2.7.8', '/tmp/python-3.4.1'], Dir.glob('/tmp/python-[0-9]*')
|
1145
|
-
end
|
1146
|
-
|
1147
|
-
def test_dir_glob_with_block
|
1148
|
-
FileUtils.touch('foo')
|
1149
|
-
FileUtils.touch('bar')
|
1150
|
-
|
1151
|
-
yielded = []
|
1152
|
-
Dir.glob('*') { |file| yielded << file }
|
1153
|
-
|
1154
|
-
assert_equal 3, yielded.size
|
1155
|
-
end
|
1156
|
-
|
1157
|
-
def test_copy_with_subdirectory
|
1158
|
-
FileUtils.mkdir_p '/one/two/three/'
|
1159
|
-
FileUtils.mkdir_p '/onebis/two/three/'
|
1160
|
-
FileUtils.touch '/one/two/three/foo'
|
1161
|
-
Dir.glob('/one/two/three/*') do |hook|
|
1162
|
-
FileUtils.cp(hook, '/onebis/two/three/')
|
1163
|
-
end
|
1164
|
-
assert_equal ['/onebis/two/three/foo'], Dir['/onebis/two/three/*']
|
1165
|
-
end
|
1166
|
-
|
1167
|
-
if RUBY_VERSION >= '1.9'
|
1168
|
-
def test_dir_home
|
1169
|
-
assert_equal RealDir.home, Dir.home
|
1170
|
-
end
|
1171
|
-
end
|
1172
|
-
|
1173
|
-
def test_should_report_pos_as_0_when_opening
|
1174
|
-
File.open('foo', 'w') do |f|
|
1175
|
-
f << 'foobar'
|
1176
|
-
f.rewind
|
1177
|
-
|
1178
|
-
assert_equal 0, f.pos
|
1179
|
-
end
|
1180
|
-
end
|
1181
|
-
|
1182
|
-
def test_should_report_pos_as_1_when_seeking_one_char
|
1183
|
-
File.open('foo', 'w') do |f|
|
1184
|
-
f << 'foobar'
|
1185
|
-
|
1186
|
-
f.rewind
|
1187
|
-
f.seek(1)
|
1188
|
-
|
1189
|
-
assert_equal 1, f.pos
|
1190
|
-
end
|
1191
|
-
end
|
1192
|
-
|
1193
|
-
def test_should_set_pos
|
1194
|
-
File.open('foo', 'w') do |f|
|
1195
|
-
f << 'foo'
|
1196
|
-
end
|
1197
|
-
|
1198
|
-
fp = File.open('foo', 'r')
|
1199
|
-
fp.pos = 1
|
1200
|
-
|
1201
|
-
assert_equal 1, fp.pos
|
1202
|
-
end
|
1203
|
-
|
1204
|
-
def test_should_set_pos_with_tell_method
|
1205
|
-
File.open('foo', 'w') do |f|
|
1206
|
-
f << 'foo'
|
1207
|
-
end
|
1208
|
-
|
1209
|
-
fp = File.open('foo', 'r')
|
1210
|
-
fp.tell = 1
|
1211
|
-
|
1212
|
-
assert_equal 1, fp.pos
|
1213
|
-
end
|
1214
|
-
|
1215
|
-
OMITTED_FILE_METHODS = [
|
1216
|
-
# omit methods from io/console
|
1217
|
-
:raw, :raw!, :cooked, :cooked!,
|
1218
|
-
:echo?, :echo=, :noecho,
|
1219
|
-
:winsize, :winsize=,
|
1220
|
-
:getch,
|
1221
|
-
:iflush, :ioflush, :oflush,
|
1222
|
-
:pathconf
|
1223
|
-
]
|
1224
|
-
|
1225
|
-
def test_every_method_in_file_is_in_fake_fs_file
|
1226
|
-
(RealFile.instance_methods - OMITTED_FILE_METHODS).each do |method_name|
|
1227
|
-
assert File.instance_methods.include?(method_name), "#{method_name} method is not available in File :("
|
1228
|
-
end
|
1229
|
-
end
|
1230
|
-
|
1231
|
-
def test_file_should_not_respond_to_string_io_unique_methods
|
1232
|
-
uniq_string_io_methods = StringIO.instance_methods - RealFile.instance_methods
|
1233
|
-
uniq_string_io_methods.each do |method_name|
|
1234
|
-
refute File.instance_methods.include?(method_name), "File responds to #{method_name}"
|
1235
|
-
end
|
1236
|
-
end
|
1237
|
-
|
1238
|
-
def test_does_not_remove_methods_from_stringio
|
1239
|
-
stringio = StringIO.new('foo')
|
1240
|
-
assert stringio.respond_to?(:size)
|
1241
|
-
end
|
1242
|
-
|
1243
|
-
def test_is_not_a_stringio
|
1244
|
-
File.open('foo', 'w') do |f|
|
1245
|
-
refute f.is_a?(StringIO), 'File is not a StringIO'
|
1246
|
-
end
|
1247
|
-
end
|
1248
|
-
|
1249
|
-
def test_chdir_changes_directories_like_a_boss
|
1250
|
-
# I know memes!
|
1251
|
-
FileUtils.mkdir_p '/path'
|
1252
|
-
assert_equal '/', FakeFS::FileSystem.fs.name
|
1253
|
-
assert_equal [], Dir.glob('/path/*')
|
1254
|
-
Dir.chdir '/path' do
|
1255
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1256
|
-
File.open('foobar', 'w') { |f| f.write 'foo' }
|
1257
|
-
end
|
1258
|
-
|
1259
|
-
assert_equal '/', FakeFS::FileSystem.fs.name
|
1260
|
-
assert_equal(['/path/foo', '/path/foobar'], Dir.glob('/path/*').sort)
|
1261
|
-
|
1262
|
-
c = nil
|
1263
|
-
Dir.chdir '/path' do
|
1264
|
-
c = File.open('foo', 'r') { |f| f.read }
|
1265
|
-
end
|
1266
|
-
|
1267
|
-
assert_equal 'foo', c
|
1268
|
-
end
|
1269
|
-
|
1270
|
-
def test_chdir_shouldnt_keep_us_from_absolute_paths
|
1271
|
-
FileUtils.mkdir_p '/path'
|
1272
|
-
|
1273
|
-
Dir.chdir '/path' do
|
1274
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1275
|
-
File.open('/foobar', 'w') { |f| f.write 'foo' }
|
1276
|
-
end
|
1277
|
-
assert_equal ['/path/foo'], Dir.glob('/path/*').sort
|
1278
|
-
assert_equal ['/foobar', '/path', '/tmp'], Dir.glob('/*').sort
|
1279
|
-
|
1280
|
-
Dir.chdir '/path' do
|
1281
|
-
FileUtils.rm('foo')
|
1282
|
-
FileUtils.rm('/foobar')
|
1283
|
-
end
|
1284
|
-
|
1285
|
-
assert_equal [], Dir.glob('/path/*').sort
|
1286
|
-
assert_equal ['/path', '/tmp'], Dir.glob('/*').sort
|
1287
|
-
end
|
1288
|
-
|
1289
|
-
def test_chdir_should_be_nestable
|
1290
|
-
FileUtils.mkdir_p '/path/me'
|
1291
|
-
Dir.chdir '/path' do
|
1292
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1293
|
-
Dir.chdir 'me' do
|
1294
|
-
File.open('foobar', 'w') { |f| f.write 'foo' }
|
1295
|
-
end
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
assert_equal ['/path/foo', '/path/me'], Dir.glob('/path/*').sort
|
1299
|
-
assert_equal ['/path/me/foobar'], Dir.glob('/path/me/*').sort
|
1300
|
-
end
|
1301
|
-
|
1302
|
-
def test_chdir_should_be_nestable_with_absolute_paths
|
1303
|
-
FileUtils.mkdir_p '/path/me'
|
1304
|
-
Dir.chdir '/path' do
|
1305
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1306
|
-
Dir.chdir '/path/me' do
|
1307
|
-
File.open('foobar', 'w') { |f| f.write 'foo' }
|
1308
|
-
end
|
1309
|
-
end
|
1310
|
-
|
1311
|
-
assert_equal ['/path/foo', '/path/me'], Dir.glob('/path/*').sort
|
1312
|
-
assert_equal ['/path/me/foobar'], Dir.glob('/path/me/*').sort
|
1313
|
-
end
|
1314
|
-
|
1315
|
-
def test_chdir_should_flop_over_and_die_if_the_dir_doesnt_exist
|
1316
|
-
assert_raises(Errno::ENOENT) do
|
1317
|
-
Dir.chdir('/nope') do
|
1318
|
-
1
|
1319
|
-
end
|
1320
|
-
end
|
1321
|
-
end
|
1322
|
-
|
1323
|
-
def test_chdir_shouldnt_lose_state_because_of_errors
|
1324
|
-
FileUtils.mkdir_p '/path'
|
1325
|
-
|
1326
|
-
Dir.chdir '/path' do
|
1327
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1328
|
-
File.open('foobar', 'w') { |f| f.write 'foo' }
|
1329
|
-
end
|
1330
|
-
|
1331
|
-
begin
|
1332
|
-
Dir.chdir('/path') do
|
1333
|
-
fail Errno::ENOENT
|
1334
|
-
end
|
1335
|
-
rescue Errno::ENOENT => e # hardcore
|
1336
|
-
'Nothing to do'
|
1337
|
-
end
|
1338
|
-
|
1339
|
-
Dir.chdir('/path') do
|
1340
|
-
begin
|
1341
|
-
Dir.chdir('nope') {}
|
1342
|
-
rescue Errno::ENOENT => e
|
1343
|
-
'Nothing to do'
|
1344
|
-
end
|
1345
|
-
|
1346
|
-
assert_equal ['/', '/path'], FakeFS::FileSystem.dir_levels
|
1347
|
-
end
|
1348
|
-
|
1349
|
-
assert_equal(['/path/foo', '/path/foobar'], Dir.glob('/path/*').sort)
|
1350
|
-
end
|
1351
|
-
|
1352
|
-
def test_chdir_with_no_block_is_awesome
|
1353
|
-
FileUtils.mkdir_p '/path'
|
1354
|
-
Dir.chdir('/path')
|
1355
|
-
FileUtils.mkdir_p 'subdir'
|
1356
|
-
assert_equal ['subdir'], Dir.glob('*')
|
1357
|
-
Dir.chdir('subdir')
|
1358
|
-
File.open('foo', 'w') { |f| f.write 'foo' }
|
1359
|
-
assert_equal ['foo'], Dir.glob('*')
|
1360
|
-
|
1361
|
-
assert_raises(Errno::ENOENT) do
|
1362
|
-
Dir.chdir('subsubdir')
|
1363
|
-
end
|
1364
|
-
|
1365
|
-
assert_equal ['foo'], Dir.glob('*')
|
1366
|
-
end
|
1367
|
-
|
1368
|
-
def test_current_dir_reflected_by_pwd
|
1369
|
-
FileUtils.mkdir_p '/path'
|
1370
|
-
Dir.chdir('/path')
|
1371
|
-
|
1372
|
-
assert_equal '/path', Dir.pwd
|
1373
|
-
assert_equal '/path', Dir.getwd
|
1374
|
-
|
1375
|
-
FileUtils.mkdir_p 'subdir'
|
1376
|
-
Dir.chdir('subdir')
|
1377
|
-
|
1378
|
-
assert_equal '/path/subdir', Dir.pwd
|
1379
|
-
assert_equal '/path/subdir', Dir.getwd
|
1380
|
-
end
|
1381
|
-
|
1382
|
-
def test_current_dir_reflected_by_expand_path_with_relative_paths
|
1383
|
-
FileUtils.mkdir_p '/path'
|
1384
|
-
Dir.chdir '/path'
|
1385
|
-
|
1386
|
-
assert_equal '/path', File.expand_path('.')
|
1387
|
-
assert_equal '/path/foo', File.expand_path('foo')
|
1388
|
-
|
1389
|
-
FileUtils.mkdir_p 'subdir'
|
1390
|
-
Dir.chdir 'subdir'
|
1391
|
-
|
1392
|
-
assert_equal '/path/subdir', File.expand_path('.')
|
1393
|
-
assert_equal '/path/subdir/foo', File.expand_path('foo')
|
1394
|
-
end
|
1395
|
-
|
1396
|
-
def test_expand_path_with_parent_dir
|
1397
|
-
FakeFS.deactivate!
|
1398
|
-
real = File.expand_path('../other.file', __FILE__)
|
1399
|
-
FakeFS.activate!
|
1400
|
-
fake = File.expand_path('../other.file', __FILE__)
|
1401
|
-
assert_equal real, fake
|
1402
|
-
end
|
1403
|
-
|
1404
|
-
def test_expand_path_works_with_absolute_paths
|
1405
|
-
FakeFS.deactivate!
|
1406
|
-
home = File.expand_path('~')
|
1407
|
-
FakeFS.activate!
|
1408
|
-
assert_equal "#{home}/dir/subdir", File.expand_path('subdir', '~/dir')
|
1409
|
-
assert_equal '/somewhere/else', File.expand_path('else', '/somewhere')
|
1410
|
-
end
|
1411
|
-
|
1412
|
-
def test_file_open_defaults_to_read
|
1413
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1414
|
-
assert_equal 'bar', File.open('foo') { |f| f.read }
|
1415
|
-
end
|
1416
|
-
|
1417
|
-
def test_flush_exists_on_file
|
1418
|
-
r = File.open('foo', 'w') do |f|
|
1419
|
-
f.write 'bar'
|
1420
|
-
f.flush
|
1421
|
-
end
|
1422
|
-
assert_equal 'foo', r.path
|
1423
|
-
end
|
1424
|
-
|
1425
|
-
def test_mv_should_raise_error_on_missing_file
|
1426
|
-
assert_raises(Errno::ENOENT) do
|
1427
|
-
FileUtils.mv 'blafgag', 'foo'
|
1428
|
-
end
|
1429
|
-
exception = assert_raises(Errno::ENOENT) do
|
1430
|
-
FileUtils.mv %w(foo bar), 'destdir'
|
1431
|
-
end
|
1432
|
-
assert_equal 'No such file or directory - foo', exception.message
|
1433
|
-
end
|
1434
|
-
|
1435
|
-
def test_mv_actually_works
|
1436
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1437
|
-
FileUtils.mv 'foo', 'baz'
|
1438
|
-
assert_equal 'bar', File.open('baz') { |f| f.read }
|
1439
|
-
end
|
1440
|
-
|
1441
|
-
def test_mv_overwrites_existing_files
|
1442
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1443
|
-
File.open('baz', 'w') { |f| f.write 'qux' }
|
1444
|
-
FileUtils.mv 'foo', 'baz'
|
1445
|
-
assert_equal 'bar', File.read('baz')
|
1446
|
-
end
|
1447
|
-
|
1448
|
-
def test_mv_works_with_options
|
1449
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1450
|
-
FileUtils.mv 'foo', 'baz', force: true
|
1451
|
-
assert_equal('bar', File.open('baz') { |f| f.read })
|
1452
|
-
end
|
1453
|
-
|
1454
|
-
def test_mv_to_directory
|
1455
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1456
|
-
FileUtils.mkdir_p 'destdir'
|
1457
|
-
FileUtils.mv 'foo', 'destdir'
|
1458
|
-
assert_equal('bar', File.open('destdir/foo') { |f| f.read })
|
1459
|
-
assert File.directory?('destdir')
|
1460
|
-
end
|
1461
|
-
|
1462
|
-
def test_mv_array
|
1463
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1464
|
-
File.open('baz', 'w') { |f| f.write 'binky' }
|
1465
|
-
FileUtils.mkdir_p 'destdir'
|
1466
|
-
FileUtils.mv %w(foo baz), 'destdir'
|
1467
|
-
assert_equal('bar', File.open('destdir/foo') { |f| f.read })
|
1468
|
-
assert_equal('binky', File.open('destdir/baz') { |f| f.read })
|
1469
|
-
end
|
1470
|
-
|
1471
|
-
def test_mv_accepts_verbose_option
|
1472
|
-
FileUtils.touch 'foo'
|
1473
|
-
assert_equal "mv foo bar\n", capture_stderr { FileUtils.mv 'foo', 'bar', verbose: true }
|
1474
|
-
end
|
1475
|
-
|
1476
|
-
def test_mv_accepts_noop_option
|
1477
|
-
FileUtils.touch 'foo'
|
1478
|
-
FileUtils.mv 'foo', 'bar', noop: true
|
1479
|
-
assert File.exist?('foo'), 'does not remove src'
|
1480
|
-
refute File.exist?('bar'), 'does not create target'
|
1481
|
-
end
|
1482
|
-
|
1483
|
-
def test_mv_raises_when_moving_file_onto_directory
|
1484
|
-
FileUtils.mkdir_p 'dir/stuff'
|
1485
|
-
FileUtils.touch 'stuff'
|
1486
|
-
assert_raises Errno::EEXIST do
|
1487
|
-
FileUtils.mv 'stuff', 'dir'
|
1488
|
-
end
|
1489
|
-
end
|
1490
|
-
|
1491
|
-
def test_mv_raises_when_moving_to_non_existent_directory
|
1492
|
-
FileUtils.touch 'stuff'
|
1493
|
-
assert_raises Errno::ENOENT do
|
1494
|
-
FileUtils.mv 'stuff', '/this/path/is/not/here'
|
1495
|
-
end
|
1496
|
-
end
|
1497
|
-
|
1498
|
-
def test_mv_ignores_failures_when_using_force
|
1499
|
-
FileUtils.mkdir_p 'dir/stuff'
|
1500
|
-
FileUtils.touch %w(stuff other)
|
1501
|
-
FileUtils.mv %w(stuff other), 'dir', force: true
|
1502
|
-
assert File.exist?('stuff'), 'failed move remains where it was'
|
1503
|
-
assert File.exist?('dir/other'), 'successful one is moved'
|
1504
|
-
refute File.exist?('other'), 'successful one is moved'
|
1505
|
-
|
1506
|
-
FileUtils.mv 'stuff', '/this/path/is/not/here', force: true
|
1507
|
-
assert File.exist?('stuff'), 'failed move remains where it was'
|
1508
|
-
refute File.exist?('/this/path/is/not/here'), 'nothing is created for a failed move'
|
1509
|
-
end
|
1510
|
-
|
1511
|
-
def test_cp_actually_works
|
1512
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1513
|
-
FileUtils.cp('foo', 'baz')
|
1514
|
-
assert_equal 'bar', File.read('baz')
|
1515
|
-
end
|
1516
|
-
|
1517
|
-
def test_cp_file_into_dir
|
1518
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1519
|
-
FileUtils.mkdir_p 'baz'
|
1520
|
-
|
1521
|
-
FileUtils.cp('foo', 'baz')
|
1522
|
-
assert_equal 'bar', File.read('baz/foo')
|
1523
|
-
end
|
1524
|
-
|
1525
|
-
def test_cp_array_of_files_into_directory
|
1526
|
-
File.open('foo', 'w') { |f| f.write 'footext' }
|
1527
|
-
File.open('bar', 'w') { |f| f.write 'bartext' }
|
1528
|
-
FileUtils.mkdir_p 'destdir'
|
1529
|
-
FileUtils.cp(%w(foo bar), 'destdir')
|
1530
|
-
|
1531
|
-
assert_equal 'footext', File.read('destdir/foo')
|
1532
|
-
assert_equal 'bartext', File.read('destdir/bar')
|
1533
|
-
end
|
1534
|
-
|
1535
|
-
def test_cp_fails_on_array_of_files_into_non_directory
|
1536
|
-
File.open('foo', 'w') { |f| f.write 'footext' }
|
1537
|
-
|
1538
|
-
exception = assert_raises(Errno::ENOTDIR) do
|
1539
|
-
FileUtils.cp(%w(foo), 'baz')
|
1540
|
-
end
|
1541
|
-
assert_equal 'Not a directory - baz', exception.to_s
|
1542
|
-
end
|
1543
|
-
|
1544
|
-
def test_cp_overwrites_dest_file
|
1545
|
-
File.open('foo', 'w') { |f| f.write 'FOO' }
|
1546
|
-
File.open('bar', 'w') { |f| f.write 'BAR' }
|
1547
|
-
|
1548
|
-
FileUtils.cp('foo', 'bar')
|
1549
|
-
assert_equal 'FOO', File.read('bar')
|
1550
|
-
end
|
1551
|
-
|
1552
|
-
def test_cp_fails_on_no_source
|
1553
|
-
assert_raises Errno::ENOENT do
|
1554
|
-
FileUtils.cp('foo', 'baz')
|
1555
|
-
end
|
1556
|
-
end
|
1557
|
-
|
1558
|
-
def test_cp_fails_on_directory_copy
|
1559
|
-
FileUtils.mkdir_p 'baz'
|
1560
|
-
|
1561
|
-
assert_raises Errno::EISDIR do
|
1562
|
-
FileUtils.cp('baz', 'bar')
|
1563
|
-
end
|
1564
|
-
end
|
1565
|
-
|
1566
|
-
def test_copy_file_works
|
1567
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1568
|
-
FileUtils.copy_file('foo', 'baz', :ignore_param_1, :ignore_param_2)
|
1569
|
-
assert_equal 'bar', File.read('baz')
|
1570
|
-
end
|
1571
|
-
|
1572
|
-
def test_cp_r_doesnt_tangle_files_together
|
1573
|
-
File.open('foo', 'w') { |f| f.write 'bar' }
|
1574
|
-
FileUtils.cp_r('foo', 'baz')
|
1575
|
-
File.open('baz', 'w') { |f| f.write 'quux' }
|
1576
|
-
assert_equal 'bar', File.open('foo') { |f| f.read }
|
1577
|
-
end
|
1578
|
-
|
1579
|
-
def test_cp_r_should_raise_error_on_missing_file
|
1580
|
-
# Yes, this error sucks, but it conforms to the original Ruby
|
1581
|
-
# method.
|
1582
|
-
assert_raises(RuntimeError) do
|
1583
|
-
FileUtils.cp_r 'blafgag', 'foo'
|
1584
|
-
end
|
1585
|
-
end
|
1586
|
-
|
1587
|
-
def test_cp_r_handles_copying_directories
|
1588
|
-
FileUtils.mkdir_p 'subdir'
|
1589
|
-
Dir.chdir('subdir') { File.open('foo', 'w') { |f| f.write 'footext' } }
|
1590
|
-
|
1591
|
-
FileUtils.mkdir_p 'baz'
|
1592
|
-
|
1593
|
-
# To a previously uncreated directory
|
1594
|
-
FileUtils.cp_r('subdir', 'quux')
|
1595
|
-
assert_equal 'footext', File.open('quux/foo') { |f| f.read }
|
1596
|
-
|
1597
|
-
# To a directory that already exists
|
1598
|
-
FileUtils.cp_r('subdir', 'baz')
|
1599
|
-
assert_equal 'footext', File.open('baz/subdir/foo') { |f| f.read }
|
1600
|
-
|
1601
|
-
# To a subdirectory of a directory that does not exist
|
1602
|
-
assert_raises(Errno::ENOENT) do
|
1603
|
-
FileUtils.cp_r('subdir', 'nope/something')
|
1604
|
-
end
|
1605
|
-
end
|
1606
|
-
|
1607
|
-
def test_cp_r_array_of_files
|
1608
|
-
FileUtils.mkdir_p 'subdir'
|
1609
|
-
File.open('foo', 'w') { |f| f.write 'footext' }
|
1610
|
-
File.open('bar', 'w') { |f| f.write 'bartext' }
|
1611
|
-
FileUtils.cp_r(%w(foo bar), 'subdir')
|
1612
|
-
|
1613
|
-
assert_equal 'footext', File.open('subdir/foo') { |f| f.read }
|
1614
|
-
assert_equal 'bartext', File.open('subdir/bar') { |f| f.read }
|
1615
|
-
end
|
1616
|
-
|
1617
|
-
def test_cp_r_array_of_directories
|
1618
|
-
%w(foo bar subdir).each { |d| FileUtils.mkdir_p d }
|
1619
|
-
File.open('foo/baz', 'w') { |f| f.write 'baztext' }
|
1620
|
-
File.open('bar/quux', 'w') { |f| f.write 'quuxtext' }
|
1621
|
-
|
1622
|
-
FileUtils.cp_r(%w(foo bar), 'subdir')
|
1623
|
-
assert_equal 'baztext', File.open('subdir/foo/baz') { |f| f.read }
|
1624
|
-
assert_equal 'quuxtext', File.open('subdir/bar/quux') { |f| f.read }
|
1625
|
-
end
|
1626
|
-
|
1627
|
-
def test_cp_r_only_copies_into_directories
|
1628
|
-
FileUtils.mkdir_p 'subdir'
|
1629
|
-
Dir.chdir('subdir') { File.open('foo', 'w') { |f| f.write 'footext' } }
|
1630
|
-
|
1631
|
-
File.open('bar', 'w') { |f| f.write 'bartext' }
|
1632
|
-
|
1633
|
-
assert_raises(Errno::EEXIST) do
|
1634
|
-
FileUtils.cp_r 'subdir', 'bar'
|
1635
|
-
end
|
1636
|
-
|
1637
|
-
FileUtils.mkdir_p 'otherdir'
|
1638
|
-
FileUtils.ln_s 'otherdir', 'symdir'
|
1639
|
-
|
1640
|
-
FileUtils.cp_r 'subdir', 'symdir'
|
1641
|
-
assert_equal 'footext', File.open('symdir/subdir/foo') { |f| f.read }
|
1642
|
-
end
|
1643
|
-
|
1644
|
-
def test_cp_r_sets_parent_correctly
|
1645
|
-
FileUtils.mkdir_p '/path/foo'
|
1646
|
-
File.open('/path/foo/bar', 'w') { |f| f.write 'foo' }
|
1647
|
-
File.open('/path/foo/baz', 'w') { |f| f.write 'foo' }
|
1648
|
-
|
1649
|
-
FileUtils.cp_r '/path/foo', '/path/bar'
|
1650
|
-
|
1651
|
-
assert File.exist?('/path/bar/baz')
|
1652
|
-
FileUtils.rm_rf '/path/bar/baz'
|
1653
|
-
assert_equal %w( /path/bar/bar ), Dir['/path/bar/*']
|
1654
|
-
end
|
1655
|
-
|
1656
|
-
def test_clone_clones_normal_files
|
1657
|
-
act_on_real_fs do
|
1658
|
-
File.open(real_file_sandbox('foo'), 'w') do |f|
|
1659
|
-
f.write 'bar'
|
1660
|
-
end
|
1661
|
-
|
1662
|
-
assert RealFile.file?(real_file_sandbox('foo'))
|
1663
|
-
assert File.file?(real_file_sandbox('foo'))
|
1664
|
-
end
|
1665
|
-
|
1666
|
-
assert RealFile.file?(real_file_sandbox('foo'))
|
1667
|
-
|
1668
|
-
refute File.exist?(real_file_sandbox('foo'))
|
1669
|
-
FakeFS::FileSystem.clone(real_file_sandbox('foo'))
|
1670
|
-
assert_equal 'bar', File.open(real_file_sandbox('foo')) { |f| f.read }
|
1671
|
-
end
|
1672
|
-
|
1673
|
-
def test_clone_clones_directories
|
1674
|
-
act_on_real_fs { FileUtils.mkdir_p(real_file_sandbox('subdir')) }
|
1675
|
-
|
1676
|
-
FakeFS::FileSystem.clone(real_file_sandbox('subdir'))
|
1677
|
-
|
1678
|
-
assert File.exist?(real_file_sandbox('subdir')), 'subdir was cloned'
|
1679
|
-
assert File.directory?(real_file_sandbox('subdir')), 'subdir is a directory'
|
1680
|
-
end
|
1681
|
-
|
1682
|
-
def test_clone_clones_dot_files_even_hard_to_find_ones
|
1683
|
-
act_on_real_fs { FileUtils.mkdir_p(real_file_sandbox('subdir/.bar/baz/.quux/foo')) }
|
1684
|
-
|
1685
|
-
refute File.exist?(real_file_sandbox('subdir'))
|
1686
|
-
|
1687
|
-
FakeFS::FileSystem.clone(real_file_sandbox('subdir'))
|
1688
|
-
assert_equal ['.', '..', '.bar'], Dir.entries(real_file_sandbox('subdir'))
|
1689
|
-
assert_equal ['.', '..', 'foo'], Dir.entries(real_file_sandbox('subdir/.bar/baz/.quux'))
|
1690
|
-
end
|
1691
|
-
|
1692
|
-
def test_dir_glob_on_clone_with_absolute_path
|
1693
|
-
act_on_real_fs { FileUtils.mkdir_p(real_file_sandbox('subdir/.bar/baz/.quux/foo')) }
|
1694
|
-
FileUtils.mkdir_p '/path'
|
1695
|
-
Dir.chdir('/path')
|
1696
|
-
FakeFS::FileSystem.clone(real_file_sandbox('subdir'), '/foo')
|
1697
|
-
assert Dir.glob '/foo/*'
|
1698
|
-
end
|
1699
|
-
|
1700
|
-
def test_clone_with_target_specified
|
1701
|
-
act_on_real_fs do
|
1702
|
-
assert FileUtils == RealFileUtils, 'using the real FileUtils in act_on_real_fs'
|
1703
|
-
FileUtils.mkdir_p(real_file_sandbox('subdir/.bar/baz/.quux/foo'))
|
1704
|
-
end
|
1705
|
-
|
1706
|
-
refute File.exist?(real_file_sandbox('subdir'))
|
1707
|
-
|
1708
|
-
FakeFS::FileSystem.clone(real_file_sandbox('subdir'), real_file_sandbox('subdir2'))
|
1709
|
-
refute File.exist?(real_file_sandbox('subdir'))
|
1710
|
-
assert_equal ['.', '..', '.bar'], Dir.entries(real_file_sandbox('subdir2'))
|
1711
|
-
assert_equal ['.', '..', 'foo'], Dir.entries(real_file_sandbox('subdir2/.bar/baz/.quux'))
|
1712
|
-
end
|
1713
|
-
|
1714
|
-
def test_clone_with_file_symlinks
|
1715
|
-
original = real_file_sandbox('subdir/test-file')
|
1716
|
-
symlink = real_file_sandbox('subdir/test-file.txt')
|
1717
|
-
|
1718
|
-
act_on_real_fs do
|
1719
|
-
FileUtils.mkdir_p(File.dirname(original))
|
1720
|
-
File.open(original, 'w') { |f| f << 'stuff' }
|
1721
|
-
FileUtils.ln_s original, symlink
|
1722
|
-
assert File.symlink?(symlink), 'real symlink is in place'
|
1723
|
-
end
|
1724
|
-
|
1725
|
-
refute File.exist?(original), 'file does not already exist'
|
1726
|
-
|
1727
|
-
FakeFS::FileSystem.clone(File.dirname(original))
|
1728
|
-
assert File.symlink?(symlink), 'symlinks are cloned as symlinks'
|
1729
|
-
assert_equal 'stuff', File.read(symlink)
|
1730
|
-
end
|
1731
|
-
|
1732
|
-
def test_clone_with_dir_symlinks
|
1733
|
-
original = real_file_sandbox('subdir/dir')
|
1734
|
-
symlink = real_file_sandbox('subdir/dir.link')
|
1735
|
-
original_file = File.join(original, 'test-file')
|
1736
|
-
symlink_file = File.join(symlink, 'test-file')
|
1737
|
-
|
1738
|
-
act_on_real_fs do
|
1739
|
-
FileUtils.mkdir_p(original)
|
1740
|
-
File.open(original_file, 'w') { |f| f << 'stuff' }
|
1741
|
-
FileUtils.ln_s original, symlink
|
1742
|
-
assert File.symlink?(symlink), 'real symlink is in place'
|
1743
|
-
end
|
1744
|
-
|
1745
|
-
refute File.exist?(original_file), 'file does not already exist'
|
1746
|
-
|
1747
|
-
FakeFS::FileSystem.clone(File.dirname(original))
|
1748
|
-
assert File.symlink?(symlink), 'symlinks are cloned as symlinks'
|
1749
|
-
assert_equal 'stuff', File.read(symlink_file)
|
1750
|
-
end
|
1751
|
-
|
1752
|
-
def test_putting_a_dot_at_end_copies_the_contents
|
1753
|
-
FileUtils.mkdir_p 'subdir'
|
1754
|
-
Dir.chdir('subdir') { File.open('foo', 'w') { |f| f.write 'footext' } }
|
1755
|
-
|
1756
|
-
FileUtils.mkdir_p 'newdir'
|
1757
|
-
FileUtils.cp_r 'subdir/.', 'newdir'
|
1758
|
-
assert_equal 'footext', File.open('newdir/foo') { |f| f.read }
|
1759
|
-
end
|
1760
|
-
|
1761
|
-
def test_file_can_read_from_symlinks
|
1762
|
-
File.open('first', 'w') { |f| f.write '1' }
|
1763
|
-
FileUtils.ln_s 'first', 'one'
|
1764
|
-
assert_equal '1', File.open('one') { |f| f.read }
|
1765
|
-
|
1766
|
-
FileUtils.mkdir_p 'subdir'
|
1767
|
-
File.open('subdir/nother', 'w') { |f| f.write 'works' }
|
1768
|
-
FileUtils.ln_s 'subdir', 'new'
|
1769
|
-
assert_equal 'works', File.open('new/nother') { |f| f.read }
|
1770
|
-
end
|
1771
|
-
|
1772
|
-
def test_can_symlink_through_file
|
1773
|
-
FileUtils.touch('/foo')
|
1774
|
-
|
1775
|
-
File.symlink('/foo', '/bar')
|
1776
|
-
|
1777
|
-
assert File.symlink?('/bar')
|
1778
|
-
end
|
1779
|
-
|
1780
|
-
def test_files_can_be_touched
|
1781
|
-
FileUtils.touch('touched_file')
|
1782
|
-
assert File.exist?('touched_file')
|
1783
|
-
list = %w(newfile another)
|
1784
|
-
FileUtils.touch(list)
|
1785
|
-
list.each { |fp| assert(File.exist?(fp)) }
|
1786
|
-
end
|
1787
|
-
|
1788
|
-
def test_touch_does_not_work_if_the_dir_path_cannot_be_found
|
1789
|
-
assert_raises(Errno::ENOENT) do
|
1790
|
-
FileUtils.touch('this/path/should/not/be/here')
|
1791
|
-
end
|
1792
|
-
FileUtils.mkdir_p('subdir')
|
1793
|
-
list = ['subdir/foo', 'nosubdir/bar']
|
1794
|
-
|
1795
|
-
assert_raises(Errno::ENOENT) do
|
1796
|
-
FileUtils.touch(list)
|
1797
|
-
end
|
1798
|
-
end
|
1799
|
-
|
1800
|
-
def test_extname
|
1801
|
-
assert File.extname('test.doc') == '.doc'
|
1802
|
-
end
|
1803
|
-
|
1804
|
-
# Directory tests
|
1805
|
-
def test_new_directory
|
1806
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1807
|
-
|
1808
|
-
# nothing raised
|
1809
|
-
Dir.new('/this/path/should/be/here')
|
1810
|
-
end
|
1811
|
-
|
1812
|
-
def test_new_directory_does_not_work_if_dir_path_cannot_be_found
|
1813
|
-
assert_raises(Errno::ENOENT) do
|
1814
|
-
Dir.new('/this/path/should/not/be/here')
|
1815
|
-
end
|
1816
|
-
end
|
1817
|
-
|
1818
|
-
def test_directory_close
|
1819
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1820
|
-
dir = Dir.new('/this/path/should/be/here')
|
1821
|
-
assert dir.close.nil?
|
1822
|
-
|
1823
|
-
assert_raises(IOError) do
|
1824
|
-
dir.each { |d| d }
|
1825
|
-
end
|
1826
|
-
end
|
1827
|
-
|
1828
|
-
def test_directory_each
|
1829
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1830
|
-
|
1831
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1832
|
-
|
1833
|
-
test.each do |f|
|
1834
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1835
|
-
end
|
1836
|
-
|
1837
|
-
dir = Dir.new('/this/path/should/be/here')
|
1838
|
-
|
1839
|
-
yielded = []
|
1840
|
-
dir.each do |d|
|
1841
|
-
yielded << d
|
1842
|
-
end
|
1843
|
-
|
1844
|
-
assert yielded.size == test.size
|
1845
|
-
test.each { |t| assert yielded.include?(t) }
|
1846
|
-
end
|
1847
|
-
|
1848
|
-
def test_directory_path
|
1849
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1850
|
-
good_path = '/this/path/should/be/here'
|
1851
|
-
assert_equal good_path, Dir.new('/this/path/should/be/here').path
|
1852
|
-
end
|
1853
|
-
|
1854
|
-
def test_directory_pos
|
1855
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1856
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1857
|
-
test.each do |f|
|
1858
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1859
|
-
end
|
1860
|
-
|
1861
|
-
dir = Dir.new('/this/path/should/be/here')
|
1862
|
-
|
1863
|
-
assert dir.pos == 0
|
1864
|
-
dir.read
|
1865
|
-
assert dir.pos == 1
|
1866
|
-
dir.read
|
1867
|
-
assert dir.pos == 2
|
1868
|
-
dir.read
|
1869
|
-
assert dir.pos == 3
|
1870
|
-
dir.read
|
1871
|
-
assert dir.pos == 4
|
1872
|
-
dir.read
|
1873
|
-
assert dir.pos == 5
|
1874
|
-
end
|
1875
|
-
|
1876
|
-
def test_directory_pos_assign
|
1877
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1878
|
-
|
1879
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1880
|
-
test.each do |f|
|
1881
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1882
|
-
end
|
1883
|
-
|
1884
|
-
dir = Dir.new('/this/path/should/be/here')
|
1885
|
-
|
1886
|
-
assert dir.pos == 0
|
1887
|
-
dir.pos = 2
|
1888
|
-
assert dir.pos == 2
|
1889
|
-
end
|
1890
|
-
|
1891
|
-
def test_directory_read
|
1892
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1893
|
-
|
1894
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1895
|
-
test.each do |f|
|
1896
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1897
|
-
end
|
1898
|
-
|
1899
|
-
dir = Dir.new('/this/path/should/be/here')
|
1900
|
-
|
1901
|
-
assert dir.pos == 0
|
1902
|
-
d = dir.read
|
1903
|
-
assert dir.pos == 1
|
1904
|
-
assert d == '.'
|
1905
|
-
|
1906
|
-
d = dir.read
|
1907
|
-
assert dir.pos == 2
|
1908
|
-
assert d == '..'
|
1909
|
-
end
|
1910
|
-
|
1911
|
-
def test_directory_read_past_length
|
1912
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1913
|
-
|
1914
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1915
|
-
test.each do |f|
|
1916
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1917
|
-
end
|
1918
|
-
|
1919
|
-
dir = Dir.new('/this/path/should/be/here')
|
1920
|
-
|
1921
|
-
d = dir.read
|
1922
|
-
refute_nil d
|
1923
|
-
d = dir.read
|
1924
|
-
refute_nil d
|
1925
|
-
d = dir.read
|
1926
|
-
refute_nil d
|
1927
|
-
d = dir.read
|
1928
|
-
refute_nil d
|
1929
|
-
d = dir.read
|
1930
|
-
refute_nil d
|
1931
|
-
d = dir.read
|
1932
|
-
refute_nil d
|
1933
|
-
d = dir.read
|
1934
|
-
refute_nil d
|
1935
|
-
d = dir.read
|
1936
|
-
assert_nil d
|
1937
|
-
end
|
1938
|
-
|
1939
|
-
def test_directory_rewind
|
1940
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1941
|
-
|
1942
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1943
|
-
test.each do |f|
|
1944
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1945
|
-
end
|
1946
|
-
|
1947
|
-
dir = Dir.new('/this/path/should/be/here')
|
1948
|
-
|
1949
|
-
dir.read
|
1950
|
-
dir.read
|
1951
|
-
assert dir.pos == 2
|
1952
|
-
dir.rewind
|
1953
|
-
assert dir.pos == 0
|
1954
|
-
end
|
1955
|
-
|
1956
|
-
def test_directory_seek
|
1957
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1958
|
-
|
1959
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1960
|
-
test.each do |f|
|
1961
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1962
|
-
end
|
1963
|
-
|
1964
|
-
dir = Dir.new('/this/path/should/be/here')
|
1965
|
-
|
1966
|
-
d = dir.seek 1
|
1967
|
-
assert d == '..'
|
1968
|
-
assert dir.pos == 1
|
1969
|
-
end
|
1970
|
-
|
1971
|
-
def test_directory_class_delete
|
1972
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1973
|
-
Dir.delete('/this/path/should/be/here')
|
1974
|
-
assert File.exist?('/this/path/should/be/here') == false
|
1975
|
-
end
|
1976
|
-
|
1977
|
-
def test_directory_class_delete_does_not_act_on_non_empty_directory
|
1978
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1979
|
-
|
1980
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
1981
|
-
test.each do |f|
|
1982
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1983
|
-
end
|
1984
|
-
|
1985
|
-
assert_raises(Errno::ENOTEMPTY) do
|
1986
|
-
Dir.delete('/this/path/should/be/here')
|
1987
|
-
end
|
1988
|
-
end
|
1989
|
-
|
1990
|
-
def test_directory_class_delete_does_not_work_if_dir_path_cannot_be_found
|
1991
|
-
assert_raises(Errno::ENOENT) do
|
1992
|
-
Dir.delete('/this/path/should/not/be/here')
|
1993
|
-
end
|
1994
|
-
end
|
1995
|
-
|
1996
|
-
def test_directory_entries
|
1997
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
1998
|
-
|
1999
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2000
|
-
|
2001
|
-
test.each do |f|
|
2002
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2003
|
-
end
|
2004
|
-
|
2005
|
-
yielded = Dir.entries('/this/path/should/be/here')
|
2006
|
-
assert yielded.size == test.size
|
2007
|
-
test.each { |t| assert yielded.include?(t) }
|
2008
|
-
end
|
2009
|
-
|
2010
|
-
def test_directory_entries_works_with_trailing_slash
|
2011
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
2012
|
-
|
2013
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2014
|
-
|
2015
|
-
test.each do |f|
|
2016
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2017
|
-
end
|
2018
|
-
|
2019
|
-
yielded = Dir.entries('/this/path/should/be/here/')
|
2020
|
-
assert yielded.size == test.size
|
2021
|
-
test.each { |t| assert yielded.include?(t) }
|
2022
|
-
end
|
2023
|
-
|
2024
|
-
def test_directory_entries_does_not_work_if_dir_path_cannot_be_found
|
2025
|
-
assert_raises(Errno::ENOENT) do
|
2026
|
-
Dir.delete('/this/path/should/not/be/here')
|
2027
|
-
end
|
2028
|
-
end
|
2029
|
-
|
2030
|
-
def test_directory_foreach
|
2031
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
2032
|
-
|
2033
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2034
|
-
|
2035
|
-
test.each do |f|
|
2036
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2037
|
-
end
|
2038
|
-
|
2039
|
-
yielded = []
|
2040
|
-
Dir.foreach('/this/path/should/be/here') do |dir|
|
2041
|
-
yielded << dir
|
2042
|
-
end
|
2043
|
-
|
2044
|
-
assert yielded.size == test.size
|
2045
|
-
test.each { |t| assert yielded.include?(t) }
|
2046
|
-
end
|
2047
|
-
|
2048
|
-
def test_directory_foreach_relative_paths
|
2049
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
2050
|
-
|
2051
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2052
|
-
|
2053
|
-
test.each do |f|
|
2054
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2055
|
-
end
|
2056
|
-
|
2057
|
-
yielded = []
|
2058
|
-
Dir.chdir '/this/path/should/be' do
|
2059
|
-
Dir.foreach('here') do |dir|
|
2060
|
-
yielded << dir
|
2061
|
-
end
|
2062
|
-
end
|
2063
|
-
|
2064
|
-
assert yielded.size == test.size, 'wrong number of files yielded'
|
2065
|
-
test.each { |t| assert yielded.include?(t), "#{t} was not included in #{yielded.inspect}" }
|
2066
|
-
end
|
2067
|
-
|
2068
|
-
def test_directory_mkdir
|
2069
|
-
Dir.mkdir('/path')
|
2070
|
-
assert File.exist?('/path')
|
2071
|
-
end
|
2072
|
-
|
2073
|
-
def test_directory_mkdir_nested
|
2074
|
-
Dir.mkdir('/tmp/stream20120103-11847-xc8pb.lock')
|
2075
|
-
assert File.exist?('/tmp/stream20120103-11847-xc8pb.lock')
|
2076
|
-
end
|
2077
|
-
|
2078
|
-
def test_can_create_subdirectories_with_dir_mkdir
|
2079
|
-
Dir.mkdir 'foo'
|
2080
|
-
Dir.mkdir 'foo/bar'
|
2081
|
-
assert Dir.exist?('foo/bar')
|
2082
|
-
end
|
2083
|
-
|
2084
|
-
def test_can_create_absolute_subdirectories_with_dir_mkdir
|
2085
|
-
Dir.mkdir '/foo'
|
2086
|
-
Dir.mkdir '/foo/bar'
|
2087
|
-
assert Dir.exist?('/foo/bar')
|
2088
|
-
end
|
2089
|
-
|
2090
|
-
def test_can_create_directories_starting_with_dot
|
2091
|
-
Dir.mkdir './path'
|
2092
|
-
assert File.exist? './path'
|
2093
|
-
end
|
2094
|
-
|
2095
|
-
def test_directory_mkdir_relative
|
2096
|
-
FileUtils.mkdir_p('/new/root')
|
2097
|
-
FakeFS::FileSystem.chdir('/new/root')
|
2098
|
-
Dir.mkdir('path')
|
2099
|
-
assert File.exist?('/new/root/path')
|
2100
|
-
end
|
2101
|
-
|
2102
|
-
def test_directory_mkdir_not_recursive
|
2103
|
-
assert_raises(Errno::ENOENT) do
|
2104
|
-
Dir.mkdir('/path/does/not/exist')
|
2105
|
-
end
|
2106
|
-
end
|
2107
|
-
|
2108
|
-
def test_mkdir_raises_error_if_already_created
|
2109
|
-
Dir.mkdir 'foo'
|
2110
|
-
|
2111
|
-
assert_raises(Errno::EEXIST) do
|
2112
|
-
Dir.mkdir 'foo'
|
2113
|
-
end
|
2114
|
-
end
|
2115
|
-
|
2116
|
-
def test_directory_open
|
2117
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
2118
|
-
|
2119
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2120
|
-
|
2121
|
-
test.each do |f|
|
2122
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2123
|
-
end
|
2124
|
-
|
2125
|
-
dir = Dir.open('/this/path/should/be/here')
|
2126
|
-
assert dir.path == '/this/path/should/be/here'
|
2127
|
-
end
|
2128
|
-
|
2129
|
-
def test_directory_open_block
|
2130
|
-
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5']
|
2131
|
-
|
2132
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2133
|
-
|
2134
|
-
test.each do |f|
|
2135
|
-
FileUtils.touch("/this/path/should/be/here/#{f}")
|
2136
|
-
end
|
2137
|
-
|
2138
|
-
yielded = []
|
2139
|
-
Dir.open('/this/path/should/be/here') do |dir|
|
2140
|
-
yielded << dir
|
2141
|
-
end
|
2142
|
-
|
2143
|
-
assert yielded.size == test.size
|
2144
|
-
test.each { |t| assert yielded.include?(t) }
|
2145
|
-
end
|
2146
|
-
|
2147
|
-
def test_directory_exists
|
2148
|
-
assert Dir.exist?('/this/path/should/be/here') == false
|
2149
|
-
assert Dir.exist?('/this/path/should/be/here') == false
|
2150
|
-
FileUtils.mkdir_p('/this/path/should/be/here')
|
2151
|
-
assert Dir.exist?('/this/path/should/be/here') == true
|
2152
|
-
assert Dir.exist?('/this/path/should/be/here') == true
|
2153
|
-
end
|
2154
|
-
|
2155
|
-
def test_tmpdir
|
2156
|
-
assert Dir.tmpdir == '/tmp'
|
2157
|
-
end
|
2158
|
-
|
2159
|
-
def test_rename_renames_a_file
|
2160
|
-
FileUtils.touch('/foo')
|
2161
|
-
File.rename('/foo', '/bar')
|
2162
|
-
assert File.file?('/bar')
|
2163
|
-
end
|
2164
|
-
|
2165
|
-
def test_rename_returns
|
2166
|
-
FileUtils.touch('/foo')
|
2167
|
-
assert_equal 0, File.rename('/foo', '/bar')
|
2168
|
-
end
|
2169
|
-
|
2170
|
-
def test_rename_renames_two_files
|
2171
|
-
FileUtils.touch('/foo')
|
2172
|
-
FileUtils.touch('/bar')
|
2173
|
-
File.rename('/foo', '/bar')
|
2174
|
-
assert File.file?('/bar')
|
2175
|
-
end
|
2176
|
-
|
2177
|
-
def test_rename_renames_a_directories
|
2178
|
-
Dir.mkdir('/foo')
|
2179
|
-
File.rename('/foo', '/bar')
|
2180
|
-
assert File.directory?('/bar')
|
2181
|
-
end
|
2182
|
-
|
2183
|
-
def test_rename_renames_two_directories
|
2184
|
-
Dir.mkdir('/foo')
|
2185
|
-
Dir.mkdir('/bar')
|
2186
|
-
File.rename('/foo', '/bar')
|
2187
|
-
assert File.directory?('/bar')
|
2188
|
-
end
|
2189
|
-
|
2190
|
-
def test_rename_file_to_directory_raises_error
|
2191
|
-
FileUtils.touch('/foo')
|
2192
|
-
Dir.mkdir('/bar')
|
2193
|
-
assert_raises(Errno::EISDIR) do
|
2194
|
-
File.rename('/foo', '/bar')
|
2195
|
-
end
|
2196
|
-
end
|
2197
|
-
|
2198
|
-
def test_rename_directory_to_file_raises_error
|
2199
|
-
Dir.mkdir('/foo')
|
2200
|
-
FileUtils.touch('/bar')
|
2201
|
-
assert_raises(Errno::ENOTDIR) do
|
2202
|
-
File.rename('/foo', '/bar')
|
2203
|
-
end
|
2204
|
-
end
|
2205
|
-
|
2206
|
-
def test_rename_with_missing_source_raises_error
|
2207
|
-
assert_raises(Errno::ENOENT) do
|
2208
|
-
File.rename('/no_such_file', '/bar')
|
2209
|
-
end
|
2210
|
-
end
|
2211
|
-
|
2212
|
-
def test_rename_with_missing_dest_directory_raises_error
|
2213
|
-
FileUtils.touch('/foo')
|
2214
|
-
assert_raises(Errno::ENOENT) do
|
2215
|
-
File.rename('/foo', '/bar/foo')
|
2216
|
-
end
|
2217
|
-
end
|
2218
|
-
|
2219
|
-
def test_hard_link_creates_file
|
2220
|
-
FileUtils.touch('/foo')
|
2221
|
-
|
2222
|
-
File.link('/foo', '/bar')
|
2223
|
-
assert File.exist?('/bar')
|
2224
|
-
end
|
2225
|
-
|
2226
|
-
def test_hard_link_with_missing_file_raises_error
|
2227
|
-
assert_raises(Errno::ENOENT) do
|
2228
|
-
File.link('/foo', '/bar')
|
2229
|
-
end
|
2230
|
-
end
|
2231
|
-
|
2232
|
-
def test_hard_link_with_existing_destination_file
|
2233
|
-
FileUtils.touch('/foo')
|
2234
|
-
FileUtils.touch('/bar')
|
2235
|
-
|
2236
|
-
assert_raises(Errno::EEXIST) do
|
2237
|
-
File.link('/foo', '/bar')
|
2238
|
-
end
|
2239
|
-
end
|
2240
|
-
|
2241
|
-
def test_hard_link_returns_0_when_successful
|
2242
|
-
FileUtils.touch('/foo')
|
2243
|
-
|
2244
|
-
assert_equal 0, File.link('/foo', '/bar')
|
2245
|
-
end
|
2246
|
-
|
2247
|
-
def test_hard_link_returns_duplicate_file
|
2248
|
-
File.open('/foo', 'w') { |x| x << 'some content' }
|
2249
|
-
|
2250
|
-
File.link('/foo', '/bar')
|
2251
|
-
assert_equal 'some content', File.read('/bar')
|
2252
|
-
end
|
2253
|
-
|
2254
|
-
def test_hard_link_with_directory_raises_error
|
2255
|
-
Dir.mkdir '/foo'
|
2256
|
-
|
2257
|
-
assert_raises(Errno::EPERM) do
|
2258
|
-
File.link('/foo', '/bar')
|
2259
|
-
end
|
2260
|
-
end
|
2261
|
-
|
2262
|
-
def test_file_stat_returns_file_stat_object
|
2263
|
-
FileUtils.touch('/foo')
|
2264
|
-
assert_equal File::Stat, File.stat('/foo').class
|
2265
|
-
end
|
2266
|
-
|
2267
|
-
def test_can_delete_file_with_delete
|
2268
|
-
FileUtils.touch('/foo')
|
2269
|
-
|
2270
|
-
File.delete('/foo')
|
2271
|
-
|
2272
|
-
refute File.exist?('/foo')
|
2273
|
-
end
|
2274
|
-
|
2275
|
-
def test_can_delete_multiple_files_with_delete
|
2276
|
-
FileUtils.touch('/foo')
|
2277
|
-
FileUtils.touch('/bar')
|
2278
|
-
|
2279
|
-
File.delete('/foo', '/bar')
|
2280
|
-
|
2281
|
-
refute File.exist?('/foo')
|
2282
|
-
refute File.exist?('/bar')
|
2283
|
-
end
|
2284
|
-
|
2285
|
-
def test_delete_returns_zero_when_no_filename_given
|
2286
|
-
assert_equal 0, File.delete
|
2287
|
-
end
|
2288
|
-
|
2289
|
-
def test_delete_returns_number_one_when_given_one_arg
|
2290
|
-
FileUtils.touch('/foo')
|
2291
|
-
|
2292
|
-
assert_equal 1, File.delete('/foo')
|
2293
|
-
end
|
2294
|
-
|
2295
|
-
def test_delete_returns_number_two_when_given_two_args
|
2296
|
-
FileUtils.touch('/foo')
|
2297
|
-
FileUtils.touch('/bar')
|
2298
|
-
|
2299
|
-
assert_equal 2, File.delete('/foo', '/bar')
|
2300
|
-
end
|
2301
|
-
|
2302
|
-
def test_delete_raises_error_when_first_file_does_not_exist
|
2303
|
-
assert_raises Errno::ENOENT do
|
2304
|
-
File.delete('/foo')
|
2305
|
-
end
|
2306
|
-
end
|
2307
|
-
|
2308
|
-
def test_unlink_removes_only_one_file_content
|
2309
|
-
File.open('/foo', 'w') { |f| f << 'some_content' }
|
2310
|
-
File.link('/foo', '/bar')
|
2311
|
-
|
2312
|
-
File.unlink('/bar')
|
2313
|
-
assert_equal 'some_content', File.read('/foo')
|
2314
|
-
end
|
2315
|
-
|
2316
|
-
def test_link_reports_correct_stat_info_after_unlinking
|
2317
|
-
File.open('/foo', 'w') { |f| f << 'some_content' }
|
2318
|
-
File.link('/foo', '/bar')
|
2319
|
-
|
2320
|
-
File.unlink('/bar')
|
2321
|
-
assert_equal 1, File.stat('/foo').nlink
|
2322
|
-
end
|
2323
|
-
|
2324
|
-
def test_delete_works_with_symlink
|
2325
|
-
FileUtils.touch('/foo')
|
2326
|
-
File.symlink('/foo', '/bar')
|
2327
|
-
|
2328
|
-
File.unlink('/bar')
|
2329
|
-
|
2330
|
-
assert File.exist?('/foo')
|
2331
|
-
refute File.exist?('/bar')
|
2332
|
-
end
|
2333
|
-
|
2334
|
-
def test_delete_works_with_symlink_source
|
2335
|
-
FileUtils.touch('/foo')
|
2336
|
-
File.symlink('/foo', '/bar')
|
2337
|
-
|
2338
|
-
File.unlink('/foo')
|
2339
|
-
|
2340
|
-
refute File.exist?('/foo')
|
2341
|
-
end
|
2342
|
-
|
2343
|
-
def test_file_seek_returns_0
|
2344
|
-
File.open('/foo', 'w') do |f|
|
2345
|
-
f << "one\ntwo\nthree"
|
2346
|
-
end
|
2347
|
-
|
2348
|
-
file = File.open('/foo', 'r')
|
2349
|
-
|
2350
|
-
assert_equal 0, file.seek(1)
|
2351
|
-
end
|
2352
|
-
|
2353
|
-
def test_file_seek_seeks_to_location
|
2354
|
-
File.open('/foo', 'w') do |f|
|
2355
|
-
f << '123'
|
2356
|
-
end
|
2357
|
-
|
2358
|
-
file = File.open('/foo', 'r')
|
2359
|
-
file.seek(1)
|
2360
|
-
assert_equal '23', file.read
|
2361
|
-
end
|
2362
|
-
|
2363
|
-
def test_file_seek_seeks_to_correct_location
|
2364
|
-
File.open('/foo', 'w') do |f|
|
2365
|
-
f << '123'
|
2366
|
-
end
|
2367
|
-
|
2368
|
-
file = File.open('/foo', 'r')
|
2369
|
-
file.seek(2)
|
2370
|
-
assert_equal '3', file.read
|
2371
|
-
end
|
2372
|
-
|
2373
|
-
def test_file_seek_can_take_negative_offset
|
2374
|
-
File.open('/foo', 'w') do |f|
|
2375
|
-
f << '123456789'
|
2376
|
-
end
|
2377
|
-
|
2378
|
-
file = File.open('/foo', 'r')
|
2379
|
-
|
2380
|
-
file.seek(-1, IO::SEEK_END)
|
2381
|
-
assert_equal '9', file.read
|
2382
|
-
|
2383
|
-
file.seek(-2, IO::SEEK_END)
|
2384
|
-
assert_equal '89', file.read
|
2385
|
-
|
2386
|
-
file.seek(-3, IO::SEEK_END)
|
2387
|
-
assert_equal '789', file.read
|
2388
|
-
end
|
2389
|
-
|
2390
|
-
def test_should_have_constants_inherited_from_descending_from_io
|
2391
|
-
assert_equal IO::SEEK_CUR, File::SEEK_CUR
|
2392
|
-
assert_equal IO::SEEK_END, File::SEEK_END
|
2393
|
-
assert_equal IO::SEEK_SET, File::SEEK_SET
|
2394
|
-
end
|
2395
|
-
|
2396
|
-
def test_filetest_exists_return_correct_values
|
2397
|
-
FileUtils.mkdir_p('/path/to/dir')
|
2398
|
-
assert FileTest.exist?('/path/to/')
|
2399
|
-
|
2400
|
-
FileUtils.rmdir('/path/to/dir')
|
2401
|
-
refute FileTest.exist?('/path/to/dir')
|
2402
|
-
end
|
2403
|
-
|
2404
|
-
def test_filetest_directory_returns_correct_values
|
2405
|
-
FileUtils.mkdir_p '/path/to/somedir'
|
2406
|
-
assert FileTest.directory?('/path/to/somedir')
|
2407
|
-
|
2408
|
-
FileUtils.rm_r '/path/to/somedir'
|
2409
|
-
refute FileTest.directory?('/path/to/somedir')
|
2410
|
-
end
|
2411
|
-
|
2412
|
-
def test_filetest_file_returns_correct_values
|
2413
|
-
FileUtils.mkdir_p('/path/to')
|
2414
|
-
|
2415
|
-
path = '/path/to/file.txt'
|
2416
|
-
File.open(path, 'w') { |f| f.write 'Yatta!' }
|
2417
|
-
assert FileTest.file?(path)
|
2418
|
-
|
2419
|
-
FileUtils.rm path
|
2420
|
-
refute FileTest.file?(path)
|
2421
|
-
|
2422
|
-
FileUtils.mkdir_p '/path/to/somedir'
|
2423
|
-
refute FileTest.file?('/path/to/somedir')
|
2424
|
-
end
|
2425
|
-
|
2426
|
-
def test_filetest_readable_returns_correct_values
|
2427
|
-
refute FileTest.readable?('not-here.txt'), 'missing files are not readable'
|
2428
|
-
|
2429
|
-
FileUtils.touch 'here.txt'
|
2430
|
-
assert FileTest.readable?('here.txt'), 'existing files are readable'
|
2431
|
-
|
2432
|
-
FileUtils.mkdir 'dir'
|
2433
|
-
assert FileTest.readable?('dir'), 'directories are readable'
|
2434
|
-
end
|
2435
|
-
|
2436
|
-
def test_filetest_writable_returns_correct_values
|
2437
|
-
refute FileTest.writable?('not-here.txt'), 'missing files are not writable'
|
2438
|
-
|
2439
|
-
FileUtils.touch 'here.txt'
|
2440
|
-
assert FileTest.writable?('here.txt'), 'existing files are writable'
|
2441
|
-
|
2442
|
-
FileUtils.mkdir 'dir'
|
2443
|
-
assert FileTest.writable?('dir'), 'directories are writable'
|
2444
|
-
end
|
2445
|
-
|
2446
|
-
def test_dir_mktmpdir
|
2447
|
-
# FileUtils.mkdir '/tmpdir'
|
2448
|
-
|
2449
|
-
tmpdir = Dir.mktmpdir
|
2450
|
-
assert File.directory?(tmpdir)
|
2451
|
-
FileUtils.rm_r tmpdir
|
2452
|
-
|
2453
|
-
Dir.mktmpdir do |t|
|
2454
|
-
tmpdir = t
|
2455
|
-
assert File.directory?(t)
|
2456
|
-
end
|
2457
|
-
refute File.directory?(tmpdir)
|
2458
|
-
end
|
2459
|
-
|
2460
|
-
def test_activating_returns_true
|
2461
|
-
FakeFS.deactivate!
|
2462
|
-
assert_equal true, FakeFS.activate!
|
2463
|
-
end
|
2464
|
-
|
2465
|
-
def test_deactivating_returns_true
|
2466
|
-
assert_equal true, FakeFS.deactivate!
|
2467
|
-
end
|
2468
|
-
|
2469
|
-
def test_split
|
2470
|
-
assert File.respond_to? :split
|
2471
|
-
filename = '/this/is/what/we/expect.txt'
|
2472
|
-
path, filename = File.split(filename)
|
2473
|
-
assert_equal path, '/this/is/what/we'
|
2474
|
-
assert_equal filename, 'expect.txt'
|
2475
|
-
end
|
2476
|
-
|
2477
|
-
#########################
|
2478
|
-
def test_file_default_mode
|
2479
|
-
FileUtils.touch 'foo'
|
2480
|
-
assert_equal File.stat('foo').mode, (0100000 + 0666 - File.umask)
|
2481
|
-
end
|
2482
|
-
|
2483
|
-
def test_dir_default_mode
|
2484
|
-
Dir.mkdir 'bar'
|
2485
|
-
assert_equal File.stat('bar').mode, (0100000 + 0777 - File.umask)
|
2486
|
-
end
|
2487
|
-
|
2488
|
-
def test_file_default_uid_and_gid
|
2489
|
-
FileUtils.touch 'foo'
|
2490
|
-
assert_equal File.stat('foo').uid, Process.uid
|
2491
|
-
assert_equal File.stat('foo').gid, Process.gid
|
2492
|
-
end
|
2493
|
-
|
2494
|
-
def test_file_chmod_of_file
|
2495
|
-
FileUtils.touch 'foo'
|
2496
|
-
File.chmod 0600, 'foo'
|
2497
|
-
assert_equal File.stat('foo').mode, 0100600
|
2498
|
-
File.new('foo').chmod 0644
|
2499
|
-
assert_equal File.stat('foo').mode, 0100644
|
2500
|
-
end
|
2501
|
-
|
2502
|
-
def test_file_chmod_of_dir
|
2503
|
-
Dir.mkdir 'bar'
|
2504
|
-
File.chmod 0777, 'bar'
|
2505
|
-
assert_equal File.stat('bar').mode, 0100777
|
2506
|
-
File.new('bar').chmod 01700
|
2507
|
-
assert_equal File.stat('bar').mode, 0101700
|
2508
|
-
end
|
2509
|
-
|
2510
|
-
def test_file_chown_of_file
|
2511
|
-
FileUtils.touch 'foo'
|
2512
|
-
File.chown 1337, 1338, 'foo'
|
2513
|
-
assert_equal File.stat('foo').uid, 1337
|
2514
|
-
assert_equal File.stat('foo').gid, 1338
|
2515
|
-
end
|
2516
|
-
|
2517
|
-
def test_file_chown_of_dir
|
2518
|
-
Dir.mkdir 'bar'
|
2519
|
-
File.chown 1337, 1338, 'bar'
|
2520
|
-
assert_equal File.stat('bar').uid, 1337
|
2521
|
-
assert_equal File.stat('bar').gid, 1338
|
2522
|
-
end
|
2523
|
-
|
2524
|
-
def test_file_chown_of_file_nil_user_group
|
2525
|
-
FileUtils.touch 'foo'
|
2526
|
-
File.chown 1337, 1338, 'foo'
|
2527
|
-
File.chown nil, nil, 'foo'
|
2528
|
-
assert_equal File.stat('foo').uid, 1337
|
2529
|
-
assert_equal File.stat('foo').gid, 1338
|
2530
|
-
end
|
2531
|
-
|
2532
|
-
def test_file_chown_of_file_negative_user_group
|
2533
|
-
FileUtils.touch 'foo'
|
2534
|
-
File.chown 1337, 1338, 'foo'
|
2535
|
-
File.chown(-1, -1, 'foo')
|
2536
|
-
assert_equal File.stat('foo').uid, 1337
|
2537
|
-
assert_equal File.stat('foo').gid, 1338
|
2538
|
-
end
|
2539
|
-
|
2540
|
-
def test_file_instance_chown_nil_user_group
|
2541
|
-
FileUtils.touch('foo')
|
2542
|
-
File.chown(1337, 1338, 'foo')
|
2543
|
-
assert_equal File.stat('foo').uid, 1337
|
2544
|
-
assert_equal File.stat('foo').gid, 1338
|
2545
|
-
file = File.open('foo')
|
2546
|
-
file.chown nil, nil
|
2547
|
-
assert_equal File.stat('foo').uid, 1337
|
2548
|
-
assert_equal File.stat('foo').gid, 1338
|
2549
|
-
end
|
2550
|
-
|
2551
|
-
def test_file_instance_chown_negative_user_group
|
2552
|
-
FileUtils.touch('foo')
|
2553
|
-
File.chown(1337, 1338, 'foo')
|
2554
|
-
assert_equal File.stat('foo').uid, 1337
|
2555
|
-
assert_equal File.stat('foo').gid, 1338
|
2556
|
-
file = File.new('foo')
|
2557
|
-
file.chown(-1, -1)
|
2558
|
-
file.close
|
2559
|
-
assert_equal File.stat('foo').uid, 1337
|
2560
|
-
assert_equal File.stat('foo').gid, 1338
|
2561
|
-
end
|
2562
|
-
|
2563
|
-
def test_file_umask
|
2564
|
-
assert_equal File.umask, RealFile.umask
|
2565
|
-
File.umask(0740)
|
2566
|
-
|
2567
|
-
assert_equal File.umask, RealFile.umask
|
2568
|
-
assert_equal File.umask, 0740
|
2569
|
-
end
|
2570
|
-
|
2571
|
-
def test_file_stat_comparable
|
2572
|
-
a_time = Time.new
|
2573
|
-
|
2574
|
-
same1 = File.new('s1', 'w')
|
2575
|
-
same2 = File.new('s2', 'w')
|
2576
|
-
different1 = File.new('d1', 'w')
|
2577
|
-
different2 = File.new('d2', 'w')
|
2578
|
-
|
2579
|
-
FakeFS::FileSystem.find('s1').mtime = a_time
|
2580
|
-
FakeFS::FileSystem.find('s2').mtime = a_time
|
2581
|
-
|
2582
|
-
FakeFS::FileSystem.find('d1').mtime = a_time
|
2583
|
-
FakeFS::FileSystem.find('d2').mtime = a_time + 1
|
2584
|
-
|
2585
|
-
assert same1.mtime == same2.mtime
|
2586
|
-
assert different1.mtime != different2.mtime
|
2587
|
-
|
2588
|
-
assert same1.stat == same2.stat
|
2589
|
-
assert((same1.stat <=> same2.stat) == 0)
|
2590
|
-
|
2591
|
-
assert different1.stat != different2.stat
|
2592
|
-
assert((different1.stat <=> different2.stat) == -1)
|
2593
|
-
end
|
2594
|
-
|
2595
|
-
def test_file_binread_works
|
2596
|
-
File.open('testfile', 'w') do |f|
|
2597
|
-
f << "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
|
2598
|
-
end
|
2599
|
-
|
2600
|
-
assert_equal File.binread('testfile'), "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
|
2601
|
-
assert_equal File.binread('testfile', 20), "This is line one\nThi"
|
2602
|
-
assert_equal File.binread('testfile', 20, 10), "ne one\nThis is line "
|
2603
|
-
end
|
2604
|
-
|
2605
|
-
def test_file_utils_compare_file
|
2606
|
-
file1 = 'file1.txt'
|
2607
|
-
file2 = 'file2.txt'
|
2608
|
-
file3 = 'file3.txt'
|
2609
|
-
content = "This is my \n file\content\n"
|
2610
|
-
File.open(file1, 'w') do |f|
|
2611
|
-
f.write content
|
2612
|
-
end
|
2613
|
-
File.open(file3, 'w') do |f|
|
2614
|
-
f.write "#{content} with additional content"
|
2615
|
-
end
|
2616
|
-
|
2617
|
-
FileUtils.cp file1, file2
|
2618
|
-
|
2619
|
-
assert_equal FileUtils.compare_file(file1, file2), true
|
2620
|
-
assert_equal FileUtils.compare_file(file1, file3), false
|
2621
|
-
assert_raises Errno::ENOENT do
|
2622
|
-
FileUtils.compare_file(file1, 'file4.txt')
|
2623
|
-
end
|
2624
|
-
end
|
2625
|
-
|
2626
|
-
def test_fnmatch
|
2627
|
-
assert_equal File.fnmatch?('test', 'test'), true
|
2628
|
-
assert_equal File.fnmatch('nope', 'blargh'), false
|
2629
|
-
assert_equal File.fnmatch?('nope', 'blargh'), File.fnmatch('nope', 'blargh')
|
2630
|
-
end
|
2631
|
-
|
2632
|
-
if RUBY_VERSION >= '1.9.1'
|
2633
|
-
def test_absolute_path_with_absolute_path
|
2634
|
-
assert_equal '/foo/bar', File.absolute_path('/foo/bar')
|
2635
|
-
end
|
2636
|
-
|
2637
|
-
def test_absolute_path_with_absolute_path_with_dir_name
|
2638
|
-
assert_equal '/foo/bar', File.absolute_path('/foo/bar', '/dir')
|
2639
|
-
end
|
2640
|
-
|
2641
|
-
def test_absolute_path_with_relative_path
|
2642
|
-
assert_equal "#{Dir.getwd}foo/bar", File.absolute_path('foo/bar')
|
2643
|
-
end
|
2644
|
-
|
2645
|
-
def test_absolute_path_with_relative_path_with_dir_name
|
2646
|
-
assert_equal '/dir/foo/bar', File.absolute_path('foo/bar', '/dir')
|
2647
|
-
end
|
2648
|
-
end
|
2649
|
-
|
2650
|
-
if RUBY_VERSION >= '1.9.2'
|
2651
|
-
def test_file_size
|
2652
|
-
File.open('foo', 'w') do |f|
|
2653
|
-
f << 'Yada Yada'
|
2654
|
-
assert_equal 9, f.size
|
2655
|
-
end
|
2656
|
-
end
|
2657
|
-
|
2658
|
-
def test_fdatasync
|
2659
|
-
File.open('foo', 'w') do |f|
|
2660
|
-
f << 'Yada Yada'
|
2661
|
-
# nothing raised
|
2662
|
-
f.fdatasync
|
2663
|
-
end
|
2664
|
-
end
|
2665
|
-
|
2666
|
-
def test_autoclose
|
2667
|
-
File.open('foo', 'w') do |f|
|
2668
|
-
assert_equal true, f.autoclose?
|
2669
|
-
f.autoclose = false
|
2670
|
-
assert_equal false, f.autoclose?
|
2671
|
-
end
|
2672
|
-
end
|
2673
|
-
|
2674
|
-
def test_to_path
|
2675
|
-
File.new('foo', 'w') do |f|
|
2676
|
-
assert_equal 'foo', f.to_path
|
2677
|
-
end
|
2678
|
-
end
|
2679
|
-
end
|
2680
|
-
|
2681
|
-
if RUBY_VERSION >= '1.9.3'
|
2682
|
-
def test_advise
|
2683
|
-
File.open('foo', 'w') do |f|
|
2684
|
-
# nothing raised
|
2685
|
-
f.advise(:normal, 0, 0)
|
2686
|
-
end
|
2687
|
-
end
|
2688
|
-
|
2689
|
-
def test_file_read_respects_hashes
|
2690
|
-
path = 'file.txt'
|
2691
|
-
File.open(path, 'w') do |f|
|
2692
|
-
f.write 'Yatta!'
|
2693
|
-
end
|
2694
|
-
|
2695
|
-
assert_equal 'ASCII-8BIT', File.read(path, mode: 'rb').encoding.to_s
|
2696
|
-
end
|
2697
|
-
|
2698
|
-
def test_file_read_respects_args_and_hashes
|
2699
|
-
path = 'file.txt'
|
2700
|
-
File.open(path, 'w') do |f|
|
2701
|
-
f.write 'Yatta!'
|
2702
|
-
end
|
2703
|
-
|
2704
|
-
result = File.read(path, 2, 1, mode: 'rb')
|
2705
|
-
assert_equal 'at', result
|
2706
|
-
assert_equal 'ASCII-8BIT', result.encoding.to_s
|
2707
|
-
end
|
2708
|
-
|
2709
|
-
def test_file_write_can_write_a_file
|
2710
|
-
File.write('testfile', '0123456789')
|
2711
|
-
assert_equal File.read('testfile'), '0123456789'
|
2712
|
-
end
|
2713
|
-
|
2714
|
-
def test_file_write_returns_the_length_written
|
2715
|
-
assert_equal File.write('testfile', '0123456789'), 10
|
2716
|
-
end
|
2717
|
-
|
2718
|
-
def test_file_write_truncates_file_if_offset_not_given
|
2719
|
-
File.open('foo', 'w') do |f|
|
2720
|
-
f << 'foo'
|
2721
|
-
end
|
2722
|
-
|
2723
|
-
File.write('foo', 'bar')
|
2724
|
-
assert_equal File.read('foo'), 'bar'
|
2725
|
-
end
|
2726
|
-
|
2727
|
-
def test_file_write_writes_at_offset_and_does_not_truncate
|
2728
|
-
File.open('foo', 'w') do |f|
|
2729
|
-
f << 'foo'
|
2730
|
-
end
|
2731
|
-
|
2732
|
-
File.write('foo', 'bar', 3)
|
2733
|
-
assert_equal File.read('foo'), 'foobar'
|
2734
|
-
end
|
2735
|
-
|
2736
|
-
def test_can_read_binary_data_in_binary_mode
|
2737
|
-
File.open('foo', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
|
2738
|
-
assert_equal "\x00\x00\x00\x03\x00\x03\x00\xA3\x00\x00\x00y\x00\x00\x00\x00\x00".force_encoding('ASCII-8BIT'), File.open('foo', 'rb').read
|
2739
|
-
end
|
2740
|
-
|
2741
|
-
def test_can_read_binary_data_in_non_binary_mode
|
2742
|
-
File.open('foo_non_bin', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
|
2743
|
-
assert_equal "\x00\x00\x00\x03\x00\x03\x00\xA3\x00\x00\x00y\x00\x00\x00\x00\x00".force_encoding('UTF-8'), File.open('foo_non_bin', 'r').read
|
2744
|
-
end
|
2745
|
-
|
2746
|
-
def test_can_read_binary_data_using_binread
|
2747
|
-
File.open('foo', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
|
2748
|
-
assert_equal "\x00\x00\x00\x03\x00\x03\x00\xA3\x00\x00\x00y\x00\x00\x00\x00\x00".force_encoding('ASCII-8BIT'), File.binread('foo')
|
2749
|
-
end
|
2750
|
-
end
|
2751
|
-
|
2752
|
-
if RUBY_VERSION >= '2.2.0'
|
2753
|
-
def test_raises_error_on_birthtime_if_file_does_not_exist
|
2754
|
-
assert_raises Errno::ENOENT do
|
2755
|
-
File.birthtime('file.txt')
|
2756
|
-
end
|
2757
|
-
end
|
2758
|
-
|
2759
|
-
def test_can_return_birthtime_on_existing_file
|
2760
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
2761
|
-
assert File.birthtime('foo').is_a?(Time)
|
2762
|
-
end
|
2763
|
-
|
2764
|
-
def test_file_birthtime_is_equal_to_file_stat_birthtime
|
2765
|
-
File.open('foo', 'w') { |f| f << 'some content' }
|
2766
|
-
assert_equal File.stat('foo').birthtime, File.birthtime('foo')
|
2767
|
-
end
|
2768
|
-
end
|
2769
|
-
end
|