fakefs 0.5.4 → 0.6.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/.gitignore +2 -0
- data/.rubocop.yml +50 -0
- data/.travis.yml +0 -1
- data/Rakefile +16 -9
- data/fakefs.gemspec +1 -0
- data/lib/fakefs/base.rb +6 -5
- data/lib/fakefs/dir.rb +55 -45
- data/lib/fakefs/fake/dir.rb +5 -3
- data/lib/fakefs/fake/file.rb +9 -4
- data/lib/fakefs/fake/symlink.rb +2 -1
- data/lib/fakefs/file.rb +98 -103
- data/lib/fakefs/file_system.rb +50 -33
- data/lib/fakefs/file_test.rb +1 -0
- data/lib/fakefs/fileutils.rb +72 -71
- data/lib/fakefs/kernel.rb +8 -7
- data/lib/fakefs/pathname.rb +356 -202
- data/lib/fakefs/safe.rb +1 -1
- data/lib/fakefs/spec_helpers.rb +19 -11
- data/lib/fakefs/version.rb +2 -1
- data/spec/fakefs/fakefs_bug_ruby_2.1.0-preview2_spec.rb +2 -2
- data/spec/fakefs/spec_helpers_spec.rb +24 -23
- data/test/dir/tempfile_test.rb +1 -0
- data/test/fake/file/join_test.rb +4 -3
- data/test/fake/file/lstat_test.rb +22 -21
- data/test/fake/file/stat_test.rb +12 -11
- data/test/fake/file/sysseek_test.rb +15 -14
- data/test/fake/file/syswrite_test.rb +25 -24
- data/test/fake/file_test.rb +12 -11
- data/test/fake/symlink_test.rb +18 -10
- data/test/fakefs_test.rb +543 -542
- data/test/file/stat_test.rb +45 -41
- data/test/kernel_test.rb +5 -8
- data/test/safe_test.rb +9 -7
- data/test/test_helper.rb +2 -1
- data/test/verify.rb +6 -3
- metadata +28 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56ce8f3a0f75895e325781ae4b269b380b7edda5
|
4
|
+
data.tar.gz: b3ccf2e1c5a712ec7f05eb0f6da3f881f91f14a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f165dc35f777b6117c2db4c04c1e5e75649bcff6d9b67e9ad877a01fbd9aac0e358930c78b3961c3cda3ff8ca6feaba6f1af2410119c493b814ac10b04f19216
|
7
|
+
data.tar.gz: c1d29b78cb3716070a7c5e29095bcbfc5fe73941712660f171e6710d1a7d040b6c6515f4ec6d210ae7ea35cce1ccafa49a248f124e6065a8d37e7ef077cf93aa
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- '**/Gemfile'
|
4
|
+
- lib/**/*
|
5
|
+
- spec/**/*
|
6
|
+
- gemirro.gemspec
|
7
|
+
Exclude:
|
8
|
+
- files/**/*
|
9
|
+
- templates/**/*
|
10
|
+
MethodLength:
|
11
|
+
Exclude:
|
12
|
+
- lib/**/*
|
13
|
+
- test/**/*.rb
|
14
|
+
- spec/**/*.rb
|
15
|
+
ClassLength:
|
16
|
+
Exclude:
|
17
|
+
- lib/**/*
|
18
|
+
- test/**/*
|
19
|
+
LineLength:
|
20
|
+
Exclude:
|
21
|
+
- test/**/*
|
22
|
+
ParameterLists:
|
23
|
+
Exclude:
|
24
|
+
- lib/**/*
|
25
|
+
Metrics/CyclomaticComplexity:
|
26
|
+
Severity: warning
|
27
|
+
Max: 20
|
28
|
+
Metrics/PerceivedComplexity:
|
29
|
+
Severity: warning
|
30
|
+
Max: 20
|
31
|
+
Lint/Eval:
|
32
|
+
Exclude:
|
33
|
+
- lib/**/*
|
34
|
+
Metrics/BlockNesting:
|
35
|
+
Severity: warning
|
36
|
+
Max: 4
|
37
|
+
Style/PredicateName:
|
38
|
+
Exclude:
|
39
|
+
- lib/fakefs/file.rb
|
40
|
+
Style/MethodName:
|
41
|
+
Exclude:
|
42
|
+
- lib/**/*.rb
|
43
|
+
- test/**/*.rb
|
44
|
+
Style/ModuleFunction:
|
45
|
+
Exclude:
|
46
|
+
- lib/**/*.rb
|
47
|
+
- test/**/*.rb
|
48
|
+
TrivialAccessors:
|
49
|
+
Enabled: true
|
50
|
+
ExactNameMatch: true
|
data/Rakefile
CHANGED
@@ -1,33 +1,40 @@
|
|
1
1
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'test')
|
3
3
|
|
4
|
-
require
|
5
|
-
|
4
|
+
require 'bundler/setup'
|
6
5
|
require 'rake/testtask'
|
7
6
|
|
8
7
|
Rake::TestTask.new do |t|
|
9
|
-
t.libs <<
|
8
|
+
t.libs << 'test'
|
10
9
|
t.test_files = FileList['test/**/*test.rb']
|
11
10
|
t.verbose = true
|
12
11
|
end
|
13
12
|
|
14
13
|
begin
|
15
14
|
require 'rspec/core/rake_task'
|
16
|
-
desc
|
15
|
+
desc 'Run specs'
|
17
16
|
RSpec::Core::RakeTask.new
|
18
17
|
rescue LoadError
|
19
18
|
puts "Spec task can't be loaded. `gem install rspec`"
|
20
19
|
end
|
21
20
|
|
22
|
-
|
21
|
+
begin
|
22
|
+
require 'rubocop/rake_task'
|
23
|
+
desc 'Run RuboCop'
|
24
|
+
RuboCop::RakeTask.new(:rubocop)
|
25
|
+
rescue LoadError
|
26
|
+
puts "Rubocop task can't be loaded. `gem install rubocop`"
|
27
|
+
end
|
28
|
+
|
29
|
+
task default: [:rubocop, :test, :spec]
|
23
30
|
|
24
|
-
desc
|
31
|
+
desc 'Push a new version to rubygems.org'
|
25
32
|
task :publish do
|
26
|
-
abort(
|
33
|
+
abort('Tests failed!') unless system('rake test')
|
27
34
|
Rake::Task[:release].invoke
|
28
35
|
end
|
29
36
|
|
30
|
-
desc
|
37
|
+
desc 'Update contributors'
|
31
38
|
task :update_contributors do
|
32
|
-
sh
|
39
|
+
sh 'git-rank-contributors > CONTRIBUTORS'
|
33
40
|
end
|
data/fakefs.gemspec
CHANGED
data/lib/fakefs/base.rb
CHANGED
@@ -8,12 +8,13 @@ def RealPathname(*args)
|
|
8
8
|
RealPathname.new(*args)
|
9
9
|
end
|
10
10
|
|
11
|
-
if RUBY_VERSION >=
|
11
|
+
if RUBY_VERSION >= '1.9.3'
|
12
12
|
def Pathname(*args)
|
13
13
|
Pathname.new(*args)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
# FakeFS module
|
17
18
|
module FakeFS
|
18
19
|
@activated = false
|
19
20
|
class << self
|
@@ -28,13 +29,13 @@ module FakeFS
|
|
28
29
|
remove_const(:File)
|
29
30
|
remove_const(:FileTest)
|
30
31
|
remove_const(:FileUtils)
|
31
|
-
remove_const(:Pathname) if RUBY_VERSION >=
|
32
|
+
remove_const(:Pathname) if RUBY_VERSION >= '1.9.3'
|
32
33
|
|
33
34
|
const_set(:Dir, FakeFS::Dir)
|
34
35
|
const_set(:File, FakeFS::File)
|
35
36
|
const_set(:FileUtils, FakeFS::FileUtils)
|
36
37
|
const_set(:FileTest, FakeFS::FileTest)
|
37
|
-
const_set(:Pathname, FakeFS::Pathname) if RUBY_VERSION >=
|
38
|
+
const_set(:Pathname, FakeFS::Pathname) if RUBY_VERSION >= '1.9.3'
|
38
39
|
::FakeFS::Kernel.hijack!
|
39
40
|
end
|
40
41
|
true
|
@@ -48,13 +49,13 @@ module FakeFS
|
|
48
49
|
remove_const(:File)
|
49
50
|
remove_const(:FileTest)
|
50
51
|
remove_const(:FileUtils)
|
51
|
-
remove_const(:Pathname) if RUBY_VERSION >=
|
52
|
+
remove_const(:Pathname) if RUBY_VERSION >= '1.9.3'
|
52
53
|
|
53
54
|
const_set(:Dir, RealDir)
|
54
55
|
const_set(:File, RealFile)
|
55
56
|
const_set(:FileTest, RealFileTest)
|
56
57
|
const_set(:FileUtils, RealFileUtils)
|
57
|
-
const_set(:Pathname, RealPathname) if RUBY_VERSION >=
|
58
|
+
const_set(:Pathname, RealPathname) if RUBY_VERSION >= '1.9.3'
|
58
59
|
::FakeFS::Kernel.unhijack!
|
59
60
|
end
|
60
61
|
true
|
data/lib/fakefs/dir.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
module FakeFS
|
2
|
+
# FakeFs Dir class
|
2
3
|
class Dir
|
3
4
|
include Enumerable
|
5
|
+
attr_reader :path
|
4
6
|
|
5
7
|
def self._check_for_valid_file(path)
|
6
|
-
|
8
|
+
fail Errno::ENOENT, path unless FileSystem.find(path)
|
7
9
|
end
|
8
10
|
|
9
11
|
def initialize(string)
|
@@ -12,7 +14,7 @@ module FakeFS
|
|
12
14
|
@path = FileSystem.normalize_path(string)
|
13
15
|
@open = true
|
14
16
|
@pointer = 0
|
15
|
-
@contents = [
|
17
|
+
@contents = ['.', '..'] + FileSystem.find(@path).entries
|
16
18
|
end
|
17
19
|
|
18
20
|
def close
|
@@ -22,16 +24,12 @@ module FakeFS
|
|
22
24
|
nil
|
23
25
|
end
|
24
26
|
|
25
|
-
def each(&
|
26
|
-
while f = read
|
27
|
+
def each(&_block)
|
28
|
+
while (f = read)
|
27
29
|
yield f
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
|
-
def path
|
32
|
-
@path
|
33
|
-
end
|
34
|
-
|
35
33
|
def pos
|
36
34
|
@pointer
|
37
35
|
end
|
@@ -41,15 +39,15 @@ module FakeFS
|
|
41
39
|
end
|
42
40
|
|
43
41
|
def read
|
44
|
-
|
42
|
+
fail IOError, 'closed directory' if @pointer.nil?
|
45
43
|
n = @contents[@pointer]
|
46
44
|
@pointer += 1
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
45
|
+
return unless n
|
46
|
+
|
47
|
+
if n.to_s[0, path.size + 1] == path + '/'
|
48
|
+
n.to_s[path.size + 1..-1]
|
49
|
+
else
|
50
|
+
n.to_s
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
@@ -58,7 +56,7 @@ module FakeFS
|
|
58
56
|
end
|
59
57
|
|
60
58
|
def seek(integer)
|
61
|
-
|
59
|
+
fail IOError, 'closed directory' if @pointer.nil?
|
62
60
|
@pointer = integer
|
63
61
|
@contents[integer]
|
64
62
|
end
|
@@ -68,59 +66,68 @@ module FakeFS
|
|
68
66
|
end
|
69
67
|
|
70
68
|
def self.exists?(path)
|
71
|
-
File.
|
69
|
+
File.exist?(path) && File.directory?(path)
|
72
70
|
end
|
73
71
|
|
74
72
|
def self.chdir(dir, &blk)
|
75
73
|
FileSystem.chdir(dir, &blk)
|
76
74
|
end
|
77
75
|
|
78
|
-
def self.chroot(
|
79
|
-
|
76
|
+
def self.chroot(_string)
|
77
|
+
fail NotImplementedError
|
80
78
|
end
|
81
79
|
|
82
80
|
def self.delete(string)
|
83
81
|
_check_for_valid_file(string)
|
84
|
-
|
82
|
+
fail Errno::ENOTEMPTY, string unless FileSystem.find(string).empty?
|
85
83
|
|
86
84
|
FileSystem.delete(string)
|
87
85
|
end
|
88
86
|
|
89
|
-
def self.entries(dirname,
|
87
|
+
def self.entries(dirname, _opts = {})
|
90
88
|
_check_for_valid_file(dirname)
|
91
89
|
|
92
90
|
Dir.new(dirname).map { |file| File.basename(file) }
|
93
91
|
end
|
94
92
|
|
95
|
-
def self.foreach(dirname, &
|
93
|
+
def self.foreach(dirname, &_block)
|
96
94
|
Dir.open(dirname) { |file| yield file }
|
97
95
|
end
|
98
96
|
|
99
|
-
def self.glob(pattern,
|
97
|
+
def self.glob(pattern, _flags = 0, &block)
|
100
98
|
matches_for_pattern = lambda do |matcher|
|
101
|
-
[FileSystem.find(matcher) || []].flatten.map
|
102
|
-
Dir.pwd.match(
|
99
|
+
[FileSystem.find(matcher) || []].flatten.map do |e|
|
100
|
+
if Dir.pwd.match(/\A\/?\z/) ||
|
101
|
+
!e.to_s.match(/\A#{Dir.pwd}\/?/)
|
102
|
+
e.to_s
|
103
|
+
else
|
104
|
+
e.to_s.match(/\A#{Dir.pwd}\/?/).post_match
|
105
|
+
end
|
106
|
+
end.sort
|
103
107
|
end
|
104
108
|
|
105
109
|
if pattern.is_a? Array
|
106
|
-
files = pattern.
|
110
|
+
files = pattern.map do |matcher|
|
111
|
+
matches_for_pattern.call matcher
|
112
|
+
end.flatten
|
107
113
|
else
|
108
114
|
files = matches_for_pattern.call pattern
|
109
115
|
end
|
110
|
-
|
116
|
+
|
117
|
+
block_given? ? files.each { |file| block.call(file) } : files
|
111
118
|
end
|
112
119
|
|
113
|
-
if RUBY_VERSION >=
|
120
|
+
if RUBY_VERSION >= '1.9'
|
114
121
|
def self.home(user = nil)
|
115
122
|
RealDir.home(user)
|
116
123
|
end
|
117
124
|
end
|
118
125
|
|
119
|
-
def self.mkdir(string,
|
126
|
+
def self.mkdir(string, _integer = 0)
|
120
127
|
FileUtils.mkdir(string)
|
121
128
|
end
|
122
129
|
|
123
|
-
def self.open(string, &
|
130
|
+
def self.open(string, &_block)
|
124
131
|
if block_given?
|
125
132
|
Dir.new(string).each { |file| yield(file) }
|
126
133
|
else
|
@@ -137,6 +144,7 @@ module FakeFS
|
|
137
144
|
end
|
138
145
|
|
139
146
|
if RUBY_VERSION >= '2.1'
|
147
|
+
# Tmpname module
|
140
148
|
module Tmpname # :nodoc:
|
141
149
|
module_function
|
142
150
|
|
@@ -148,21 +156,22 @@ module FakeFS
|
|
148
156
|
case prefix_suffix
|
149
157
|
when String
|
150
158
|
prefix = prefix_suffix
|
151
|
-
suffix =
|
159
|
+
suffix = ''
|
152
160
|
when Array
|
153
161
|
prefix = prefix_suffix[0]
|
154
162
|
suffix = prefix_suffix[1]
|
155
163
|
else
|
156
|
-
|
164
|
+
fail ArgumentError,
|
165
|
+
"unexpected prefix_suffix: #{prefix_suffix.inspect}"
|
157
166
|
end
|
158
|
-
t = Time.now.strftime(
|
159
|
-
path = "#{prefix}#{t}-#{
|
167
|
+
t = Time.now.strftime('%Y%m%d')
|
168
|
+
path = "#{prefix}#{t}-#{$PID}-#{rand(0x100000000).to_s(36)}"
|
160
169
|
path << "-#{n}" if n
|
161
170
|
path << suffix
|
162
171
|
end
|
163
172
|
|
164
173
|
def create(basename, *rest)
|
165
|
-
if opts = Hash.try_convert(rest[-1])
|
174
|
+
if (opts = Hash.try_convert(rest[-1]))
|
166
175
|
opts = opts.dup if rest.pop.equal?(opts)
|
167
176
|
max_try = opts.delete(:max_try)
|
168
177
|
opts = [opts]
|
@@ -170,10 +179,10 @@ module FakeFS
|
|
170
179
|
opts = []
|
171
180
|
end
|
172
181
|
tmpdir, = *rest
|
173
|
-
if $SAFE > 0
|
182
|
+
if $SAFE > 0 && tmpdir.tainted?
|
174
183
|
tmpdir = '/tmp'
|
175
184
|
else
|
176
|
-
tmpdir ||= tmpdir
|
185
|
+
tmpdir ||= self.tmpdir
|
177
186
|
end
|
178
187
|
n = nil
|
179
188
|
begin
|
@@ -182,8 +191,9 @@ module FakeFS
|
|
182
191
|
rescue Errno::EEXIST
|
183
192
|
n ||= 0
|
184
193
|
n += 1
|
185
|
-
retry if !max_try
|
186
|
-
raise "cannot generate temporary name using `#{basename}'
|
194
|
+
retry if !max_try || n < max_try
|
195
|
+
raise "cannot generate temporary name using `#{basename}' " \
|
196
|
+
"under `#{tmpdir}'"
|
187
197
|
end
|
188
198
|
path
|
189
199
|
end
|
@@ -194,23 +204,23 @@ module FakeFS
|
|
194
204
|
def self.mktmpdir(prefix_suffix = nil, tmpdir = nil)
|
195
205
|
case prefix_suffix
|
196
206
|
when nil
|
197
|
-
prefix =
|
198
|
-
suffix =
|
207
|
+
prefix = 'd'
|
208
|
+
suffix = ''
|
199
209
|
when String
|
200
210
|
prefix = prefix_suffix
|
201
|
-
suffix =
|
211
|
+
suffix = ''
|
202
212
|
when Array
|
203
213
|
prefix = prefix_suffix[0]
|
204
214
|
suffix = prefix_suffix[1]
|
205
215
|
else
|
206
|
-
|
216
|
+
fail ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
|
207
217
|
end
|
208
218
|
|
209
|
-
t = Time.now.strftime(
|
219
|
+
t = Time.now.strftime('%Y%m%d')
|
210
220
|
n = nil
|
211
221
|
|
212
222
|
begin
|
213
|
-
path = "#{tmpdir}/#{prefix}#{t}-#{
|
223
|
+
path = "#{tmpdir}/#{prefix}#{t}-#{$PID}-#{rand(0x100000000).to_s(36)}"
|
214
224
|
path << "-#{n}" if n
|
215
225
|
path << suffix
|
216
226
|
mkdir(path, 0700)
|
data/lib/fakefs/fake/dir.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module FakeFS
|
2
|
+
# Fake Dir class
|
2
3
|
class FakeDir
|
3
4
|
attr_accessor :name, :parent, :mode, :uid, :gid, :mtime, :atime
|
4
5
|
attr_reader :ctime, :content
|
@@ -12,7 +13,7 @@ module FakeFS
|
|
12
13
|
@mode = 0100000 + (0777 - File.umask)
|
13
14
|
@uid = Process.uid
|
14
15
|
@gid = Process.gid
|
15
|
-
@content =
|
16
|
+
@content = ''
|
16
17
|
@entries = {}
|
17
18
|
end
|
18
19
|
|
@@ -21,7 +22,8 @@ module FakeFS
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def inspect
|
24
|
-
"(FakeDir name:#{name.inspect}
|
25
|
+
"(FakeDir name:#{name.inspect} " \
|
26
|
+
"parent:#{parent.to_s.inspect} size:#{@entries.size})"
|
25
27
|
end
|
26
28
|
|
27
29
|
def clone(parent = nil)
|
@@ -52,7 +54,7 @@ module FakeFS
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def matches(pattern)
|
55
|
-
@entries.reject {|k,
|
57
|
+
@entries.reject { |k, _v| pattern !~ k }.values
|
56
58
|
end
|
57
59
|
|
58
60
|
def [](name)
|