From e0c5488ff9308b1a16718c64bc9096caca88ed83 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Fri, 28 Jan 2022 14:42:38 +0100 Subject: Update to ruby/spec@902ab83 --- spec/ruby/core/dir/fixtures/common.rb | 1 + spec/ruby/core/dir/read_spec.rb | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'spec/ruby/core/dir') diff --git a/spec/ruby/core/dir/fixtures/common.rb b/spec/ruby/core/dir/fixtures/common.rb index c32b056819..637fe93e2f 100644 --- a/spec/ruby/core/dir/fixtures/common.rb +++ b/spec/ruby/core/dir/fixtures/common.rb @@ -94,6 +94,7 @@ module DirSpecs special/こんにちは.txt special/\a ] + @mock_dir_files << "special/_\u{1f60e}.erb" end end diff --git a/spec/ruby/core/dir/read_spec.rb b/spec/ruby/core/dir/read_spec.rb index 59de2e81cf..2953aad72f 100644 --- a/spec/ruby/core/dir/read_spec.rb +++ b/spec/ruby/core/dir/read_spec.rb @@ -39,5 +39,38 @@ describe "Dir#read" do entries.sort.should == DirSpecs.expected_paths end + platform_is_not :windows do + it "returns all directory entries even when encoding conversion will fail" do + dir = Dir.open(File.join(DirSpecs.mock_dir, 'special')) + utf8_entries = [] + begin + while entry = dir.read + utf8_entries << entry + end + ensure + dir.close + end + old_internal_encoding = Encoding::default_internal + old_external_encoding = Encoding::default_external + Encoding.default_internal = Encoding::UTF_8 + Encoding.default_external = Encoding::SHIFT_JIS + dir = Dir.open(File.join(DirSpecs.mock_dir, 'special')) + shift_jis_entries = [] + begin + -> { + while entry = dir.read + shift_jis_entries << entry + end + }.should_not raise_error + ensure + dir.close + Encoding.default_internal = old_internal_encoding + Encoding.default_external = old_external_encoding + end + shift_jis_entries.size.should == utf8_entries.size + shift_jis_entries.filter { |f| f.encoding == Encoding::SHIFT_JIS }.size.should == 1 + end + end + it_behaves_like :dir_closed, :read end -- cgit v1.2.3