fakefs 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc6809d0301720e85b2242f8e37100be5e77395b
4
- data.tar.gz: 63eaa2bfd50a523613ec164fdbcfbbd14195aeae
3
+ metadata.gz: e41d41305c22bf0ef89f9e3e00e3b1888db74f0c
4
+ data.tar.gz: 23cf2892e9ef0c928b72436863cda9a22a0e4692
5
5
  SHA512:
6
- metadata.gz: cd81047918fe4c89615fc92c5e5b57c5c7953c367c61c2e9b823c7b4bc8079fc82fa08048dca9cb17cffefd17b19a7b1a0f69740d1345658d047b2ceb34d16a4
7
- data.tar.gz: 0a7cddc534cf1a1430392d95b8c17301ddb3f5cb233da7481da62401ef97e8995cd11522a030f04899aa932630bb976e68506fe36decac49c3d5c55db93d56e2
6
+ metadata.gz: 082a1ae98f913c68711d60091f6554fc8a87bf286b57fc7a909e25f5890cdece9851ee25ed3912f7ab9a398ea9fe920723ccf3437d26f1041252e84cec6beb2a
7
+ data.tar.gz: 817fb7bc5bd120f4f5d774a020fbc25dc0334311eb5fdcdaf391b4c089afa83cdf62c6c7cd298a1bec27c982a263cf971fc87be4a3681290690f344dec16ecea
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ UseCache: true
2
3
  Include:
3
4
  - '**/Gemfile'
4
5
  - lib/**/*
@@ -8,17 +9,19 @@ AllCops:
8
9
  - files/**/*
9
10
  - templates/**/*
10
11
  - etc/**/*
11
- MethodLength:
12
+ Metrics/MethodLength:
12
13
  Exclude:
13
14
  - lib/**/*
14
15
  - test/**/*.rb
15
16
  - spec/**/*.rb
16
- ClassLength:
17
+ Metrics/ClassLength:
17
18
  Enabled: false
18
- LineLength:
19
+ Metrics/ModuleLength:
20
+ Enabled: false
21
+ Metrics/LineLength:
19
22
  Exclude:
20
23
  - test/**/*
21
- ParameterLists:
24
+ Metrics/ParameterLists:
22
25
  Enabled: false
23
26
  Metrics/CyclomaticComplexity:
24
27
  Severity: warning
@@ -33,6 +36,10 @@ Metrics/BlockNesting:
33
36
  Max: 4
34
37
  Metrics/AbcSize:
35
38
  Enabled: false
39
+ Performance/StringReplacement:
40
+ Enabled: false
41
+ Style/ParallelAssignment:
42
+ Enabled: false
36
43
  Style/PredicateName:
37
44
  Exclude:
38
45
  - lib/fakefs/file.rb
@@ -40,6 +47,8 @@ Style/MethodName:
40
47
  Enabled: false
41
48
  Style/ModuleFunction:
42
49
  Enabled: false
43
- TrivialAccessors:
50
+ Style/SymbolProc:
51
+ Enabled: false
52
+ Style/TrivialAccessors:
44
53
  Enabled: true
45
54
  ExactNameMatch: true
@@ -7,12 +7,12 @@ Brian Donovan <donovan@squareup.com>
7
7
  Myles Eftos <myles@madpilot.com.au>
8
8
  Jeff Hodges <jeff@somethingsimilar.com>
9
9
  Jakub Jirutka <jakub@jirutka.cz>
10
+ Brian Donovan <me@brian-donovan.com>
10
11
  Pierre RAMBAUD <pierre.rambaud86@gmail.com>
11
12
  Morten Møller Riis <mortenmoellerriis@gmail.com>
12
13
  Matt Freels <matt@freels.name>
13
14
  Eero Saynatkari <projects@kittensoft.org>
14
15
  Andres Riofrio <riofrios@gmail.com>
15
- Brian Donovan <me@brian-donovan.com>
16
16
  Jacob Evans <jacob@dekz.net>
17
17
  Víctor Martínez <knoopx@gmail.com>
18
18
  Mariusz Pietrzyk <wijet@wijet.pl>
@@ -34,8 +34,9 @@ Jon Yurek <jyurek@thoughtbot.com>
34
34
  Jared Luxenberg <jared@jaredlux.com>
35
35
  DSIW <dsiw@dsiw-it.de>
36
36
  doc75 <github@virlet.org>
37
- Greg Campbell <gtcampbell@gmail.com>
38
37
  Lars Gierth <lars.gierth@gmail.com>
38
+ Greg Campbell <gtcampbell@gmail.com>
39
+ Benjamin Quorning <benjamin@quorning.net>
39
40
  marano <thiagomarano@gmail.com>
40
41
  Ben Mabey <ben@benmabey.com>
41
42
  Jorge Orlando Munoz <jmunoz@altavistaed.com>
@@ -44,10 +45,10 @@ Sam Goldstein <sam@aboutus.org>
44
45
  Adam Alboyadjian <adam@vistahigherlearning.com>
45
46
  Rick Salevsky <rsalevsky@suse.com>
46
47
  Scott Petersen <petersen@centtech.com>
47
- Matt Todd <chiology@gmail.com>
48
48
  Noah Paessel <knowuh@gmail.com>
49
- Emil Soman <emil.soman@gmail.com>
50
49
  Ryan McGeary <ryan@mcgeary.org>
50
+ Emil Soman <emil.soman@gmail.com>
51
+ Matt Todd <chiology@gmail.com>
51
52
  dmathieu <42@dmathieu.com>
52
53
  Oleg Sukhodolsky <os97673@gmail.com>
53
54
  Winston Lee <lee.winston@gmail.com>
@@ -57,36 +58,40 @@ Zequez <zequez@gmail.com>
57
58
  jameswilding <james@jameswilding.net>
58
59
  Ed Ruder <ed@squareup.com>
59
60
  Tymon Tobolski <i@teamon.eu>
60
- Benjamin Oakes <hello@benjaminoakes.com>
61
61
  Scott Barron <scott@elitists.net>
62
+ Benjamin Oakes <hello@benjaminoakes.com>
62
63
  Andrius Chamentauskas <andrius.chamentauskas@gmail.com>
63
64
  Eric Daspet <eric.daspet@survol.fr>
64
- W. Andrew Loe III <andrew@andrewloe.com>
65
65
  Matt Hoyle <matt@deployable.co>
66
+ W. Andrew Loe III <andrew@andrewloe.com>
67
+ Misha Gorodnitzky <misaka@pobox.com>
66
68
  Xavier Shay <xavier@squareup.com>
67
- Travis Herrick <travis@carbonfive.com>
68
69
  Keita Urashima <ursm@ursm.jp>
69
70
  rambutan <usul@usul-HP-EliteBook-8460p.(none)>
70
- Matthew Morgan <lytithwyn@gmail.com>
71
+ Travis Herrick <travis@carbonfive.com>
72
+ msassak <msassak@gmail.com>
71
73
  = <gokulnath@mobme.in>
72
74
  andrea longhi <andrea@spaghetticode.it>
73
- msassak <msassak@gmail.com>
75
+ Matthew Morgan <lytithwyn@gmail.com>
74
76
  David Reese <david@whatcould.com>
75
- timo3377 <tim.linquist@gmail.com>
76
77
  Andrius Chamentauskas <sinsiliux@gmail.com>
77
- Paolo Gianrossi <paolino.gianrossi@gmail.com>
78
+ timo3377 <tim.linquist@gmail.com>
78
79
  Matt Rogers <mattrogers@sbcglobal.net>
79
80
  Michael Scherer <misc@zarb.org>
81
+ Paolo Gianrossi <paolino.gianrossi@gmail.com>
80
82
  Mislav Marohnić <mislav.marohnic@gmail.com>
81
83
  Andrew Ryan <nerdrew@gmail.com>
82
84
  Rob Sanheim <rsanheim@gmail.com>
83
- Chris Wanstrath <chris@github.com>
84
- Chris Knadler <takeshi91k@gmail.com>
85
+ Jacob Atzen <jatzen@gmail.com>
85
86
  Toon Willems <willemstoon@gmail.com>
87
+ Chris Knadler <takeshi91k@gmail.com>
86
88
  Ryan Scott Lewis <ryanscottlewis@lewis-software.com>
87
- Sven Riedel <sr@gimp.org>
88
- Dane O'Connor <dane.oconnor@gmail.com>
89
+ Chris Wanstrath <chris@github.com>
89
90
  Yuta Shimizu <pachirel@gmail.com>
91
+ Benjamin Quorning <bquorning@zendesk.com>
92
+ Dane O'Connor <dane.oconnor@gmail.com>
93
+ Sven Riedel <sr@gimp.org>
90
94
  Benjamin Fleischer <github@benjaminfleischer.com>
91
95
  Jordi Massaguer Pla <jmassaguerpla@suse.de>
92
96
  Maria Shaldibina <mariash@pivotallabs.com>
97
+ Vít Ondruch <vondruch@redhat.com>
data/Rakefile CHANGED
@@ -30,7 +30,7 @@ end
30
30
  task default: [:test, :spec, :rubocop]
31
31
 
32
32
  desc 'Push a new version to rubygems.org'
33
- task :publish => [:test, :spec, :rubocop, :update_contributors, :tag, :release, :push]
33
+ task :publish => [:rubocop, :test, :spec, :rubocop, :update_contributors, :tag, :release, :push]
34
34
 
35
35
  desc 'Update contributors'
36
36
  task :update_contributors do
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake", "~> 10.3"
23
23
  spec.add_development_dependency "rspec", "~> 3.1"
24
- spec.add_development_dependency 'rubocop', '~>0.25'
24
+ spec.add_development_dependency 'rubocop', '~> 0.35.0'
25
25
  spec.add_development_dependency 'minitest', '~> 5.5'
26
26
  spec.add_development_dependency 'minitest-rg', '~> 5.1'
27
27
  end
@@ -97,11 +97,11 @@ module FakeFS
97
97
  def self.glob(pattern, _flags = 0, &block)
98
98
  matches_for_pattern = lambda do |matcher|
99
99
  [FileSystem.find(matcher) || []].flatten.map do |e|
100
- if Dir.pwd.match(/\A\/?\z/) ||
101
- !e.to_s.match(/\A#{Dir.pwd}\/?/)
100
+ if Dir.pwd.match(%r{\A/?\z}) ||
101
+ !e.to_s.match(%r{\A#{Dir.pwd}/?})
102
102
  e.to_s
103
103
  else
104
- e.to_s.match(/\A#{Dir.pwd}\/?/).post_match
104
+ e.to_s.match(%r{\A#{Dir.pwd}/?}).post_match
105
105
  end
106
106
  end.sort
107
107
  end
@@ -14,15 +14,15 @@ module FakeFS
14
14
 
15
15
  FILE_CREATION_MODES = MODES - [READ_ONLY, READ_WRITE]
16
16
 
17
- MODE_BITMASK = RealFile::RDONLY |
18
- RealFile::WRONLY |
19
- RealFile::RDWR |
20
- RealFile::APPEND |
21
- RealFile::CREAT |
22
- RealFile::EXCL |
17
+ MODE_BITMASK = RealFile::RDONLY |
18
+ RealFile::WRONLY |
19
+ RealFile::RDWR |
20
+ RealFile::APPEND |
21
+ RealFile::CREAT |
22
+ RealFile::EXCL |
23
23
  RealFile::NONBLOCK |
24
- RealFile::TRUNC |
25
- (RealFile.const_defined?(:NOCTTY) ? RealFile::NOCTTY : 0) |
24
+ RealFile::TRUNC |
25
+ (RealFile.const_defined?(:NOCTTY) ? RealFile::NOCTTY : 0) |
26
26
  (RealFile.const_defined?(:SYNC) ? RealFile::SYNC : 0)
27
27
 
28
28
  FILE_CREATION_BITMASK = RealFile::CREAT
@@ -24,7 +24,10 @@ module FakeFS
24
24
  parts = path_parts(normalize_path(path))
25
25
  return fs if parts.empty? # '/'
26
26
 
27
- entries = find_recurser(fs, parts).flatten
27
+ entries = Globber.expand(path).flat_map do |pattern|
28
+ parts = path_parts(normalize_path(pattern))
29
+ find_recurser(fs, parts).flatten
30
+ end
28
31
 
29
32
  case entries.length
30
33
  when 0 then nil
@@ -93,7 +96,7 @@ module FakeFS
93
96
  end
94
97
 
95
98
  def path_parts(path)
96
- drop_root(path.split(File::SEPARATOR)).reject(&:empty?)
99
+ Globber.path_components(path)
97
100
  end
98
101
 
99
102
  def normalize_path(path)
@@ -113,14 +116,6 @@ module FakeFS
113
116
 
114
117
  private
115
118
 
116
- def drop_root(path_parts)
117
- # we need to remove parts from root dir at least for windows and jruby
118
- return path_parts if path_parts.nil? || path_parts.empty?
119
- root = RealFile.expand_path('/').split(File::SEPARATOR).first
120
- path_parts.shift if path_parts.first == root
121
- path_parts
122
- end
123
-
124
119
  def find_recurser(dir, parts)
125
120
  return [] unless dir.respond_to? :[]
126
121
 
@@ -143,16 +138,9 @@ module FakeFS
143
138
  directories_under(dir)
144
139
  end
145
140
  else
146
- regex_body = pattern.gsub('.', '\.')
147
- .gsub('?', '.')
148
- .gsub('*', '.*')
149
- .gsub('(', '\(')
150
- .gsub(')', '\)')
151
- .gsub(/\{(.*?)\}/) do
152
- "(#{Regexp.last_match[1].gsub(',', '|')})"
153
- end
154
- .gsub(/\A\./, '(?!\.).')
155
- dir.matches(/\A#{regex_body}\Z/)
141
+ Globber.expand(pattern).flat_map do |subpattern|
142
+ dir.matches(Globber.regexp(subpattern))
143
+ end
156
144
  end
157
145
 
158
146
  if parts.empty? # we're done recursing
@@ -199,12 +199,10 @@ module FakeFS
199
199
  list.each do |f|
200
200
  if File.exist?(f)
201
201
  uid = if user
202
- user.to_s.match(/[0-9]+/) ? user.to_i :
203
- Etc.getpwnam(user).uid
202
+ user.to_s.match(/\d+/) ? user.to_i : Etc.getpwnam(user).uid
204
203
  end
205
204
  gid = if group
206
- group.to_s.match(/[0-9]+/) ? group.to_i :
207
- Etc.getgrnam(group).gid
205
+ group.to_s.match(/\d+/) ? group.to_i : Etc.getgrnam(group).gid
208
206
  end
209
207
  File.chown(uid, gid, f)
210
208
  else
@@ -0,0 +1,97 @@
1
+ module FakeFS
2
+ # Handles globbing for FakeFS.
3
+ module Globber
4
+ extend self
5
+
6
+ def expand(pattern)
7
+ return [pattern] if pattern[0] != '{' || pattern[-1] != '}'
8
+
9
+ part = ''
10
+ result = []
11
+
12
+ each_char_with_levels pattern, '{', '}' do |chr, level|
13
+ case level
14
+ when 0
15
+ case chr
16
+ when '{'
17
+ # noop
18
+ else
19
+ part << chr
20
+ end
21
+ when 1
22
+ case chr
23
+ when ','
24
+ result << part
25
+ part = ''
26
+ when '}'
27
+ # noop
28
+ else
29
+ part << chr
30
+ end
31
+ else
32
+ part << chr
33
+ end
34
+ end
35
+
36
+ result << part
37
+
38
+ result
39
+ end
40
+
41
+ def path_components(pattern)
42
+ part = ''
43
+ result = []
44
+
45
+ each_char_with_levels pattern, '{', '}' do |chr, level|
46
+ if level == 0 && chr == File::SEPARATOR
47
+ result << part
48
+ part = ''
49
+ else
50
+ part << chr
51
+ end
52
+ end
53
+
54
+ result << part
55
+
56
+ drop_root(result).reject(&:empty?)
57
+ end
58
+
59
+ def regexp(pattern)
60
+ regex_body = pattern.gsub('.', '\.')
61
+ .gsub('?', '.')
62
+ .gsub('*', '.*')
63
+ .gsub('(', '\(')
64
+ .gsub(')', '\)')
65
+ .gsub(/\{(.*?)\}/) do
66
+ "(#{Regexp.last_match[1].gsub(',', '|')})"
67
+ end
68
+ .gsub(/\A\./, '(?!\.).')
69
+ /\A#{regex_body}\Z/
70
+ end
71
+
72
+ private
73
+
74
+ def each_char_with_levels(string, level_start, level_end)
75
+ level = 0
76
+
77
+ string.each_char do |chr|
78
+ yield chr, level
79
+
80
+ case chr
81
+ when level_start
82
+ level += 1
83
+ when level_end
84
+ level -= 1
85
+ end
86
+ end
87
+ end
88
+
89
+ def drop_root(path_parts)
90
+ # we need to remove parts from root dir at least for windows and jruby
91
+ return path_parts if path_parts.nil? || path_parts.empty?
92
+ root = RealFile.expand_path('/').split(File::SEPARATOR).first
93
+ path_parts.shift if path_parts.first == root
94
+ path_parts
95
+ end
96
+ end
97
+ end
@@ -11,6 +11,7 @@ module FakeFS
11
11
  captives[:hijacked].each do |name, prc|
12
12
  ::Kernel.send(:remove_method, name.to_sym)
13
13
  ::Kernel.send(:define_method, name.to_sym, &prc)
14
+ ::Kernel.send(:private, name.to_sym)
14
15
  end
15
16
  end
16
17
 
@@ -20,6 +21,7 @@ module FakeFS
20
21
  ::Kernel.send(:define_method, name.to_sym, proc do |*args, &block|
21
22
  ::FakeFS::Kernel.captives[:original][name].call(*args, &block)
22
23
  end)
24
+ ::Kernel.send(:private, name.to_sym)
23
25
  end
24
26
  end
25
27
 
@@ -621,7 +621,7 @@ module FakeFS
621
621
  end
622
622
 
623
623
  # Pathname class
624
- class Pathname # * IO *
624
+ class Pathname # * IO *
625
625
  #
626
626
  # #each_line iterates over the line in the file.
627
627
  # It yields a String object for each line.
@@ -662,7 +662,7 @@ module FakeFS
662
662
  end
663
663
 
664
664
  # Pathname class
665
- class Pathname # * File *
665
+ class Pathname # * File *
666
666
  # See <tt>File.atime</tt>. Returns last access time.
667
667
  def atime
668
668
  File.atime(@path)
@@ -790,7 +790,7 @@ module FakeFS
790
790
  end
791
791
 
792
792
  # Pathname class
793
- class Pathname # * FileTest *
793
+ class Pathname # * FileTest *
794
794
  # See <tt>FileTest.blockdev?</tt>.
795
795
  def blockdev?
796
796
  FileTest.blockdev?(@path)
@@ -913,7 +913,7 @@ module FakeFS
913
913
  end
914
914
 
915
915
  # Pathname class
916
- class Pathname # * Dir *
916
+ class Pathname # * Dir *
917
917
  # See <tt>Dir.glob</tt>. Returns or yields Pathname objects.
918
918
  def self.glob(*args) # :yield: pathname
919
919
  if block_given?
@@ -962,7 +962,7 @@ module FakeFS
962
962
  end
963
963
 
964
964
  # Pathname class
965
- class Pathname # * Find *
965
+ class Pathname # * Find *
966
966
  #
967
967
  # Pathname#find is an iterator to traverse a directory tree
968
968
  # in a depth first manner.
@@ -985,7 +985,7 @@ module FakeFS
985
985
  end
986
986
 
987
987
  # Pathname class
988
- class Pathname # * FileUtils *
988
+ class Pathname # * FileUtils *
989
989
  # See <tt>FileUtils.mkpath</tt>. Creates a full path, including any
990
990
  # intermediate directories that don't yet exist.
991
991
  def mkpath
@@ -1005,7 +1005,7 @@ module FakeFS
1005
1005
  end
1006
1006
 
1007
1007
  # Pathname class
1008
- class Pathname # * mixed *
1008
+ class Pathname # * mixed *
1009
1009
  # Removes a file or directory, using <tt>File.unlink</tt> or
1010
1010
  # <tt>Dir.unlink</tt> as necessary.
1011
1011
  def unlink
@@ -9,5 +9,6 @@ require 'fakefs/fileutils'
9
9
  require 'fakefs/file'
10
10
  require 'fakefs/file_test'
11
11
  require 'fakefs/dir'
12
+ require 'fakefs/globber'
12
13
  require 'fakefs/pathname' if RUBY_VERSION >= '1.9.3'
13
14
  require 'fakefs/kernel'
@@ -1,7 +1,7 @@
1
1
  module FakeFS
2
2
  # Version module
3
3
  module Version
4
- VERSION = '0.6.7'
4
+ VERSION = '0.7.0'
5
5
 
6
6
  def self.to_s
7
7
  VERSION
@@ -11,7 +11,7 @@ class FileJoin < Minitest::Test
11
11
  end
12
12
 
13
13
  [
14
- %w(a b), %w(a/ b), %w(a /b), %w(a/ /b), %w(a / b)
14
+ %w(a b), %w(a/ b), %w(a /b), %w(a/ /b), %w(a / b)
15
15
  ].each_with_index do |args, i|
16
16
  define_method "test_file_join_#{i}" do
17
17
  assert_equal RealFile.join(args), File.join(args)
@@ -13,6 +13,9 @@ class FakeFSTest < Minitest::Test
13
13
 
14
14
  FakeFS.activate!
15
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')
16
19
  end
17
20
 
18
21
  def teardown
@@ -24,6 +27,7 @@ class FakeFSTest < Minitest::Test
24
27
  end
25
28
 
26
29
  def test_can_be_initialized_empty
30
+ FakeFS::FileSystem.clear
27
31
  fs = FakeFS::FileSystem
28
32
  assert_equal 0, fs.files.size
29
33
  end
@@ -831,6 +835,8 @@ class FakeFSTest < Minitest::Test
831
835
  end
832
836
 
833
837
  def test_file_object_initialization_with_brackets_in_filename
838
+ skip 'TODO'
839
+
834
840
  filename = 'bracket[1](2).txt'
835
841
  expected_contents = 'Yokudekimashita'
836
842
  # nothing raised
@@ -842,11 +848,11 @@ class FakeFSTest < Minitest::Test
842
848
  assert_equal contents, expected_contents
843
849
  end
844
850
 
845
- def test_file_object_initialization_with_brackets_in_filename
851
+ def test_file_object_initialization_with_utf_chars
846
852
  filename = "\u65e5\u672c\u8a9e.txt"
847
853
  expected_contents = 'Yokudekimashita'
848
854
  # nothing raised
849
- File.open(filename, mode: 'w') { |f| f.write "#{expected_contents}" }
855
+ File.open(filename, mode: 'w') { |f| f.write "#{expected_contents}" }
850
856
  contents = File.open("/#{filename}").read
851
857
  assert_equal contents, expected_contents
852
858
  end
@@ -1051,7 +1057,7 @@ class FakeFSTest < Minitest::Test
1051
1057
  assert_equal ['/path/foo', '/path/foobar'], Dir['/p??h/foo*']
1052
1058
 
1053
1059
  assert_equal ['/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/path/**/*']
1054
- assert_equal ['/path', '/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/**/*']
1060
+ assert_equal ['/path', '/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar', '/tmp'], Dir['/**/*']
1055
1061
 
1056
1062
  assert_equal ['/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/path/**/*']
1057
1063
  assert_equal ['/path/bar/baz'], Dir['/path/bar/**/*']
@@ -1067,6 +1073,9 @@ class FakeFSTest < Minitest::Test
1067
1073
 
1068
1074
  assert_equal ['/path/bar', '/path/bar2'], Dir['/path/bar{2,}']
1069
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
+
1070
1079
  Dir.chdir '/path' do
1071
1080
  assert_equal ['foo'], Dir['foo']
1072
1081
  end
@@ -1109,7 +1118,7 @@ class FakeFSTest < Minitest::Test
1109
1118
 
1110
1119
  def test_dir_glob_takes_optional_flags
1111
1120
  FileUtils.touch '/foo'
1112
- assert_equal Dir.glob('/*', 0), ['/foo']
1121
+ assert_equal Dir.glob('/*', 0), ['/foo', '/tmp']
1113
1122
  end
1114
1123
 
1115
1124
  def test_dir_glob_handles_recursive_globs
@@ -1142,7 +1151,7 @@ class FakeFSTest < Minitest::Test
1142
1151
  yielded = []
1143
1152
  Dir.glob('*') { |file| yielded << file }
1144
1153
 
1145
- assert_equal 2, yielded.size
1154
+ assert_equal 3, yielded.size
1146
1155
  end
1147
1156
 
1148
1157
  def test_copy_with_subdirectory
@@ -1266,7 +1275,7 @@ class FakeFSTest < Minitest::Test
1266
1275
  File.open('/foobar', 'w') { |f| f.write 'foo' }
1267
1276
  end
1268
1277
  assert_equal ['/path/foo'], Dir.glob('/path/*').sort
1269
- assert_equal ['/foobar', '/path'], Dir.glob('/*').sort
1278
+ assert_equal ['/foobar', '/path', '/tmp'], Dir.glob('/*').sort
1270
1279
 
1271
1280
  Dir.chdir '/path' do
1272
1281
  FileUtils.rm('foo')
@@ -1274,7 +1283,7 @@ class FakeFSTest < Minitest::Test
1274
1283
  end
1275
1284
 
1276
1285
  assert_equal [], Dir.glob('/path/*').sort
1277
- assert_equal ['/path'], Dir.glob('/*').sort
1286
+ assert_equal ['/path', '/tmp'], Dir.glob('/*').sort
1278
1287
  end
1279
1288
 
1280
1289
  def test_chdir_should_be_nestable
@@ -2062,7 +2071,6 @@ class FakeFSTest < Minitest::Test
2062
2071
  end
2063
2072
 
2064
2073
  def test_directory_mkdir_nested
2065
- Dir.mkdir('/tmp')
2066
2074
  Dir.mkdir('/tmp/stream20120103-11847-xc8pb.lock')
2067
2075
  assert File.exist?('/tmp/stream20120103-11847-xc8pb.lock')
2068
2076
  end
@@ -2436,7 +2444,7 @@ class FakeFSTest < Minitest::Test
2436
2444
  end
2437
2445
 
2438
2446
  def test_dir_mktmpdir
2439
- FileUtils.mkdir '/tmp'
2447
+ # FileUtils.mkdir '/tmpdir'
2440
2448
 
2441
2449
  tmpdir = Dir.mktmpdir
2442
2450
  assert File.directory?(tmpdir)
@@ -132,7 +132,7 @@ class FileStatTest < Minitest::Test
132
132
  assert File::Stat.new('/foo').world_readable? == 0777, "#{File::Stat.new('/foo').world_readable?}"
133
133
  end
134
134
 
135
- def test_responds_to_world_readable
135
+ def test_can_open_tempfile
136
136
  FakeFS do
137
137
  require 'tempfile'
138
138
  FileUtils.mkdir_p('/tmp')
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ # Globber test class
4
+ class GlobberTest < Minitest::Test
5
+ def test_expand_without_brace_groups_returns_single_entry
6
+ assert_equal ['*.rb'], FakeFS::Globber.expand('*.rb')
7
+ end
8
+
9
+ def test_expand_with_brace_group_with_one_entry_returns_single_entry
10
+ assert_equal ['abc'], FakeFS::Globber.expand('{abc}')
11
+ end
12
+
13
+ def test_expand_with_brace_group_with_multiple_entries_returns_all_entries
14
+ assert_equal %w(a b c), FakeFS::Globber.expand('{a,b,c}')
15
+ end
16
+
17
+ def test_expand_with_brace_group_with_nested_entries_expands_only_first_level
18
+ assert_equal ['a', 'b', '{c,d}'], FakeFS::Globber.expand('{a,b,{c,d}}')
19
+ end
20
+
21
+ def test_path_components_with_no_globbing_splits_on_path_separator
22
+ assert_equal %w(a b c), FakeFS::Globber.path_components('/a/b/c')
23
+ end
24
+
25
+ def test_path_components_with_path_separator_inside_brace_group
26
+ assert_equal ['a', '{b,c/d}', 'e'], FakeFS::Globber.path_components('/a/{b,c/d}/e')
27
+ end
28
+ end
@@ -46,6 +46,10 @@ class KernelTest < Minitest::Test
46
46
  end
47
47
  end
48
48
 
49
+ def test_kernel_open_remains_private
50
+ refute 'foo'.respond_to?(:open), 'String#open should be private'
51
+ end
52
+
49
53
  def test_can_exec_normally2
50
54
  out = open("|echo 'foo'")
51
55
  assert_equal "foo\n", out.gets
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.6.7
4
+ version: 0.7.0
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: 2015-02-15 00:00:00.000000000 Z
15
+ date: 2016-01-23 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -62,14 +62,14 @@ dependencies:
62
62
  requirements:
63
63
  - - "~>"
64
64
  - !ruby/object:Gem::Version
65
- version: '0.25'
65
+ version: 0.35.0
66
66
  type: :development
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
70
  - - "~>"
71
71
  - !ruby/object:Gem::Version
72
- version: '0.25'
72
+ version: 0.35.0
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: minitest
75
75
  requirement: !ruby/object:Gem::Requirement
@@ -127,6 +127,7 @@ files:
127
127
  - lib/fakefs/file_system.rb
128
128
  - lib/fakefs/file_test.rb
129
129
  - lib/fakefs/fileutils.rb
130
+ - lib/fakefs/globber.rb
130
131
  - lib/fakefs/kernel.rb
131
132
  - lib/fakefs/pathname.rb
132
133
  - lib/fakefs/safe.rb
@@ -146,6 +147,7 @@ files:
146
147
  - test/fake/symlink_test.rb
147
148
  - test/fakefs_test.rb
148
149
  - test/file/stat_test.rb
150
+ - test/globber_test.rb
149
151
  - test/kernel_test.rb
150
152
  - test/pathname_test.rb
151
153
  - test/safe_test.rb
@@ -171,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
173
  version: '0'
172
174
  requirements: []
173
175
  rubyforge_project:
174
- rubygems_version: 2.4.5
176
+ rubygems_version: 2.4.8
175
177
  signing_key:
176
178
  specification_version: 4
177
179
  summary: A fake filesystem. Use it in your tests.
@@ -190,6 +192,7 @@ test_files:
190
192
  - test/fake/symlink_test.rb
191
193
  - test/fakefs_test.rb
192
194
  - test/file/stat_test.rb
195
+ - test/globber_test.rb
193
196
  - test/kernel_test.rb
194
197
  - test/pathname_test.rb
195
198
  - test/safe_test.rb