fakefs 0.6.7 → 0.7.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 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