fakefs 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTORS +6 -1
- data/README.markdown +7 -0
- data/fakefs.gemspec +2 -3
- data/lib/fakefs/dir.rb +21 -5
- data/lib/fakefs/fake/symlink.rb +5 -2
- data/lib/fakefs/file.rb +23 -4
- data/lib/fakefs/file_system.rb +4 -2
- data/lib/fakefs/file_test.rb +4 -0
- data/lib/fakefs/fileutils.rb +10 -2
- data/lib/fakefs/version.rb +1 -1
- data/test/fakefs_test.rb +201 -43
- data/test/safe_test.rb +1 -1
- data/test/verify.rb +1 -1
- metadata +2 -3
- data/Gemfile.lock +0 -35
data/CONTRIBUTORS
CHANGED
@@ -4,27 +4,32 @@ Chris Wanstrath <chris@ozmm.org>
|
|
4
4
|
Myles Eftos <myles@madpilot.com.au>
|
5
5
|
Jeff Hodges <jeff@somethingsimilar.com>
|
6
6
|
Matt Freels <matt@freels.name>
|
7
|
+
Eero Saynatkari <projects@kittensoft.org>
|
7
8
|
Víctor Martínez <knoopx@gmail.com>
|
8
9
|
Nick Quaranto <nick@quaran.to>
|
9
10
|
Aaron Suggs <aaron@ktheory.com>
|
10
11
|
Victor Costan <costan@gmail.com>
|
11
12
|
Eric MSP Veith <eveith@wwweb-library.net>
|
12
13
|
Jon Yurek <jyurek@thoughtbot.com>
|
14
|
+
Jared Luxenberg <jared@jaredlux.com>
|
15
|
+
Lars Gierth <lars.gierth@gmail.com>
|
13
16
|
Greg Campbell <gtcampbell@gmail.com>
|
14
17
|
Ben Mabey <ben@benmabey.com>
|
15
18
|
Mark <mark@amerine.net>
|
16
19
|
Sam Goldstein <sam@aboutus.org>
|
20
|
+
Ryan McGeary <ryan@mcgeary.org>
|
17
21
|
Noah Paessel <knowuh@gmail.com>
|
18
22
|
dmathieu <42@dmathieu.com>
|
19
23
|
Mariusz Pietrzyk <wijet@wijet.pl>
|
20
|
-
Lars Gierth <lars.gierth@gmail.com>
|
21
24
|
marano <thiagomarano@gmail.com>
|
22
25
|
jameswilding <james@jameswilding.net>
|
23
26
|
Tymon Tobolski <i@teamon.eu>
|
24
27
|
Scott Barron <scott@elitists.net>
|
28
|
+
Andrius Chamentauskas <andrius.chamentauskas@gmail.com>
|
25
29
|
Keita Urashima <ursm@ursm.jp>
|
26
30
|
David Reese <david@whatcould.com>
|
27
31
|
msassak <msassak@gmail.com>
|
32
|
+
Andrius Chamentauskas <sinsiliux@gmail.com>
|
28
33
|
timo3377 <tim.linquist@gmail.com>
|
29
34
|
Mislav Marohnić <mislav.marohnic@gmail.com>
|
30
35
|
Rob Sanheim <rsanheim@gmail.com>
|
data/README.markdown
CHANGED
@@ -47,6 +47,13 @@ Don't Fake the FS Immediately
|
|
47
47
|
# your code
|
48
48
|
end
|
49
49
|
|
50
|
+
Rails
|
51
|
+
-----
|
52
|
+
|
53
|
+
If you are using fakefs in a rails project with bundler, you'll probably want to specify the following in your Gemfile:
|
54
|
+
|
55
|
+
gem "fakefs", :require => "fakefs/safe"
|
56
|
+
|
50
57
|
|
51
58
|
RSpec
|
52
59
|
-----
|
data/fakefs.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fakefs}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chris Wanstrath", "Scott Taylor", "Jeff Hodges", "Pat Nakajima"]
|
12
|
-
s.date = %q{2011-05
|
12
|
+
s.date = %q{2011-09-05}
|
13
13
|
s.description = %q{A fake filesystem. Use it in your tests.}
|
14
14
|
s.email = %q{chris@ozmm.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -21,7 +21,6 @@ Gem::Specification.new do |s|
|
|
21
21
|
".rspec",
|
22
22
|
"CONTRIBUTORS",
|
23
23
|
"Gemfile",
|
24
|
-
"Gemfile.lock",
|
25
24
|
"LICENSE",
|
26
25
|
"README.markdown",
|
27
26
|
"Rakefile",
|
data/lib/fakefs/dir.rb
CHANGED
@@ -2,8 +2,13 @@ module FakeFS
|
|
2
2
|
class Dir
|
3
3
|
include Enumerable
|
4
4
|
|
5
|
+
def self._check_for_valid_file(path)
|
6
|
+
raise Errno::ENOENT, "No such file or directory - #{path}" unless FileSystem.find(path)
|
7
|
+
end
|
8
|
+
|
5
9
|
def initialize(string)
|
6
|
-
|
10
|
+
self.class._check_for_valid_file(string)
|
11
|
+
|
7
12
|
@path = string
|
8
13
|
@open = true
|
9
14
|
@pointer = 0
|
@@ -56,21 +61,28 @@ module FakeFS
|
|
56
61
|
glob(pattern)
|
57
62
|
end
|
58
63
|
|
64
|
+
def self.exists?(path)
|
65
|
+
File.exists?(path) && File.directory?(path)
|
66
|
+
end
|
67
|
+
|
59
68
|
def self.chdir(dir, &blk)
|
60
69
|
FileSystem.chdir(dir, &blk)
|
61
70
|
end
|
62
71
|
|
63
72
|
def self.chroot(string)
|
64
|
-
|
73
|
+
raise NotImplementedError
|
65
74
|
end
|
66
75
|
|
67
76
|
def self.delete(string)
|
68
|
-
|
77
|
+
_check_for_valid_file(string)
|
78
|
+
raise Errno::ENOTEMPTY, "Directory not empty - #{string}" unless FileSystem.find(string).values.empty?
|
79
|
+
|
69
80
|
FileSystem.delete(string)
|
70
81
|
end
|
71
82
|
|
72
83
|
def self.entries(dirname)
|
73
|
-
|
84
|
+
_check_for_valid_file(dirname)
|
85
|
+
|
74
86
|
Dir.new(dirname).map { |file| File.basename(file) }
|
75
87
|
end
|
76
88
|
|
@@ -86,8 +98,12 @@ module FakeFS
|
|
86
98
|
def self.mkdir(string, integer = 0)
|
87
99
|
parent = string.split('/')
|
88
100
|
parent.pop
|
89
|
-
|
101
|
+
|
102
|
+
joined_parent_path = parent.join
|
103
|
+
|
104
|
+
_check_for_valid_file(joined_parent_path) unless joined_parent_path == ""
|
90
105
|
raise Errno::EEXIST, "File exists - #{string}" if File.exists?(string)
|
106
|
+
|
91
107
|
FileUtils.mkdir_p(string)
|
92
108
|
end
|
93
109
|
|
data/lib/fakefs/fake/symlink.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module FakeFS
|
2
2
|
class FakeSymlink
|
3
|
-
attr_accessor :name, :target
|
4
|
-
alias_method :to_s, :name
|
3
|
+
attr_accessor :name, :target, :parent
|
5
4
|
|
6
5
|
def initialize(target)
|
7
6
|
@target = target
|
@@ -19,6 +18,10 @@ module FakeFS
|
|
19
18
|
parent.delete(self)
|
20
19
|
end
|
21
20
|
|
21
|
+
def to_s
|
22
|
+
File.join(parent.to_s, name)
|
23
|
+
end
|
24
|
+
|
22
25
|
def respond_to?(method)
|
23
26
|
entry.respond_to?(method)
|
24
27
|
end
|
data/lib/fakefs/file.rb
CHANGED
@@ -37,7 +37,12 @@ module FakeFS
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.exist?(path)
|
40
|
-
|
40
|
+
if(File.symlink?(path)) then
|
41
|
+
referent = File.expand_path(File.readlink(path), File.dirname(path))
|
42
|
+
exist?(referent)
|
43
|
+
else
|
44
|
+
!!FileSystem.find(path)
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
class << self
|
@@ -132,7 +137,7 @@ module FakeFS
|
|
132
137
|
|
133
138
|
def self.readlink(path)
|
134
139
|
symlink = FileSystem.find(path)
|
135
|
-
|
140
|
+
symlink.target
|
136
141
|
end
|
137
142
|
|
138
143
|
def self.read(path)
|
@@ -358,7 +363,7 @@ module FakeFS
|
|
358
363
|
end
|
359
364
|
|
360
365
|
def to_path
|
361
|
-
|
366
|
+
@path
|
362
367
|
end
|
363
368
|
end
|
364
369
|
|
@@ -398,8 +403,22 @@ module FakeFS
|
|
398
403
|
(@mode & mask) != 0 if @mode.is_a?(Integer)
|
399
404
|
end
|
400
405
|
|
406
|
+
# Create a missing file if the path is valid.
|
407
|
+
#
|
401
408
|
def create_missing_file
|
402
|
-
if
|
409
|
+
raise Errno::EISDIR, "Is a directory - #{path}" if File.directory?(@path)
|
410
|
+
|
411
|
+
if !File.exists?(@path) # Unnecessary check, probably.
|
412
|
+
dirname = RealFile.dirname @path
|
413
|
+
|
414
|
+
unless dirname == "."
|
415
|
+
dir = FileSystem.find dirname
|
416
|
+
|
417
|
+
unless dir.kind_of? FakeDir
|
418
|
+
raise Errno::ENOENT, "No such file or directory - #{path}"
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
403
422
|
@file = FileSystem.add(path, FakeFile.new)
|
404
423
|
end
|
405
424
|
end
|
data/lib/fakefs/file_system.rb
CHANGED
@@ -7,7 +7,7 @@ module FakeFS
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def fs
|
10
|
-
@fs ||= FakeDir.new('
|
10
|
+
@fs ||= FakeDir.new('/')
|
11
11
|
end
|
12
12
|
|
13
13
|
def clear
|
@@ -68,6 +68,7 @@ module FakeFS
|
|
68
68
|
def delete(path)
|
69
69
|
if node = FileSystem.find(path)
|
70
70
|
node.delete
|
71
|
+
true
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
@@ -121,7 +122,8 @@ module FakeFS
|
|
121
122
|
directories_under(dir)
|
122
123
|
end
|
123
124
|
else
|
124
|
-
|
125
|
+
regexp_pattern = /\A#{pattern.gsub('?','.').gsub('*', '.*').gsub(/\{(.*?)\}/) { "(#{$1.gsub(',', '|')})" }}\Z/
|
126
|
+
dir.reject {|k,v| regexp_pattern !~ k }.values
|
125
127
|
end
|
126
128
|
|
127
129
|
if parts.empty? # we're done recursing
|
data/lib/fakefs/file_test.rb
CHANGED
data/lib/fakefs/fileutils.rb
CHANGED
@@ -30,7 +30,7 @@ module FakeFS
|
|
30
30
|
|
31
31
|
def rm(list, options = {})
|
32
32
|
Array(list).each do |path|
|
33
|
-
FileSystem.delete(path)
|
33
|
+
FileSystem.delete(path) or raise Errno::ENOENT.new(path)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -40,9 +40,17 @@ module FakeFS
|
|
40
40
|
|
41
41
|
def ln_s(target, path, options = {})
|
42
42
|
options = { :force => false }.merge(options)
|
43
|
-
(FileSystem.find(path)
|
43
|
+
(FileSystem.find(path) && !options[:force]) ?
|
44
|
+
raise(Errno::EEXIST, path) :
|
45
|
+
FileSystem.delete(path)
|
46
|
+
|
47
|
+
if !options[:force] && !Dir.exists?(File.dirname(path))
|
48
|
+
raise Errno::ENOENT, path
|
49
|
+
end
|
50
|
+
|
44
51
|
FileSystem.add(path, FakeSymlink.new(target))
|
45
52
|
end
|
53
|
+
|
46
54
|
def ln_sf(target, path)
|
47
55
|
ln_s(target, path, { :force => true })
|
48
56
|
end
|
data/lib/fakefs/version.rb
CHANGED
data/test/fakefs_test.rb
CHANGED
@@ -65,6 +65,12 @@ class FakeFSTest < Test::Unit::TestCase
|
|
65
65
|
assert_kind_of FakeDir, FileSystem.fs['path']['to']['dir']
|
66
66
|
end
|
67
67
|
|
68
|
+
def test_unlink_errors_on_file_not_found
|
69
|
+
assert_raise Errno::ENOENT do
|
70
|
+
FileUtils.rm("/foo")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
68
74
|
def test_can_delete_directories
|
69
75
|
FileUtils.mkdir_p("/path/to/dir")
|
70
76
|
FileUtils.rmdir("/path/to/dir")
|
@@ -111,6 +117,11 @@ class FakeFSTest < Test::Unit::TestCase
|
|
111
117
|
assert File.exists?(path)
|
112
118
|
end
|
113
119
|
|
120
|
+
def test_symlink_with_missing_refferent_does_not_exist
|
121
|
+
File.symlink('/foo', '/bar')
|
122
|
+
assert !File.exists?('/bar')
|
123
|
+
end
|
124
|
+
|
114
125
|
def test_can_create_symlinks
|
115
126
|
FileUtils.mkdir_p(target = "/path/to/target")
|
116
127
|
FileUtils.ln_s(target, "/path/to/link")
|
@@ -141,14 +152,63 @@ class FakeFSTest < Test::Unit::TestCase
|
|
141
152
|
assert_equal target, File.readlink(link)
|
142
153
|
end
|
143
154
|
|
155
|
+
def test_symlinks_in_different_directories
|
156
|
+
FileUtils.mkdir_p("/path/to/bar")
|
157
|
+
FileUtils.mkdir_p(target = "/path/to/foo/target")
|
158
|
+
|
159
|
+
FileUtils.ln_s(target, link = "/path/to/bar/symlink")
|
160
|
+
assert_equal target, File.readlink(link)
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_symlink_with_relative_path_exists
|
164
|
+
FileUtils.touch("/file")
|
165
|
+
FileUtils.mkdir_p("/a/b")
|
166
|
+
FileUtils.ln_s("../../file", link = "/a/b/symlink")
|
167
|
+
assert File.exist?('/a/b/symlink')
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_symlink_with_relative_path_and_nonexistant_file_does_not_exist
|
171
|
+
FileUtils.touch("/file")
|
172
|
+
FileUtils.mkdir_p("/a/b")
|
173
|
+
FileUtils.ln_s("../../file_foo", link = "/a/b/symlink")
|
174
|
+
assert !File.exist?('/a/b/symlink')
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_symlink_with_relative_path_has_correct_target
|
178
|
+
FileUtils.touch("/file")
|
179
|
+
FileUtils.mkdir_p("/a/b")
|
180
|
+
FileUtils.ln_s("../../file", link = "/a/b/symlink")
|
181
|
+
assert_equal "../../file", File.readlink(link)
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_symlinks_to_symlinks
|
185
|
+
FileUtils.mkdir_p(target = "/path/to/foo/target")
|
186
|
+
FileUtils.mkdir_p("/path/to/bar")
|
187
|
+
FileUtils.mkdir_p("/path/to/bar2")
|
188
|
+
|
189
|
+
FileUtils.ln_s(target, link1 = "/path/to/bar/symlink")
|
190
|
+
FileUtils.ln_s(link1, link2 = "/path/to/bar2/symlink")
|
191
|
+
assert_equal link1, File.readlink(link2)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_symlink_to_symlinks_should_raise_error_if_dir_doesnt_exist
|
195
|
+
FileUtils.mkdir_p(target = "/path/to/foo/target")
|
196
|
+
|
197
|
+
assert !Dir.exists?("/path/to/bar")
|
198
|
+
|
199
|
+
assert_raise Errno::ENOENT do
|
200
|
+
FileUtils.ln_s(target, "/path/to/bar/symlink")
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
144
204
|
def test_knows_symlinks_are_symlinks
|
145
205
|
FileUtils.mkdir_p(target = "/path/to/target")
|
146
206
|
FileUtils.ln_s(target, link = "/path/to/symlink")
|
147
207
|
assert File.symlink?(link)
|
148
208
|
end
|
149
209
|
|
150
|
-
def
|
151
|
-
path = '
|
210
|
+
def test_can_create_files_in_current_dir
|
211
|
+
path = 'file.txt'
|
152
212
|
File.open(path, 'w') do |f|
|
153
213
|
f.write "Yatta!"
|
154
214
|
end
|
@@ -158,7 +218,74 @@ class FakeFSTest < Test::Unit::TestCase
|
|
158
218
|
assert File.writable?(path)
|
159
219
|
end
|
160
220
|
|
221
|
+
def test_can_create_files_in_existing_dir
|
222
|
+
FileUtils.mkdir_p "/path/to"
|
223
|
+
path = "/path/to/file.txt"
|
224
|
+
|
225
|
+
File.open(path, 'w') do |f|
|
226
|
+
f.write "Yatta!"
|
227
|
+
end
|
228
|
+
|
229
|
+
assert File.exists?(path)
|
230
|
+
assert File.readable?(path)
|
231
|
+
assert File.writable?(path)
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_raises_ENOENT_trying_to_create_files_in_nonexistent_dir
|
235
|
+
path = "/path/to/file.txt"
|
236
|
+
|
237
|
+
assert_raises(Errno::ENOENT) {
|
238
|
+
File.open(path, 'w') do |f|
|
239
|
+
f.write "Yatta!"
|
240
|
+
end
|
241
|
+
}
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_raises_ENOENT_trying_to_create_files_in_relative_nonexistent_dir
|
245
|
+
FileUtils.mkdir_p "/some/path"
|
246
|
+
|
247
|
+
Dir.chdir("/some/path") {
|
248
|
+
assert_raises(Errno::ENOENT) {
|
249
|
+
File.open("../foo") {|f| f.write "moo" }
|
250
|
+
}
|
251
|
+
}
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_raises_ENOENT_trying_to_create_files_in_obscured_nonexistent_dir
|
255
|
+
FileUtils.mkdir_p "/some/path"
|
256
|
+
|
257
|
+
assert_raises(Errno::ENOENT) {
|
258
|
+
File.open("/some/path/../foo") {|f| f.write "moo" }
|
259
|
+
}
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_raises_ENOENT_trying_to_create_tilde_referenced_nonexistent_dir
|
263
|
+
path = "~/fakefs_test_#{$$}_0000"
|
264
|
+
|
265
|
+
while File.exist? path
|
266
|
+
path = path.succ
|
267
|
+
end
|
268
|
+
|
269
|
+
assert_raises(Errno::ENOENT) {
|
270
|
+
File.open("#{path}/foo") {|f| f.write "moo" }
|
271
|
+
}
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_raises_EISDIR_if_trying_to_open_existing_directory_name
|
275
|
+
path = "/path/to"
|
276
|
+
|
277
|
+
FileUtils.mkdir_p path
|
278
|
+
|
279
|
+
assert_raises(Errno::EISDIR) {
|
280
|
+
File.open(path, 'w') do |f|
|
281
|
+
f.write "Yatta!"
|
282
|
+
end
|
283
|
+
}
|
284
|
+
end
|
285
|
+
|
161
286
|
def test_can_create_files_with_bitmasks
|
287
|
+
FileUtils.mkdir_p("/path/to")
|
288
|
+
|
162
289
|
path = '/path/to/file.txt'
|
163
290
|
File.open(path, File::RDWR | File::CREAT) do |f|
|
164
291
|
f.write "Yatta!"
|
@@ -277,7 +404,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
277
404
|
end
|
278
405
|
|
279
406
|
def test_can_read_files_once_written
|
280
|
-
path = '
|
407
|
+
path = 'file.txt'
|
281
408
|
File.open(path, 'w') do |f|
|
282
409
|
f.write "Yatta!"
|
283
410
|
end
|
@@ -286,7 +413,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
286
413
|
end
|
287
414
|
|
288
415
|
def test_can_write_to_files
|
289
|
-
path = '
|
416
|
+
path = 'file.txt'
|
290
417
|
File.open(path, 'w') do |f|
|
291
418
|
f << 'Yada Yada'
|
292
419
|
end
|
@@ -300,11 +427,12 @@ class FakeFSTest < Test::Unit::TestCase
|
|
300
427
|
end
|
301
428
|
|
302
429
|
def test_can_open_file_in_binary_mode
|
303
|
-
File.open("
|
304
|
-
assert_equal "a", File.read("
|
430
|
+
File.open("foo", "wb") { |x| x << "a" }
|
431
|
+
assert_equal "a", File.read("foo")
|
305
432
|
end
|
306
433
|
|
307
434
|
def test_can_chunk_io_when_reading
|
435
|
+
FileUtils.mkdir_p "/path/to"
|
308
436
|
path = '/path/to/file.txt'
|
309
437
|
File.open(path, 'w') do |f|
|
310
438
|
f << 'Yada Yada'
|
@@ -318,7 +446,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
318
446
|
end
|
319
447
|
|
320
448
|
def test_can_get_size_of_files
|
321
|
-
path = '
|
449
|
+
path = 'file.txt'
|
322
450
|
File.open(path, 'w') do |f|
|
323
451
|
f << 'Yada Yada'
|
324
452
|
end
|
@@ -326,20 +454,20 @@ class FakeFSTest < Test::Unit::TestCase
|
|
326
454
|
end
|
327
455
|
|
328
456
|
def test_can_check_if_file_has_size?
|
329
|
-
path = '
|
457
|
+
path = 'file.txt'
|
330
458
|
File.open(path, 'w') do |f|
|
331
459
|
f << 'Yada Yada'
|
332
460
|
end
|
333
461
|
assert File.size?(path)
|
334
|
-
assert_nil File.size?("
|
462
|
+
assert_nil File.size?("other.txt")
|
335
463
|
end
|
336
464
|
|
337
465
|
def test_can_check_size_of_empty_file
|
338
|
-
path = '
|
466
|
+
path = 'file.txt'
|
339
467
|
File.open(path, 'w') do |f|
|
340
468
|
f << ''
|
341
469
|
end
|
342
|
-
assert_nil File.size?("
|
470
|
+
assert_nil File.size?("file.txt")
|
343
471
|
end
|
344
472
|
|
345
473
|
def test_raises_error_on_mtime_if_file_does_not_exist
|
@@ -349,16 +477,16 @@ class FakeFSTest < Test::Unit::TestCase
|
|
349
477
|
end
|
350
478
|
|
351
479
|
def test_can_return_mtime_on_existing_file
|
352
|
-
path = '
|
480
|
+
path = 'file.txt'
|
353
481
|
File.open(path, 'w') do |f|
|
354
482
|
f << ''
|
355
483
|
end
|
356
|
-
assert File.mtime('
|
484
|
+
assert File.mtime('file.txt').is_a?(Time)
|
357
485
|
end
|
358
486
|
|
359
487
|
def test_raises_error_on_ctime_if_file_does_not_exist
|
360
488
|
assert_raise Errno::ENOENT do
|
361
|
-
File.ctime('
|
489
|
+
File.ctime('file.txt')
|
362
490
|
end
|
363
491
|
end
|
364
492
|
|
@@ -418,16 +546,16 @@ class FakeFSTest < Test::Unit::TestCase
|
|
418
546
|
|
419
547
|
def test_can_call_utime_on_an_existing_file
|
420
548
|
time = Time.now - 300 # Not now
|
421
|
-
path = '
|
549
|
+
path = 'file.txt'
|
422
550
|
File.open(path, 'w') do |f|
|
423
551
|
f << ''
|
424
552
|
end
|
425
553
|
File.utime(time, time, path)
|
426
|
-
assert_equal time, File.mtime('
|
554
|
+
assert_equal time, File.mtime('file.txt')
|
427
555
|
end
|
428
556
|
|
429
557
|
def test_utime_returns_number_of_paths
|
430
|
-
path1, path2 = '
|
558
|
+
path1, path2 = 'file.txt', 'another_file.txt'
|
431
559
|
[path1, path2].each do |path|
|
432
560
|
File.open(path, 'w') do |f|
|
433
561
|
f << ''
|
@@ -437,7 +565,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
437
565
|
end
|
438
566
|
|
439
567
|
def test_can_read_with_File_readlines
|
440
|
-
path = '
|
568
|
+
path = 'file.txt'
|
441
569
|
File.open(path, 'w') do |f|
|
442
570
|
f.puts "Yatta!", "Gatta!"
|
443
571
|
f.puts ["woot","toot"]
|
@@ -447,7 +575,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
447
575
|
end
|
448
576
|
|
449
577
|
def test_File_close_disallows_further_access
|
450
|
-
path = '
|
578
|
+
path = 'file.txt'
|
451
579
|
file = File.open(path, 'w')
|
452
580
|
file.write 'Yada'
|
453
581
|
file.close
|
@@ -457,7 +585,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
457
585
|
end
|
458
586
|
|
459
587
|
def test_File_close_disallows_further_writes
|
460
|
-
path = '
|
588
|
+
path = 'file.txt'
|
461
589
|
file = File.open(path, 'w')
|
462
590
|
file.write 'Yada'
|
463
591
|
file.close
|
@@ -467,7 +595,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
467
595
|
end
|
468
596
|
|
469
597
|
def test_can_read_from_file_objects
|
470
|
-
path = '
|
598
|
+
path = 'file.txt'
|
471
599
|
File.open(path, 'w') do |f|
|
472
600
|
f.write "Yatta!"
|
473
601
|
end
|
@@ -482,7 +610,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
482
610
|
end
|
483
611
|
|
484
612
|
def test_knows_files_are_files
|
485
|
-
path = '
|
613
|
+
path = 'file.txt'
|
486
614
|
File.open(path, 'w') do |f|
|
487
615
|
f.write "Yatta!"
|
488
616
|
end
|
@@ -491,17 +619,17 @@ class FakeFSTest < Test::Unit::TestCase
|
|
491
619
|
end
|
492
620
|
|
493
621
|
def test_File_io_returns_self
|
494
|
-
f = File.open("
|
622
|
+
f = File.open("foo", "w")
|
495
623
|
assert_equal f, f.to_io
|
496
624
|
end
|
497
625
|
|
498
626
|
def test_File_to_i_is_alias_for_filno
|
499
|
-
f = File.open("
|
627
|
+
f = File.open("foo", "w")
|
500
628
|
assert_equal f.method(:to_i), f.method(:fileno)
|
501
629
|
end
|
502
630
|
|
503
631
|
def test_knows_symlink_files_are_files
|
504
|
-
path = '
|
632
|
+
path = 'file.txt'
|
505
633
|
File.open(path, 'w') do |f|
|
506
634
|
f.write "Yatta!"
|
507
635
|
end
|
@@ -573,16 +701,21 @@ class FakeFSTest < Test::Unit::TestCase
|
|
573
701
|
FileUtils.cp_r '/path', '/otherpath'
|
574
702
|
|
575
703
|
assert_equal %w( /otherpath/foo /otherpath/foobar /path/foo /path/foobar ), Dir['/*/foo*']
|
704
|
+
|
705
|
+
assert_equal ['/path/bar', '/path/foo'], Dir['/path/{foo,bar}']
|
706
|
+
|
707
|
+
assert_equal ['/path/bar', '/path/bar2'], Dir['/path/bar{2,}']
|
576
708
|
end
|
577
709
|
|
578
710
|
def test_dir_glob_handles_root
|
579
711
|
FileUtils.mkdir_p '/path'
|
580
712
|
|
581
713
|
# this fails. the root dir should be named '/' but it is '.'
|
582
|
-
|
714
|
+
assert_equal ['/'], Dir['/']
|
583
715
|
end
|
584
716
|
|
585
717
|
def test_dir_glob_handles_recursive_globs
|
718
|
+
FileUtils.mkdir_p "/one/two/three"
|
586
719
|
File.open('/one/two/three/four.rb', 'w')
|
587
720
|
File.open('/one/five.rb', 'w')
|
588
721
|
assert_equal ['/one/five.rb', '/one/two/three/four.rb'], Dir['/one/**/*.rb']
|
@@ -591,6 +724,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
591
724
|
end
|
592
725
|
|
593
726
|
def test_dir_recursive_glob_ending_in_wildcards_returns_both_files_and_dirs
|
727
|
+
FileUtils.mkdir_p "/one/two/three"
|
594
728
|
File.open('/one/two/three/four.rb', 'w')
|
595
729
|
File.open('/one/five.rb', 'w')
|
596
730
|
assert_equal ['/one/five.rb', '/one/two', '/one/two/three', '/one/two/three/four.rb'], Dir['/one/**/*']
|
@@ -608,7 +742,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
608
742
|
end
|
609
743
|
|
610
744
|
def test_should_report_pos_as_0_when_opening
|
611
|
-
File.open("
|
745
|
+
File.open("foo", "w") do |f|
|
612
746
|
f << "foobar"
|
613
747
|
f.rewind
|
614
748
|
|
@@ -617,7 +751,7 @@ class FakeFSTest < Test::Unit::TestCase
|
|
617
751
|
end
|
618
752
|
|
619
753
|
def test_should_report_pos_as_1_when_seeking_one_char
|
620
|
-
File.open("
|
754
|
+
File.open("foo", "w") do |f|
|
621
755
|
f << "foobar"
|
622
756
|
|
623
757
|
f.rewind
|
@@ -628,22 +762,22 @@ class FakeFSTest < Test::Unit::TestCase
|
|
628
762
|
end
|
629
763
|
|
630
764
|
def test_should_set_pos
|
631
|
-
File.open("
|
765
|
+
File.open("foo", "w") do |f|
|
632
766
|
f << "foo"
|
633
767
|
end
|
634
768
|
|
635
|
-
fp = File.open("
|
769
|
+
fp = File.open("foo", "r")
|
636
770
|
fp.pos = 1
|
637
771
|
|
638
772
|
assert_equal 1, fp.pos
|
639
773
|
end
|
640
774
|
|
641
775
|
def test_should_set_pos_with_tell_method
|
642
|
-
File.open("
|
776
|
+
File.open("foo", "w") do |f|
|
643
777
|
f << "foo"
|
644
778
|
end
|
645
779
|
|
646
|
-
fp = File.open("
|
780
|
+
fp = File.open("foo", "r")
|
647
781
|
fp.tell = 1
|
648
782
|
|
649
783
|
assert_equal 1, fp.pos
|
@@ -673,14 +807,14 @@ class FakeFSTest < Test::Unit::TestCase
|
|
673
807
|
def test_chdir_changes_directories_like_a_boss
|
674
808
|
# I know memes!
|
675
809
|
FileUtils.mkdir_p '/path'
|
676
|
-
assert_equal '
|
810
|
+
assert_equal '/', FileSystem.fs.name
|
677
811
|
assert_equal({}, FileSystem.fs['path'])
|
678
812
|
Dir.chdir '/path' do
|
679
813
|
File.open('foo', 'w') { |f| f.write 'foo'}
|
680
814
|
File.open('foobar', 'w') { |f| f.write 'foo'}
|
681
815
|
end
|
682
816
|
|
683
|
-
assert_equal '
|
817
|
+
assert_equal '/', FileSystem.fs.name
|
684
818
|
assert_equal(['foo', 'foobar'], FileSystem.fs['path'].keys.sort)
|
685
819
|
|
686
820
|
c = nil
|
@@ -1211,11 +1345,17 @@ class FakeFSTest < Test::Unit::TestCase
|
|
1211
1345
|
FileUtils.touch("/this/path/should/be/here/#{f}")
|
1212
1346
|
end
|
1213
1347
|
|
1214
|
-
assert_raises(
|
1348
|
+
assert_raises(Errno::ENOTEMPTY) do
|
1215
1349
|
Dir.delete('/this/path/should/be/here')
|
1216
1350
|
end
|
1217
1351
|
end
|
1218
1352
|
|
1353
|
+
def test_directory_class_delete_does_not_work_if_dir_path_cannot_be_found
|
1354
|
+
assert_raises(Errno::ENOENT) do
|
1355
|
+
Dir.delete('/this/path/should/not/be/here')
|
1356
|
+
end
|
1357
|
+
end
|
1358
|
+
|
1219
1359
|
def test_directory_entries
|
1220
1360
|
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5' ]
|
1221
1361
|
|
@@ -1244,6 +1384,12 @@ class FakeFSTest < Test::Unit::TestCase
|
|
1244
1384
|
test.each { |t| assert yielded.include?(t) }
|
1245
1385
|
end
|
1246
1386
|
|
1387
|
+
def test_directory_entries_does_not_work_if_dir_path_cannot_be_found
|
1388
|
+
assert_raises(Errno::ENOENT) do
|
1389
|
+
Dir.delete('/this/path/should/not/be/here')
|
1390
|
+
end
|
1391
|
+
end
|
1392
|
+
|
1247
1393
|
def test_directory_foreach
|
1248
1394
|
test = ['.', '..', 'file_1', 'file_2', 'file_3', 'file_4', 'file_5' ]
|
1249
1395
|
|
@@ -1468,14 +1614,6 @@ class FakeFSTest < Test::Unit::TestCase
|
|
1468
1614
|
end
|
1469
1615
|
end
|
1470
1616
|
|
1471
|
-
def test_delete_does_not_raise_error_when_second_file_does_not_exist
|
1472
|
-
FileUtils.touch("/foo")
|
1473
|
-
|
1474
|
-
assert_nothing_raised do
|
1475
|
-
File.delete("/foo", "/bar")
|
1476
|
-
end
|
1477
|
-
end
|
1478
|
-
|
1479
1617
|
def test_unlink_is_alias_for_delete
|
1480
1618
|
assert_equal File.method(:unlink), File.method(:delete)
|
1481
1619
|
end
|
@@ -1584,6 +1722,20 @@ class FakeFSTest < Test::Unit::TestCase
|
|
1584
1722
|
assert !FileTest.directory?('/path/to/somedir')
|
1585
1723
|
end
|
1586
1724
|
|
1725
|
+
def test_filetest_file_returns_correct_values
|
1726
|
+
FileUtils.mkdir_p("/path/to")
|
1727
|
+
|
1728
|
+
path = '/path/to/file.txt'
|
1729
|
+
File.open(path, 'w') { |f| f.write "Yatta!" }
|
1730
|
+
assert FileTest.file?(path)
|
1731
|
+
|
1732
|
+
FileUtils.rm path
|
1733
|
+
assert !FileTest.file?(path)
|
1734
|
+
|
1735
|
+
FileUtils.mkdir_p '/path/to/somedir'
|
1736
|
+
assert !FileTest.file?('/path/to/somedir')
|
1737
|
+
end
|
1738
|
+
|
1587
1739
|
def test_pathname_exists_returns_correct_value
|
1588
1740
|
FileUtils.touch "foo"
|
1589
1741
|
assert Pathname.new("foo").exist?
|
@@ -1651,5 +1803,11 @@ class FakeFSTest < Test::Unit::TestCase
|
|
1651
1803
|
assert_equal false, f.autoclose?
|
1652
1804
|
end
|
1653
1805
|
end
|
1806
|
+
|
1807
|
+
def test_to_path
|
1808
|
+
File.new("foo", 'w') do |f|
|
1809
|
+
assert_equal "foo", f.to_path
|
1810
|
+
end
|
1811
|
+
end
|
1654
1812
|
end
|
1655
1813
|
end
|
data/test/safe_test.rb
CHANGED
data/test/verify.rb
CHANGED
@@ -24,7 +24,7 @@ class FakeFSVerifierTest < Test::Unit::TestCase
|
|
24
24
|
|
25
25
|
real_class.instance_methods.each do |method|
|
26
26
|
define_method("test #{method} instance method") do
|
27
|
-
assert fake_class.instance_methods.include?(method), "#{fake_class}##{
|
27
|
+
assert fake_class.instance_methods.include?(method), "#{fake_class}##{method} not implemented"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: fakefs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chris Wanstrath
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2011-05
|
16
|
+
date: 2011-09-05 00:00:00 -04:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
@@ -74,7 +74,6 @@ files:
|
|
74
74
|
- .rspec
|
75
75
|
- CONTRIBUTORS
|
76
76
|
- Gemfile
|
77
|
-
- Gemfile.lock
|
78
77
|
- LICENSE
|
79
78
|
- README.markdown
|
80
79
|
- Rakefile
|
data/Gemfile.lock
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
diff-lcs (1.1.2)
|
5
|
-
git (1.2.5)
|
6
|
-
jeweler (1.6.0)
|
7
|
-
bundler (~> 1.0.0)
|
8
|
-
git (>= 1.2.5)
|
9
|
-
rake
|
10
|
-
json (1.5.1)
|
11
|
-
rake (0.8.7)
|
12
|
-
rdiscount (1.6.8)
|
13
|
-
rdoc (2.4.3)
|
14
|
-
rspec (2.5.0)
|
15
|
-
rspec-core (~> 2.5.0)
|
16
|
-
rspec-expectations (~> 2.5.0)
|
17
|
-
rspec-mocks (~> 2.5.0)
|
18
|
-
rspec-core (2.5.1)
|
19
|
-
rspec-expectations (2.5.0)
|
20
|
-
diff-lcs (~> 1.1.2)
|
21
|
-
rspec-mocks (2.5.0)
|
22
|
-
sdoc (0.2.20)
|
23
|
-
json (>= 1.1.3)
|
24
|
-
rdoc (= 2.4.3)
|
25
|
-
sdoc-helpers (0.1.4)
|
26
|
-
sdoc (~> 0.2)
|
27
|
-
|
28
|
-
PLATFORMS
|
29
|
-
ruby
|
30
|
-
|
31
|
-
DEPENDENCIES
|
32
|
-
jeweler
|
33
|
-
rdiscount
|
34
|
-
rspec
|
35
|
-
sdoc-helpers
|