memfs 0.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module MemFs
4
- describe FileSystem do
4
+ ::RSpec.describe FileSystem do
5
5
  subject { _fs }
6
6
 
7
7
  before :each do
@@ -11,7 +11,7 @@ module MemFs
11
11
  describe '#chdir' do
12
12
  it 'changes the current working directory' do
13
13
  subject.chdir '/test-dir'
14
- expect(subject.getwd).to eq('/test-dir')
14
+ expect(subject.getwd).to eq(expected_path('/test-dir'))
15
15
  end
16
16
 
17
17
  it 'raises an error if directory does not exist' do
@@ -29,7 +29,7 @@ module MemFs
29
29
  subject.chdir '/test-dir' do
30
30
  location = subject.getwd
31
31
  end
32
- expect(location).to eq('/test-dir')
32
+ expect(location).to eq(expected_path('/test-dir'))
33
33
  end
34
34
 
35
35
  it 'gets back to previous directory once the block is finished' do
@@ -44,7 +44,7 @@ module MemFs
44
44
  it 'sets current directory as the last link chain target' do
45
45
  subject.symlink('/test-dir', '/test-link')
46
46
  subject.chdir('/test-link')
47
- expect(subject.getwd).to eq('/test-dir')
47
+ expect(subject.getwd).to eq(expected_path('/test-dir'))
48
48
  end
49
49
  end
50
50
  end
@@ -52,16 +52,16 @@ module MemFs
52
52
  describe '#chmod' do
53
53
  it 'changes permission bits on the named file' do
54
54
  subject.touch('/some-file')
55
- subject.chmod(0777, '/some-file')
56
- expect(subject.find!('/some-file').mode).to be(0100777)
55
+ subject.chmod(0o777, '/some-file')
56
+ expect(subject.find!('/some-file').mode).to be(0o100777)
57
57
  end
58
58
 
59
59
  context 'when the named file is a symlink' do
60
60
  it 'changes the permission bits on the symlink itself' do
61
61
  subject.touch('/some-file')
62
62
  subject.symlink('/some-file', '/some-link')
63
- subject.chmod(0777, '/some-link')
64
- expect(subject.find!('/some-link').mode).to be(0100777)
63
+ subject.chmod(0o777, '/some-link')
64
+ expect(subject.find!('/some-link').mode).to be(0o100777)
65
65
  end
66
66
  end
67
67
  end
@@ -140,7 +140,7 @@ module MemFs
140
140
 
141
141
  it 'sets the current directory to /' do
142
142
  subject.clear!
143
- expect(subject.getwd).to eq('/')
143
+ expect(subject.getwd).to eq(root_path)
144
144
  end
145
145
  end
146
146
 
@@ -200,7 +200,7 @@ module MemFs
200
200
 
201
201
  context 'when there is no entry for the given path' do
202
202
  it 'raises an exception' do
203
- expect { subject.find!('/no-file') }.to raise_exception
203
+ expect { subject.find!('/no-file') }.to raise_error Errno::ENOENT
204
204
  end
205
205
  end
206
206
 
@@ -221,7 +221,7 @@ module MemFs
221
221
  it 'raises an exception' do
222
222
  expect {
223
223
  subject.find!('/test-no-link/test-file')
224
- }.to raise_error
224
+ }.to raise_error Errno::ENOENT
225
225
  end
226
226
  end
227
227
  end
@@ -256,7 +256,7 @@ module MemFs
256
256
  describe '#getwd' do
257
257
  it 'returns the current working directory' do
258
258
  subject.chdir '/test-dir'
259
- expect(subject.getwd).to eq('/test-dir')
259
+ expect(subject.getwd).to eq(expected_path('/test-dir'))
260
260
  end
261
261
  end
262
262
 
@@ -289,15 +289,15 @@ module MemFs
289
289
  expect(subject.find!('/new-dir')).to be_a(Fake::Directory)
290
290
  end
291
291
 
292
- it 'sets directory permissions to default 0777' do
292
+ it 'sets directory permissions to default 0o777' do
293
293
  subject.mkdir '/new-dir'
294
- expect(subject.find!('/new-dir').mode).to eq(0100777)
294
+ expect(subject.find!('/new-dir').mode).to eq(0o100777)
295
295
  end
296
296
 
297
297
  context 'when permissions are specified' do
298
298
  it 'sets directory permission to specified value' do
299
- subject.mkdir '/new-dir', 0644
300
- expect(subject.find!('/new-dir').mode).to eq(0100644)
299
+ subject.mkdir '/new-dir', 0o644
300
+ expect(subject.find!('/new-dir').mode).to eq(0o100644)
301
301
  end
302
302
  end
303
303
 
@@ -329,8 +329,8 @@ module MemFs
329
329
  end
330
330
 
331
331
  it 'returns the list of all the existing paths' do
332
- expect(subject.paths).to eq \
333
- %w[/ /tmp /test-dir /test-dir/subdir /test-dir/subdir/file1 /test-dir/subdir/file2]
332
+ expected = %w[/ /tmp /test-dir /test-dir/subdir /test-dir/subdir/file1 /test-dir/subdir/file2]
333
+ expect(subject.paths).to eq(expected.map { |p| expected_path(p) })
334
334
  end
335
335
  end
336
336
 
@@ -374,6 +374,7 @@ module MemFs
374
374
 
375
375
  describe '#symlink' do
376
376
  it 'creates a symbolic link' do
377
+ subject.touch('/some-file')
377
378
  subject.symlink('/some-file', '/some-link')
378
379
  expect(subject.find!('/some-link')).to be_a(Fake::Symlink)
379
380
  end
@@ -433,7 +434,7 @@ module MemFs
433
434
 
434
435
  context 'when the entry is a directory' do
435
436
  it 'raises an exception' do
436
- expect { subject.unlink('/test-dir') }.to raise_error
437
+ expect { subject.unlink('/test-dir') }.to raise_error Errno::EPERM
437
438
  end
438
439
  end
439
440
  end
data/spec/memfs_spec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
+ require 'tempfile'
2
3
 
3
- describe MemFs do
4
+ RSpec.describe MemFs do
4
5
  describe '.activate' do
5
6
  it 'calls the given block with MemFs activated' do
6
7
  described_class.activate do
@@ -16,7 +17,7 @@ describe MemFs do
16
17
  it 'deactivates MemFs even when an exception occurs' do
17
18
  begin
18
19
  described_class.activate { fail 'Some error' }
19
- rescue
20
+ rescue RuntimeError
20
21
  end
21
22
  expect(::Dir).to be(described_class::OriginalDir)
22
23
  end
@@ -50,6 +51,70 @@ describe MemFs do
50
51
  end
51
52
  end
52
53
 
54
+ describe '.halt' do
55
+ before(:each) { described_class.activate! }
56
+ after(:each) { described_class.deactivate! }
57
+
58
+ it 'switches back to the original Ruby Dir & File classes' do
59
+ described_class.halt do
60
+ expect(::Dir).to be(described_class::OriginalDir)
61
+ expect(::File).to be(described_class::OriginalFile)
62
+ end
63
+ end
64
+
65
+ it 'switches back to the faked Dir & File classes' do
66
+ described_class.halt
67
+ expect(::Dir).to be(described_class::Dir)
68
+ expect(::File).to be(described_class::File)
69
+ end
70
+
71
+ it 'switches back to the faked Dir & File classes no matter what' do
72
+ begin
73
+ described_class.halt { fail 'Fatal Error' }
74
+ rescue
75
+ expect(::Dir).to be(described_class::Dir)
76
+ expect(::File).to be(described_class::File)
77
+ end
78
+ end
79
+
80
+ it 'maintains the state of the faked fs' do
81
+ _fs.touch('file.rb')
82
+
83
+ described_class.halt do
84
+ expect(File.exist?('file.rb')).to be false
85
+ end
86
+
87
+ expect(File.exist?('file.rb')).to be true
88
+ end
89
+ end
90
+
91
+ describe 'Tempfile.create' do
92
+ around(:each) { |example| described_class.activate { example.run } }
93
+
94
+ context 'without a block' do
95
+ it 'creates the file in the in-memory filesystem' do
96
+ file = Tempfile.create('memfs')
97
+ expect(file).to be_a(File)
98
+ expect(file.path).to start_with(expected_path('/tmp/memfs'))
99
+ expect(_fs.find(file.path)).not_to be_nil
100
+ file.close
101
+ end
102
+ end
103
+
104
+ context 'with a block' do
105
+ it 'yields a writable file whose content is stored in the in-memory filesystem' do
106
+ path = nil
107
+ Tempfile.create('memfs') do |f|
108
+ path = f.path
109
+ f.write('hello')
110
+ expect(File.read(path)).to eq('hello')
111
+ expect(_fs.find(path)).not_to be_nil
112
+ end
113
+ expect(_fs.find(path)).to be_nil
114
+ end
115
+ end
116
+ end
117
+
53
118
  describe '.touch' do
54
119
  around(:each) { |example| described_class.activate { example.run } }
55
120
 
data/spec/spec_helper.rb CHANGED
@@ -1,36 +1,53 @@
1
- require 'coveralls'
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+
5
+ SimpleCov.start
6
+
2
7
  require 'memfs'
3
8
 
4
- Coveralls.wear!
9
+ def _fs
10
+ MemFs::FileSystem.instance
11
+ end
12
+
13
+ # Returns the platform-appropriate root path
14
+ def root_path
15
+ MemFs.platform_root
16
+ end
17
+
18
+ # Converts Unix-style path to platform path for expectations
19
+ # expected_path('/test-file') => '/test-file' on Unix, 'D:/test-file' on Windows
20
+ def expected_path(unix_path)
21
+ MemFs.normalize_path(unix_path)
22
+ end
5
23
 
6
24
  RSpec.configure do |config|
7
- config.before :each do
8
- MemFs::FileSystem.instance.clear!
25
+ config.expect_with :rspec do |expectations|
26
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
9
27
  end
10
28
 
11
- shared_examples 'aliased method' do |method, original_method|
12
- it "##{original_method}" do
13
- expect(subject.method(method)).to eq(subject.method(original_method))
14
- end
29
+ config.mock_with :rspec do |mocks|
30
+ mocks.verify_partial_doubles = true
15
31
  end
16
- end
17
32
 
18
- RSpec::Matchers.define :raise_specific_error do |expected_exception_class|
19
- match do |block|
20
- begin
21
- block.call
22
- rescue expected_exception_class
23
- true
24
- else
25
- false
26
- end
33
+ config.color = true
34
+ config.filter_run :focus
35
+ config.run_all_when_everything_filtered = true
36
+ config.example_status_persistence_file_path = 'spec/examples.txt'
37
+ config.disable_monkey_patching!
38
+ config.warnings = true
39
+ if config.files_to_run.one?
40
+ config.default_formatter = 'doc'
27
41
  end
42
+ # config.profile_examples = 10
43
+ config.order = :random
44
+ Kernel.srand config.seed
28
45
 
29
- def supports_block_expectations?
30
- true
31
- end
46
+ config.before { MemFs::FileSystem.instance.clear! }
32
47
  end
33
48
 
34
- def _fs
35
- MemFs::FileSystem.instance
49
+ RSpec.shared_examples 'aliased method' do |method, original_method|
50
+ it "##{original_method}" do
51
+ expect(subject.method(method)).to eq(subject.method(original_method))
52
+ end
36
53
  end
metadata CHANGED
@@ -1,127 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon COURTOIS
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-13 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: coveralls
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.6'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.6'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: guard
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.6'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.6'
69
- - !ruby/object:Gem::Dependency
70
- name: guard-rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '4.3'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '4.3'
83
- - !ruby/object:Gem::Dependency
84
- name: rb-inotify
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.8'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.8'
97
- - !ruby/object:Gem::Dependency
98
- name: rb-fsevent
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.9'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.9'
111
- - !ruby/object:Gem::Dependency
112
- name: rb-fchange
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '0.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '0.0'
11
+ date: 2026-02-03 00:00:00.000000000 Z
12
+ dependencies: []
125
13
  description: MemFs provides a fake file system that can be used for tests. Strongly
126
14
  inspired by FakeFS.
127
15
  email:
@@ -130,16 +18,23 @@ executables: []
130
18
  extensions: []
131
19
  extra_rdoc_files: []
132
20
  files:
21
+ - ".github/dependabot.yml"
22
+ - ".github/workflows/ci.yml"
133
23
  - ".gitignore"
134
24
  - ".rspec"
135
25
  - ".rubocop.yml"
136
- - ".travis.yml"
137
26
  - CHANGELOG.md
138
27
  - Gemfile
139
28
  - Guardfile
140
29
  - LICENSE.txt
141
30
  - README.md
142
31
  - Rakefile
32
+ - bin/_guard-core
33
+ - bin/coverage_summary
34
+ - bin/guard
35
+ - bin/rake
36
+ - bin/rspec
37
+ - bin/rubocop
143
38
  - lib/memfs.rb
144
39
  - lib/memfs/dir.rb
145
40
  - lib/memfs/fake/directory.rb
@@ -171,7 +66,7 @@ homepage: http://github.com/simonc/memfs
171
66
  licenses:
172
67
  - MIT
173
68
  metadata: {}
174
- post_install_message:
69
+ post_install_message:
175
70
  rdoc_options: []
176
71
  require_paths:
177
72
  - lib
@@ -186,21 +81,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
81
  - !ruby/object:Gem::Version
187
82
  version: '0'
188
83
  requirements: []
189
- rubyforge_project:
190
- rubygems_version: 2.4.5
191
- signing_key:
84
+ rubygems_version: 3.5.23
85
+ signing_key:
192
86
  specification_version: 4
193
- summary: memfs-0.5.0
194
- test_files:
195
- - spec/fileutils_spec.rb
196
- - spec/memfs/dir_spec.rb
197
- - spec/memfs/fake/directory_spec.rb
198
- - spec/memfs/fake/entry_spec.rb
199
- - spec/memfs/fake/file/content_spec.rb
200
- - spec/memfs/fake/file_spec.rb
201
- - spec/memfs/fake/symlink_spec.rb
202
- - spec/memfs/file/stat_spec.rb
203
- - spec/memfs/file_spec.rb
204
- - spec/memfs/file_system_spec.rb
205
- - spec/memfs_spec.rb
206
- - spec/spec_helper.rb
87
+ summary: memfs-2.0.0
88
+ test_files: []
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.2
6
- - 2.2.2