diff options
author | Benoit Daloze <eregontp@gmail.com> | 2021-07-29 22:11:21 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2021-07-29 22:11:21 +0200 |
commit | 6998d758248d778fa95b008c78d05473e48b8428 (patch) | |
tree | 8abc6926f647ea5f374a5b34c3a4820c5861e32e /spec/ruby/core/dir | |
parent | 15d05f8120745a121b93fab9fd2addf5f094e8d2 (diff) | |
download | ruby-6998d758248d778fa95b008c78d05473e48b8428.tar.gz |
Update to ruby/spec@b65d01f
Diffstat (limited to 'spec/ruby/core/dir')
-rw-r--r-- | spec/ruby/core/dir/children_spec.rb | 114 | ||||
-rw-r--r-- | spec/ruby/core/dir/each_child_spec.rb | 72 | ||||
-rw-r--r-- | spec/ruby/core/dir/glob_spec.rb | 25 | ||||
-rw-r--r-- | spec/ruby/core/dir/shared/glob.rb | 17 |
4 files changed, 125 insertions, 103 deletions
diff --git a/spec/ruby/core/dir/children_spec.rb b/spec/ruby/core/dir/children_spec.rb index f890f54eb4..986c8f38c0 100644 --- a/spec/ruby/core/dir/children_spec.rb +++ b/spec/ruby/core/dir/children_spec.rb @@ -69,76 +69,74 @@ describe "Dir.children" do end end -ruby_version_is "2.6" do - describe "Dir#children" do - before :all do - DirSpecs.create_mock_dirs - end +describe "Dir#children" do + before :all do + DirSpecs.create_mock_dirs + end - before :each do - @internal = Encoding.default_internal - end + before :each do + @internal = Encoding.default_internal + end - after :all do - DirSpecs.delete_mock_dirs - end + after :all do + DirSpecs.delete_mock_dirs + end - after :each do - Encoding.default_internal = @internal - @dir.close if @dir - end + after :each do + Encoding.default_internal = @internal + @dir.close if @dir + end - it "returns an Array of filenames in an existing directory including dotfiles" do - @dir = Dir.new(DirSpecs.mock_dir) - a = @dir.children.sort - @dir.close + it "returns an Array of filenames in an existing directory including dotfiles" do + @dir = Dir.new(DirSpecs.mock_dir) + a = @dir.children.sort + @dir.close - a.should == DirSpecs.expected_paths - %w[. ..] + a.should == DirSpecs.expected_paths - %w[. ..] - @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested") - a = @dir.children.sort - a.should == %w|.dotfile.ext directory| - end + @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested") + a = @dir.children.sort + a.should == %w|.dotfile.ext directory| + end - it "accepts an encoding keyword for the encoding of the entries" do - @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested", encoding: "utf-8") - dirs = @dir.to_a.sort - dirs.each { |d| d.encoding.should == Encoding::UTF_8 } - end + it "accepts an encoding keyword for the encoding of the entries" do + @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested", encoding: "utf-8") + dirs = @dir.to_a.sort + dirs.each { |d| d.encoding.should == Encoding::UTF_8 } + end - ruby_version_is ""..."2.7" do - it "accepts nil options" do - @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested", nil) - dirs = @dir.to_a.sort - dirs.each { |d| d.encoding.should == Encoding.find("filesystem") } - end + ruby_version_is ""..."2.7" do + it "accepts nil options" do + @dir = Dir.new("#{DirSpecs.mock_dir}/deeply/nested", nil) + dirs = @dir.to_a.sort + dirs.each { |d| d.encoding.should == Encoding.find("filesystem") } end + end - it "returns children encoded with the filesystem encoding by default" do - # This spec depends on the locale not being US-ASCII because if it is, the - # children that are not ascii_only? will be BINARY encoded. - @dir = Dir.new(File.join(DirSpecs.mock_dir, 'special')) - children = @dir.children.sort - encoding = Encoding.find("filesystem") - encoding = Encoding::BINARY if encoding == Encoding::US_ASCII - platform_is_not :windows do - children.should include("こんにちは.txt".force_encoding(encoding)) - end - children.first.encoding.should equal(Encoding.find("filesystem")) + it "returns children encoded with the filesystem encoding by default" do + # This spec depends on the locale not being US-ASCII because if it is, the + # children that are not ascii_only? will be BINARY encoded. + @dir = Dir.new(File.join(DirSpecs.mock_dir, 'special')) + children = @dir.children.sort + encoding = Encoding.find("filesystem") + encoding = Encoding::BINARY if encoding == Encoding::US_ASCII + platform_is_not :windows do + children.should include("こんにちは.txt".force_encoding(encoding)) end + children.first.encoding.should equal(Encoding.find("filesystem")) + end - it "returns children encoded with the specified encoding" do - path = File.join(DirSpecs.mock_dir, 'special') - @dir = Dir.new(path, encoding: "euc-jp") - children = @dir.children.sort - children.first.encoding.should equal(Encoding::EUC_JP) - end + it "returns children encoded with the specified encoding" do + path = File.join(DirSpecs.mock_dir, 'special') + @dir = Dir.new(path, encoding: "euc-jp") + children = @dir.children.sort + children.first.encoding.should equal(Encoding::EUC_JP) + end - it "returns children transcoded to the default internal encoding" do - Encoding.default_internal = Encoding::EUC_KR - @dir = Dir.new(File.join(DirSpecs.mock_dir, 'special')) - children = @dir.children.sort - children.first.encoding.should equal(Encoding::EUC_KR) - end + it "returns children transcoded to the default internal encoding" do + Encoding.default_internal = Encoding::EUC_KR + @dir = Dir.new(File.join(DirSpecs.mock_dir, 'special')) + children = @dir.children.sort + children.first.encoding.should equal(Encoding::EUC_KR) end end diff --git a/spec/ruby/core/dir/each_child_spec.rb b/spec/ruby/core/dir/each_child_spec.rb index 684f42acc0..f7980991e5 100644 --- a/spec/ruby/core/dir/each_child_spec.rb +++ b/spec/ruby/core/dir/each_child_spec.rb @@ -62,52 +62,50 @@ describe "Dir.each_child" do end end -ruby_version_is "2.6" do - describe "Dir#each_child" do - before :all do - DirSpecs.create_mock_dirs - end +describe "Dir#each_child" do + before :all do + DirSpecs.create_mock_dirs + end - after :all do - DirSpecs.delete_mock_dirs - end + after :all do + DirSpecs.delete_mock_dirs + end - after :each do - @dir.close if @dir - end + after :each do + @dir.close if @dir + end - it "yields all names in an existing directory to the provided block" do - a, b = [], [] - @dir = Dir.new(DirSpecs.mock_dir) - @dir2 = Dir.new("#{DirSpecs.mock_dir}/deeply/nested") + it "yields all names in an existing directory to the provided block" do + a, b = [], [] + @dir = Dir.new(DirSpecs.mock_dir) + @dir2 = Dir.new("#{DirSpecs.mock_dir}/deeply/nested") - @dir.each_child { |f| a << f } - @dir2.each_child { |f| b << f } - @dir2.close + @dir.each_child { |f| a << f } + @dir2.each_child { |f| b << f } + @dir2.close - a.sort.should == DirSpecs.expected_paths - %w|. ..| - b.sort.should == %w|.dotfile.ext directory| - end + a.sort.should == DirSpecs.expected_paths - %w|. ..| + b.sort.should == %w|.dotfile.ext directory| + end - it "returns self when successful" do - @dir = Dir.new(DirSpecs.mock_dir) - @dir.each_child { |f| f }.should == @dir - end + it "returns self when successful" do + @dir = Dir.new(DirSpecs.mock_dir) + @dir.each_child { |f| f }.should == @dir + end - describe "when no block is given" do - it "returns an Enumerator" do - @dir = Dir.new(DirSpecs.mock_dir) + describe "when no block is given" do + it "returns an Enumerator" do + @dir = Dir.new(DirSpecs.mock_dir) - @dir.each_child.should be_an_instance_of(Enumerator) - @dir.each_child.to_a.sort.should == DirSpecs.expected_paths - %w|. ..| - end + @dir.each_child.should be_an_instance_of(Enumerator) + @dir.each_child.to_a.sort.should == DirSpecs.expected_paths - %w|. ..| + end - describe "returned Enumerator" do - describe "size" do - it "should return nil" do - @dir = Dir.new(DirSpecs.mock_dir) - @dir.each_child.size.should == nil - end + describe "returned Enumerator" do + describe "size" do + it "should return nil" do + @dir = Dir.new(DirSpecs.mock_dir) + @dir.each_child.size.should == nil end end end diff --git a/spec/ruby/core/dir/glob_spec.rb b/spec/ruby/core/dir/glob_spec.rb index 61553ab0b1..6533c9b65a 100644 --- a/spec/ruby/core/dir/glob_spec.rb +++ b/spec/ruby/core/dir/glob_spec.rb @@ -29,6 +29,23 @@ describe "Dir.glob" do %w!file_one.ext file_two.ext! end + it 'returns matching file paths when supplied :base keyword argument' do + dir = tmp('dir_glob_base') + file_1 = "#{dir}/lib/bloop.rb" + file_2 = "#{dir}/lib/soup.rb" + file_3 = "#{dir}/lib/mismatched_file_type.txt" + file_4 = "#{dir}/mismatched_directory.rb" + + touch file_1 + touch file_2 + touch file_3 + touch file_4 + + Dir.glob('**/*.rb', base: "#{dir}/lib").sort.should == ["bloop.rb", "soup.rb"].sort + ensure + rm_r dir + end + it "calls #to_path to convert multiple patterns" do pat1 = mock('file_one.ext') pat1.should_receive(:to_path).and_return('file_one.ext') @@ -133,6 +150,14 @@ describe "Dir.glob" do Dir.glob('{deeply/**/,subdir_two/*}').sort.should == expected end + it "preserves multiple /s before a **" do + expected = %w[ + deeply//nested/directory/structure + ] + + Dir.glob('{deeply//**/structure}').sort.should == expected + end + it "accepts a block and yields it with each elements" do ary = [] ret = Dir.glob(["file_o*", "file_t*"]) { |t| ary << t } diff --git a/spec/ruby/core/dir/shared/glob.rb b/spec/ruby/core/dir/shared/glob.rb index c35f7d71ca..ae5c2a114b 100644 --- a/spec/ruby/core/dir/shared/glob.rb +++ b/spec/ruby/core/dir/shared/glob.rb @@ -23,14 +23,7 @@ describe :dir_glob, shared: true do Dir.send(@method, obj).should == %w[file_one.ext] end - ruby_version_is ""..."2.6" do - it "splits the string on \\0 if there is only one string given" do - Dir.send(@method, "file_o*\0file_t*").should == - %w!file_one.ext file_two.ext! - end - end - - ruby_version_is "2.6"..."2.7" do + ruby_version_is ""..."2.7" do it "splits the string on \\0 if there is only one string given and warns" do -> { Dir.send(@method, "file_o*\0file_t*").should == @@ -205,6 +198,14 @@ describe :dir_glob, shared: true do Dir.send(@method, '**/').sort.should == expected end + it "recursively matches any subdirectories except './' or '../' with '**/' from the base directory if that is specified" do + expected = %w[ + nested/directory + ] + + Dir.send(@method, '**/*ory', base: 'deeply').sort.should == expected + end + ruby_version_is ''...'3.1' do it "recursively matches any subdirectories including ./ and ../ with '.**/'" do Dir.chdir("#{DirSpecs.mock_dir}/subdir_one") do |