fakefs 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MmI3OWYyNmRhMWQ1YmVmZTkxY2IyN2U2MThiZmEwZmY3MDZhNDUzZA==
5
- data.tar.gz: !binary |-
6
- Mjg3ODdmOWU0YjJkOWQwMTRiYmRkOGY0ZmQwNjBlNmRlNTBiMzM1OA==
2
+ SHA1:
3
+ metadata.gz: 87b3bd124e2a20133aeb85f866acb52262fc9bde
4
+ data.tar.gz: 0501ebaf21ebf9cc90464388507a5de3b9bfddc4
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- M2YxM2ZiZGY2YmQ2ODk1MzQxZTJmZjc4NmYyYjNjODM1ZWYyYjY1NTBhNDQ5
10
- YjAxMTNhOWIxYjg4ZWEzM2FhNDkyMDdhMWQ2ZDRkNjk2NDQ5YzFiMmQ2MWVh
11
- NzkyZWE0OTA4ODFiNDAyMWFlMzY3OWU1YjYxZTgzNmE4MWNhY2E=
12
- data.tar.gz: !binary |-
13
- OTk3M2IyMDlhODI1MWZiNTY5OWRjNWIwODRlMTkwOWNhZGZjYzljNGE5MjRh
14
- NjJiZjM5MDU5MjkzMTYwZjQ4OTk5NmQ1NjA1Y2Q4NmI3MDFiYWVmODEzZTM4
15
- YzYzZmEyNDQ3YmNlNGMyNDAyMGJkYzcyMDNhZjExYjJhMGM4M2I=
6
+ metadata.gz: 9c91bbfbdd6c805e7916089a10e0dad958524dc498275fc36b577196bc0cc0eedf956d1f6d1bcfd091b3ea0c0651dc345fb348b62934499a6b96316fe333d49e
7
+ data.tar.gz: ace7f7771019525affa0e05d256fdf4f4b783ca5f551464070149350ce2c6c13273453218fa481a8a36a1e26402e1c22612e238a461d05335ab7bd2cc9a1ebb4
data/.gitignore CHANGED
@@ -4,7 +4,6 @@ Gemfile.lock
4
4
  .rbenv-version
5
5
  docs
6
6
  pkg
7
- fakefs.gemspec
8
7
  .rbx
9
8
  .idea
10
9
  .bundle
data/.travis.yml CHANGED
@@ -2,11 +2,11 @@ rvm:
2
2
  - 1.8.7
3
3
  - 1.9.3
4
4
  - 2.0.0
5
+ - 2.1.1
5
6
  - jruby
6
7
  - rbx-19mode
7
8
  matrix:
8
9
  allow_failures:
9
- - rvm: 2.0.0
10
10
  - rvm: jruby
11
11
  - rvm: rbx-19mode
12
12
  before_install:
data/fakefs.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'fakefs/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fakefs"
8
+ spec.version = FakeFS::Version.to_s
9
+ spec.authors = ["Chris Wanstrath", "Scott Taylor", "Jeff Hodges", "Pat Nakajima", "Brian Donovan"]
10
+ spec.email = ["chris@ozmm.org"]
11
+ spec.description = %q{A fake filesystem. Use it in your tests.}
12
+ spec.summary = %q{A fake filesystem. Use it in your tests.}
13
+ spec.homepage = "http://github.com/defunkt/fakefs"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake", "~> 10.1"
23
+ spec.add_development_dependency "rspec", "~> 2.14"
24
+ end
data/lib/fakefs/base.rb CHANGED
@@ -35,6 +35,7 @@ module FakeFS
35
35
  const_set(:FileUtils, FakeFS::FileUtils)
36
36
  const_set(:FileTest, FakeFS::FileTest)
37
37
  const_set(:Pathname, FakeFS::Pathname) if RUBY_VERSION >= "1.9.3"
38
+ ::FakeFS::Kernel.hijack!
38
39
  end
39
40
  true
40
41
  end
@@ -54,6 +55,7 @@ module FakeFS
54
55
  const_set(:FileTest, RealFileTest)
55
56
  const_set(:FileUtils, RealFileUtils)
56
57
  const_set(:Pathname, RealPathname) if RUBY_VERSION >= "1.9.3"
58
+ ::FakeFS::Kernel.unhijack!
57
59
  end
58
60
  true
59
61
  end
data/lib/fakefs/dir.rb CHANGED
@@ -136,6 +136,60 @@ module FakeFS
136
136
  FileSystem.current_dir.to_s
137
137
  end
138
138
 
139
+ if RUBY_VERSION >= '2.1'
140
+ module Tmpname # :nodoc:
141
+ module_function
142
+
143
+ def tmpdir
144
+ Dir.tmpdir
145
+ end
146
+
147
+ def make_tmpname(prefix_suffix, n)
148
+ case prefix_suffix
149
+ when String
150
+ prefix = prefix_suffix
151
+ suffix = ""
152
+ when Array
153
+ prefix = prefix_suffix[0]
154
+ suffix = prefix_suffix[1]
155
+ else
156
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
157
+ end
158
+ t = Time.now.strftime("%Y%m%d")
159
+ path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
160
+ path << "-#{n}" if n
161
+ path << suffix
162
+ end
163
+
164
+ def create(basename, *rest)
165
+ if opts = Hash.try_convert(rest[-1])
166
+ opts = opts.dup if rest.pop.equal?(opts)
167
+ max_try = opts.delete(:max_try)
168
+ opts = [opts]
169
+ else
170
+ opts = []
171
+ end
172
+ tmpdir, = *rest
173
+ if $SAFE > 0 and tmpdir.tainted?
174
+ tmpdir = '/tmp'
175
+ else
176
+ tmpdir ||= tmpdir()
177
+ end
178
+ n = nil
179
+ begin
180
+ path = File.join(tmpdir, make_tmpname(basename, n))
181
+ yield(path, n, *opts)
182
+ rescue Errno::EEXIST
183
+ n ||= 0
184
+ n += 1
185
+ retry if !max_try or n < max_try
186
+ raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
187
+ end
188
+ path
189
+ end
190
+ end
191
+ end
192
+
139
193
  # This code has been borrowed from Rubinius
140
194
  def self.mktmpdir(prefix_suffix = nil, tmpdir = nil)
141
195
  case prefix_suffix
@@ -22,8 +22,8 @@ module FakeFS
22
22
  File.join(parent.to_s, name)
23
23
  end
24
24
 
25
- def respond_to?(method)
26
- entry.respond_to?(method)
25
+ def respond_to?(method, include_private = false)
26
+ entry.respond_to?(method, include_private)
27
27
  end
28
28
 
29
29
  private
data/lib/fakefs/file.rb CHANGED
@@ -26,6 +26,7 @@ module FakeFS
26
26
 
27
27
  FILE_CREATION_BITMASK = RealFile::CREAT
28
28
 
29
+
29
30
  def self.extname(path)
30
31
  RealFile.extname(path)
31
32
  end
@@ -135,8 +136,7 @@ module FakeFS
135
136
  end
136
137
 
137
138
  def self.expand_path(file_name, dir_string=FileSystem.current_dir.to_s)
138
- dir_string = FileSystem.find(dir_string).to_s
139
- RealFile.expand_path(file_name, dir_string)
139
+ RealFile.expand_path(file_name, RealFile.expand_path(dir_string, Dir.pwd))
140
140
  end
141
141
 
142
142
  def self.basename(*args)
@@ -153,13 +153,17 @@ module FakeFS
153
153
  end
154
154
 
155
155
  def self.read(path, *args)
156
- file = new(path)
156
+ options = args[-1].is_a?(Hash) ? args.pop : {}
157
+ length = args.size > 0 ? args.shift : nil
158
+ offset = args.size > 0 ? args.shift : 0
159
+ file = new(path, options)
157
160
 
158
161
  raise Errno::ENOENT if !file.exists?
159
162
  raise Errno::EISDIR, path if directory?(path)
160
163
 
161
164
  FileSystem.find(path).atime = Time.now
162
- file.read
165
+ file.seek(offset)
166
+ file.read(length)
163
167
  end
164
168
 
165
169
  def self.readlines(path)
@@ -177,6 +181,8 @@ module FakeFS
177
181
  raise Errno::ENOTDIR, "#{source} or #{dest}"
178
182
  elsif file?(source) && directory?(dest)
179
183
  raise Errno::EISDIR, "#{source} or #{dest}"
184
+ elsif !exist?(dirname(dest))
185
+ raise Errno::ENOENT, "#{source} or #{dest}"
180
186
  end
181
187
 
182
188
  if target = FileSystem.find(source)
@@ -209,18 +215,16 @@ module FakeFS
209
215
  0
210
216
  end
211
217
 
212
- def self.delete(file_name, *additional_file_names)
213
- if !exists?(file_name)
214
- raise Errno::ENOENT, file_name
215
- end
216
-
217
- FileUtils.rm(file_name)
218
+ def self.delete(*file_names)
219
+ file_names.each do |file_name|
220
+ if !exists?(file_name)
221
+ raise Errno::ENOENT, file_name
222
+ end
218
223
 
219
- additional_file_names.each do |file_name|
220
224
  FileUtils.rm(file_name)
221
225
  end
222
226
 
223
- additional_file_names.size + 1
227
+ file_names.size
224
228
  end
225
229
 
226
230
  class << self
@@ -272,13 +276,7 @@ module FakeFS
272
276
  end
273
277
 
274
278
  def self.binread(file, length = nil, offset = 0)
275
- contents = File.read(file)
276
-
277
- if length
278
- contents.slice(offset, length)
279
- else
280
- contents
281
- end
279
+ contents = File.read(file, length, offset, :mode => 'rb:ASCII-8BIT')
282
280
  end
283
281
 
284
282
  class Stat
@@ -327,6 +325,16 @@ module FakeFS
327
325
  true
328
326
  end
329
327
 
328
+ # World_writable and readable are platform dependent
329
+ # usually comparing with S_IROTH defined on compilation (MRI)
330
+ def world_writable?
331
+ 0777
332
+ end
333
+
334
+ def world_readable?
335
+ 0777
336
+ end
337
+
330
338
  def nlink
331
339
  @fake_file.links.size
332
340
  end
@@ -483,6 +491,12 @@ module FakeFS
483
491
  end
484
492
  end
485
493
 
494
+ if RUBY_VERSION >= "1.9.1"
495
+ def self.absolute_path(file_name, dir_name = Dir.getwd)
496
+ RealFile.absolute_path(file_name, dir_name)
497
+ end
498
+ end
499
+
486
500
  if RUBY_VERSION >= "1.9.2"
487
501
  attr_writer :autoclose
488
502
 
@@ -533,6 +547,7 @@ module FakeFS
533
547
  read_buf
534
548
  end
535
549
 
550
+
536
551
  private
537
552
 
538
553
  def check_modes!
@@ -133,7 +133,7 @@ module FakeFS
133
133
  directories_under(dir)
134
134
  end
135
135
  else
136
- dir.matches /\A#{pattern.gsub('.', '\.').gsub('?','.').gsub('*', '.*').gsub(/\{(.*?)\}/) { "(#{$1.gsub(',', '|')})" }}\Z/
136
+ dir.matches /\A#{pattern.gsub('.', '\.').gsub('?','.').gsub('*', '.*').gsub('[', '\[').gsub(']', '\]').gsub('(', '\(').gsub(')', '\)').gsub(/\{(.*?)\}/) { "(#{$1.gsub(',', '|')})" }}\Z/
137
137
  end
138
138
 
139
139
  if parts.empty? # we're done recursing
@@ -0,0 +1,40 @@
1
+ module FakeFS
2
+ module Kernel
3
+
4
+ @captives = { :original => {}, :hijacked => {}}
5
+ class << self
6
+ attr_accessor :captives
7
+ end
8
+
9
+ def self.hijack!
10
+ captives[:hijacked].each do |name,prc|
11
+ ::Kernel.send(:define_method, name.to_sym, &prc)
12
+ end
13
+ end
14
+
15
+ def self.unhijack!
16
+ captives[:original].each do |name,prc|
17
+ ::Kernel.send(:define_method, name.to_sym, Proc.new do |*args, &block|
18
+ ::FakeFS::Kernel.captives[:original][name].call(*args, &block)
19
+ end)
20
+ end
21
+ end
22
+
23
+ private
24
+ def self.hijack name, &block
25
+ captives[:original][name] = ::Kernel.method(name.to_sym)
26
+ captives[:hijacked][name] = block || Proc.new { |args| }
27
+ end
28
+
29
+ hijack :open do |*args, &block|
30
+ if args.first.start_with? '|'
31
+ # This is a system command
32
+ ::FakeFS::Kernel.captives[:original][:open].call(*args, &block)
33
+ else
34
+ name = args.shift
35
+ FakeFS::File.open(name, *args, &block)
36
+ end
37
+ end
38
+
39
+ end
40
+ end
data/lib/fakefs/safe.rb CHANGED
@@ -10,4 +10,4 @@ require 'fakefs/file'
10
10
  require 'fakefs/file_test'
11
11
  require 'fakefs/dir'
12
12
  require 'fakefs/pathname' if RUBY_VERSION >= "1.9.3"
13
-
13
+ require 'fakefs/kernel'
@@ -18,7 +18,7 @@
18
18
  #
19
19
  # require 'fakefs/spec_helpers'
20
20
  #
21
- # Spec::Runner.configure do |config|
21
+ # RSpec.configure do |config|
22
22
  # config.include FakeFS::SpecHelpers
23
23
  # end
24
24
  #
@@ -1,6 +1,6 @@
1
1
  module FakeFS
2
2
  module Version
3
- VERSION = "0.5.2"
3
+ VERSION = "0.5.3"
4
4
 
5
5
  def self.to_s
6
6
  VERSION
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+ require 'tempfile'
3
+
4
+ class TempfileTest < Test::Unit::TestCase
5
+ include FakeFS
6
+
7
+ if RUBY_VERSION >= '2.1'
8
+ def test_should_not_raise_error
9
+ FakeFS do
10
+ assert_nothing_raised do
11
+ FileUtils.mkdir_p('/tmp')
12
+ Tempfile.open('test')
13
+ end
14
+ end
15
+ end
16
+ else
17
+ def test_noop
18
+ # TODO: Remove me when we add non-2.1 tests.
19
+ end
20
+ end
21
+ end
@@ -7,4 +7,19 @@ class FakeSymlinkTest < Test::Unit::TestCase
7
7
  methods = FakeSymlink.private_instance_methods.map { |m| m.to_s }
8
8
  assert methods.include?("method_missing")
9
9
  end
10
+
11
+ def test_symlink_respond_to_accepts_multiple_params
12
+ fake_symlink = FakeSymlink.new('foo')
13
+ assert fake_symlink.respond_to?(:to_s, false), 'has public method \#to_s'
14
+ assert fake_symlink.respond_to?(:to_s, true), 'has public or private method \#to_s'
15
+ assert !fake_symlink.respond_to?(:initialize, false), 'has private method \#initialize'
16
+ assert fake_symlink.respond_to?(:initialize, true), 'has private method \#initialize'
17
+ end
18
+
19
+ def test_symlink_respond_to_uses_same_param_defaults
20
+ fake_symlink = FakeSymlink.new('foo')
21
+ assert_equal fake_symlink.respond_to?(:to_s), fake_symlink.entry.respond_to?(:to_s)
22
+ assert_not_equal fake_symlink.respond_to?(:to_s), fake_symlink.entry.respond_to?(:initialize)
23
+ assert_equal fake_symlink.respond_to?(:initialize), fake_symlink.entry.respond_to?(:initialize)
24
+ end
10
25
  end
data/test/fakefs_test.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require "test_helper"
2
3
 
3
4
  class FakeFSTest < Test::Unit::TestCase
@@ -494,6 +495,17 @@ class FakeFSTest < Test::Unit::TestCase
494
495
  assert_nothing_raised { File.read(path, :mode => 'r:UTF-8:-') }
495
496
  end
496
497
 
498
+ def test_file_read_respects_args
499
+ path = 'file.txt'
500
+ File.open(path, 'w') do |f|
501
+ f.write 'Yatta!'
502
+ end
503
+
504
+ assert_equal 'Ya', File.read(path, 2)
505
+ assert_equal 'at', File.read(path, 2, 1)
506
+ assert_equal 'atta!', File.read(path, nil, 1)
507
+ end
508
+
497
509
  def test_can_write_to_files
498
510
  path = 'file.txt'
499
511
  File.open(path, 'w') do |f|
@@ -810,6 +822,30 @@ class FakeFSTest < Test::Unit::TestCase
810
822
  end
811
823
  end
812
824
 
825
+ def test_file_object_initialization_with_brackets_in_filename
826
+ filename = "bracket[1](2).txt"
827
+ expected_contents = "Yokudekimashita"
828
+ assert_nothing_raised do
829
+ File.open(filename, {:mode => "w"}){ |f| f.write "#{expected_contents}" }
830
+ end
831
+ the_file = Dir["/*"]
832
+ assert_equal the_file.length, 1
833
+ assert_equal the_file[0], "/#{filename}"
834
+ contents = File.open("/#{filename}").read()
835
+ assert_equal contents, expected_contents
836
+ end
837
+
838
+ def test_file_object_initialization_with_brackets_in_filename
839
+ # 日本語
840
+ filename = "\u65e5\u672c\u8a9e.txt"
841
+ expected_contents = "Yokudekimashita"
842
+ assert_nothing_raised do
843
+ File.open(filename, {:mode => "w"}){ |f| f.write "#{expected_contents}" }
844
+ end
845
+ contents = File.open("/#{filename}").read()
846
+ assert_equal contents, expected_contents
847
+ end
848
+
813
849
  def test_file_read_errors_appropriately
814
850
  assert_raise Errno::ENOENT do
815
851
  File.read('anything')
@@ -1295,7 +1331,7 @@ class FakeFSTest < Test::Unit::TestCase
1295
1331
  assert_equal '/path/subdir', Dir.getwd
1296
1332
  end
1297
1333
 
1298
- def test_current_dir_reflected_by_expand_path
1334
+ def test_current_dir_reflected_by_expand_path_with_relative_paths
1299
1335
  FileUtils.mkdir_p '/path'
1300
1336
  Dir.chdir '/path'
1301
1337
 
@@ -1309,6 +1345,22 @@ class FakeFSTest < Test::Unit::TestCase
1309
1345
  assert_equal '/path/subdir/foo', File.expand_path('foo')
1310
1346
  end
1311
1347
 
1348
+ def test_expand_path_with_parent_dir
1349
+ FakeFS.deactivate!
1350
+ real = File.expand_path('../other.file',__FILE__)
1351
+ FakeFS.activate!
1352
+ fake = File.expand_path('../other.file',__FILE__)
1353
+ assert_equal real, fake
1354
+ end
1355
+
1356
+ def test_expand_path_works_with_absolute_paths
1357
+ FakeFS.deactivate!
1358
+ home = File.expand_path('~')
1359
+ FakeFS.activate!
1360
+ assert_equal "#{home}/dir/subdir", File.expand_path('subdir', '~/dir')
1361
+ assert_equal '/somewhere/else', File.expand_path('else', '/somewhere')
1362
+ end
1363
+
1312
1364
  def test_file_open_defaults_to_read
1313
1365
  File.open('foo','w') { |f| f.write 'bar' }
1314
1366
  assert_equal 'bar', File.open('foo') { |f| f.read }
@@ -2110,6 +2162,13 @@ class FakeFSTest < Test::Unit::TestCase
2110
2162
  end
2111
2163
  end
2112
2164
 
2165
+ def test_rename_with_missing_dest_directory_raises_error
2166
+ FileUtils.touch("/foo")
2167
+ assert_raises(Errno::ENOENT) do
2168
+ File.rename("/foo", "/bar/foo")
2169
+ end
2170
+ end
2171
+
2113
2172
  def test_hard_link_creates_file
2114
2173
  FileUtils.touch("/foo")
2115
2174
 
@@ -2176,10 +2235,8 @@ class FakeFSTest < Test::Unit::TestCase
2176
2235
  assert !File.exists?("/bar")
2177
2236
  end
2178
2237
 
2179
- def test_delete_raises_argument_error_with_no_filename_given
2180
- assert_raises ArgumentError do
2181
- File.delete
2182
- end
2238
+ def test_delete_returns_zero_when_no_filename_given
2239
+ assert_equal 0, File.delete
2183
2240
  end
2184
2241
 
2185
2242
  def test_delete_returns_number_one_when_given_one_arg
@@ -2458,7 +2515,6 @@ class FakeFSTest < Test::Unit::TestCase
2458
2515
  assert_equal File.stat('foo').gid, 1338
2459
2516
  end
2460
2517
 
2461
-
2462
2518
  def test_file_umask
2463
2519
  assert_equal File.umask, RealFile.umask
2464
2520
  File.umask(0740)
@@ -2526,6 +2582,25 @@ class FakeFSTest < Test::Unit::TestCase
2526
2582
  end
2527
2583
  end
2528
2584
 
2585
+ if RUBY_VERSION >= "1.9.1"
2586
+ def test_absolute_path_with_absolute_path
2587
+ assert_equal '/foo/bar', File.absolute_path('/foo/bar')
2588
+ end
2589
+
2590
+ def test_absolute_path_with_absolute_path_with_dir_name
2591
+ assert_equal '/foo/bar', File.absolute_path('/foo/bar', '/dir')
2592
+ end
2593
+
2594
+ def test_absolute_path_with_relative_path
2595
+ assert_equal "#{Dir.getwd}foo/bar", File.absolute_path('foo/bar')
2596
+ end
2597
+
2598
+ def test_absolute_path_with_relative_path_with_dir_name
2599
+ assert_equal "/dir/foo/bar", File.absolute_path('foo/bar', '/dir')
2600
+ end
2601
+ end
2602
+
2603
+
2529
2604
  if RUBY_VERSION >= "1.9.2"
2530
2605
  def test_file_size
2531
2606
  File.open("foo", 'w') do |f|
@@ -2567,6 +2642,26 @@ class FakeFSTest < Test::Unit::TestCase
2567
2642
  end
2568
2643
  end
2569
2644
 
2645
+ def test_file_read_respects_hashes
2646
+ path = 'file.txt'
2647
+ File.open(path, 'w') do |f|
2648
+ f.write 'Yatta!'
2649
+ end
2650
+
2651
+ assert_equal 'ASCII-8BIT', File.read(path, :mode => 'rb').encoding.to_s
2652
+ end
2653
+
2654
+ def test_file_read_respects_args_and_hashes
2655
+ path = 'file.txt'
2656
+ File.open(path, 'w') do |f|
2657
+ f.write 'Yatta!'
2658
+ end
2659
+
2660
+ result = File.read(path, 2, 1, :mode => 'rb')
2661
+ assert_equal 'at', result
2662
+ assert_equal 'ASCII-8BIT', result.encoding.to_s
2663
+ end
2664
+
2570
2665
  def test_file_write_can_write_a_file
2571
2666
  File.write("testfile", "0123456789")
2572
2667
  assert_equal File.read("testfile"), "0123456789"
@@ -2596,12 +2691,17 @@ class FakeFSTest < Test::Unit::TestCase
2596
2691
 
2597
2692
  def test_can_read_binary_data_in_binary_mode
2598
2693
  File.open('foo', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
2599
- assert_equal "\x00\x00\x00\x03\x00\x03\x00\xA3\x00\x00\x00y\x00\x00\x00\x00\x00", File.open("foo", "rb").read
2694
+ 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
2600
2695
  end
2601
2696
 
2602
2697
  def test_can_read_binary_data_in_non_binary_mode
2603
2698
  File.open('foo_non_bin', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
2604
2699
  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
2605
2700
  end
2701
+
2702
+ def test_can_read_binary_data_using_binread
2703
+ File.open('foo', 'wb') { |f| f << "\u0000\u0000\u0000\u0003\u0000\u0003\u0000\xA3\u0000\u0000\u0000y\u0000\u0000\u0000\u0000\u0000" }
2704
+ 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")
2705
+ end
2606
2706
  end
2607
2707
  end
@@ -116,6 +116,26 @@ class FileStatTest < Test::Unit::TestCase
116
116
  assert File.mtime("/foo") > mtime
117
117
  end
118
118
 
119
+ def test_responds_to_world_writable
120
+ FileUtils.touch("/foo")
121
+ puts File::Stat.new("/foo").world_writable?
122
+ assert File::Stat.new("/foo").world_writable? == 0777
123
+ end
124
+
125
+ def test_responds_to_world_readable
126
+ FileUtils.touch("/foo")
127
+ puts File::Stat.new("/foo").world_readable?
128
+ assert File::Stat.new("/foo").world_readable? == 0777, "#{File::Stat.new("/foo").world_readable?}"
129
+ end
130
+
131
+ def test_responds_to_world_readable
132
+ FakeFS do
133
+ require 'tempfile'
134
+ FileUtils.mkdir_p('/tmp')
135
+ ::Tempfile.open('test', '/tmp')
136
+ end
137
+ end
138
+
119
139
  def test_responds_to_realpath_only_on_1_9
120
140
  if RUBY_VERSION > '1.9'
121
141
  assert File.respond_to?(:realpath)
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ class KernelTest < Test::Unit::TestCase
4
+ include FakeFS
5
+ def setup
6
+ FakeFS.deactivate!
7
+ end
8
+
9
+ def teardown
10
+ FakeFS.activate!
11
+ end
12
+
13
+ def test_can_exec_normally
14
+ out = open("|echo 'foo'")
15
+ assert_equal "foo\n", out.gets
16
+ end
17
+
18
+ def test_fake_kernel_can_create_subprocesses
19
+ FakeFS do
20
+ out = open("|echo 'foo'")
21
+ assert_equal "foo\n", out.gets
22
+ end
23
+ end
24
+
25
+ def test_fake_kernel_can_create_new_file
26
+ FakeFS do
27
+ FileUtils.mkdir_p '/path/to/'
28
+ open('/path/to/file', "w") do |f|
29
+ f << "test"
30
+ end
31
+ assert_kind_of FakeFile, FileSystem.fs['path']['to']['file']
32
+ end
33
+ end
34
+
35
+ def test_fake_kernel_can_do_stuff
36
+ FakeFS do
37
+ FileUtils.mkdir_p('/tmp')
38
+ File.open('/tmp/a', 'w+') { |f| f.puts 'test' }
39
+
40
+ begin
41
+ puts open('/tmp/a').read
42
+ rescue Exception => e
43
+ puts e
44
+ puts e.backtrace
45
+ raise e
46
+ end
47
+ end
48
+ end
49
+
50
+ def test_can_exec_normally2
51
+ out = open("|echo 'foo'")
52
+ assert_equal "foo\n", out.gets
53
+ end
54
+
55
+ end
56
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fakefs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-03-13 00:00:00.000000000 Z
15
+ date: 2014-08-25 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -32,44 +32,30 @@ dependencies:
32
32
  name: rake
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: '10.1'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
- - - ! '>='
42
+ - - ~>
43
43
  - !ruby/object:Gem::Version
44
- version: '0'
44
+ version: '10.1'
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: rspec
47
47
  requirement: !ruby/object:Gem::Requirement
48
48
  requirements:
49
- - - ! '>='
50
- - !ruby/object:Gem::Version
51
- version: '0'
52
- type: :development
53
- prerelease: false
54
- version_requirements: !ruby/object:Gem::Requirement
55
- requirements:
56
- - - ! '>='
57
- - !ruby/object:Gem::Version
58
- version: '0'
59
- - !ruby/object:Gem::Dependency
60
- name: rdiscount
61
- requirement: !ruby/object:Gem::Requirement
62
- requirements:
63
- - - ! '>='
49
+ - - ~>
64
50
  - !ruby/object:Gem::Version
65
- version: '0'
51
+ version: '2.14'
66
52
  type: :development
67
53
  prerelease: false
68
54
  version_requirements: !ruby/object:Gem::Requirement
69
55
  requirements:
70
- - - ! '>='
56
+ - - ~>
71
57
  - !ruby/object:Gem::Version
72
- version: '0'
58
+ version: '2.14'
73
59
  description: A fake filesystem. Use it in your tests.
74
60
  email:
75
61
  - chris@ozmm.org
@@ -97,6 +83,7 @@ files:
97
83
  - lib/fakefs/file_system.rb
98
84
  - lib/fakefs/file_test.rb
99
85
  - lib/fakefs/fileutils.rb
86
+ - lib/fakefs/kernel.rb
100
87
  - lib/fakefs/pathname.rb
101
88
  - lib/fakefs/safe.rb
102
89
  - lib/fakefs/spec_helpers.rb
@@ -105,6 +92,7 @@ files:
105
92
  - spec/fakefs/spec_helpers_spec.rb
106
93
  - spec/spec.opts
107
94
  - spec/spec_helper.rb
95
+ - test/dir/tempfile_test.rb
108
96
  - test/fake/file/join_test.rb
109
97
  - test/fake/file/lstat_test.rb
110
98
  - test/fake/file/stat_test.rb
@@ -114,6 +102,7 @@ files:
114
102
  - test/fake/symlink_test.rb
115
103
  - test/fakefs_test.rb
116
104
  - test/file/stat_test.rb
105
+ - test/kernel_test.rb
117
106
  - test/safe_test.rb
118
107
  - test/test_helper.rb
119
108
  - test/verify.rb
@@ -127,17 +116,17 @@ require_paths:
127
116
  - lib
128
117
  required_ruby_version: !ruby/object:Gem::Requirement
129
118
  requirements:
130
- - - ! '>='
119
+ - - '>='
131
120
  - !ruby/object:Gem::Version
132
121
  version: '0'
133
122
  required_rubygems_version: !ruby/object:Gem::Requirement
134
123
  requirements:
135
- - - ! '>='
124
+ - - '>='
136
125
  - !ruby/object:Gem::Version
137
126
  version: '0'
138
127
  requirements: []
139
128
  rubyforge_project:
140
- rubygems_version: 2.2.0
129
+ rubygems_version: 2.2.2
141
130
  signing_key:
142
131
  specification_version: 4
143
132
  summary: A fake filesystem. Use it in your tests.
@@ -146,6 +135,7 @@ test_files:
146
135
  - spec/fakefs/spec_helpers_spec.rb
147
136
  - spec/spec.opts
148
137
  - spec/spec_helper.rb
138
+ - test/dir/tempfile_test.rb
149
139
  - test/fake/file/join_test.rb
150
140
  - test/fake/file/lstat_test.rb
151
141
  - test/fake/file/stat_test.rb
@@ -155,6 +145,8 @@ test_files:
155
145
  - test/fake/symlink_test.rb
156
146
  - test/fakefs_test.rb
157
147
  - test/file/stat_test.rb
148
+ - test/kernel_test.rb
158
149
  - test/safe_test.rb
159
150
  - test/test_helper.rb
160
151
  - test/verify.rb
152
+ has_rdoc: