diff options
author | Benoit Daloze <eregontp@gmail.com> | 2023-08-02 18:53:03 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2023-08-02 18:53:03 +0200 |
commit | dc54574adefe798702cc93457655da40f4939669 (patch) | |
tree | bd7ae5d6afc9bc00f6cb7813774543bc6f12b6e2 /spec/ruby/core/string | |
parent | e20f1e443f6d0a4d377ef237fffc1f4c6e27c9e1 (diff) |
Update to ruby/spec@9e278f5
Diffstat (limited to 'spec/ruby/core/string')
-rw-r--r-- | spec/ruby/core/string/encode_spec.rb | 4 | ||||
-rw-r--r-- | spec/ruby/core/string/index_spec.rb | 18 | ||||
-rw-r--r-- | spec/ruby/core/string/rindex_spec.rb | 9 | ||||
-rw-r--r-- | spec/ruby/core/string/upto_spec.rb | 6 |
4 files changed, 36 insertions, 1 deletions
diff --git a/spec/ruby/core/string/encode_spec.rb b/spec/ruby/core/string/encode_spec.rb index 5604ab7210..35ed27bb40 100644 --- a/spec/ruby/core/string/encode_spec.rb +++ b/spec/ruby/core/string/encode_spec.rb @@ -79,6 +79,10 @@ describe "String#encode" do encoded.encode("UTF-8").should == "ちfoofoo" end + it "replace multiple invalid bytes at the end with a single replacement character" do + "\xE3\x81\x93\xE3\x81".encode("UTF-8", invalid: :replace).should == "\u3053\ufffd" + end + it "replaces invalid encoding in source using a specified replacement even when a fallback is given" do encoded = "ち\xE3\x81\xFF".encode("UTF-16LE", invalid: :replace, replace: "foo", fallback: -> c { "bar" }) encoded.should == "\u3061foofoo".encode("UTF-16LE") diff --git a/spec/ruby/core/string/index_spec.rb b/spec/ruby/core/string/index_spec.rb index 2eeee9be87..b500cf6ca7 100644 --- a/spec/ruby/core/string/index_spec.rb +++ b/spec/ruby/core/string/index_spec.rb @@ -167,6 +167,13 @@ describe "String#index with String" do it "handles a substring in a subset encoding" do 'été'.index('t'.force_encoding(Encoding::US_ASCII)).should == 1 end + + it "raises an Encoding::CompatibilityError if the encodings are incompatible" do + str = 'abc'.force_encoding("ISO-2022-JP") + pattern = 'b'.force_encoding("EUC-JP") + + -> { str.index(pattern) }.should raise_error(Encoding::CompatibilityError, "incompatible character encodings: ISO-2022-JP and EUC-JP") + end end describe "String#index with Regexp" do @@ -312,6 +319,17 @@ describe "String#index with Regexp" do "われわわれ".index(/わ/, 3).should == 3 end + ruby_bug "#19763", ""..."3.3.0" do + it "raises an Encoding::CompatibilityError if the encodings are incompatible" do + re = Regexp.new "れ".encode(Encoding::EUC_JP) + -> do + "あれ".index re + end.should raise_error(Encoding::CompatibilityError, "incompatible encoding regexp match (EUC-JP regexp with UTF-8 string)") + end + end + + # The exception message was incorrectly "incompatible character encodings: UTF-8 and EUC-JP" before 3.3.0 + # Still test that the right exception class is used before that. it "raises an Encoding::CompatibilityError if the encodings are incompatible" do re = Regexp.new "れ".encode(Encoding::EUC_JP) -> do diff --git a/spec/ruby/core/string/rindex_spec.rb b/spec/ruby/core/string/rindex_spec.rb index e795105e1d..45ff13a006 100644 --- a/spec/ruby/core/string/rindex_spec.rb +++ b/spec/ruby/core/string/rindex_spec.rb @@ -204,6 +204,13 @@ describe "String#rindex with String" do it "handles a substring in a subset encoding" do 'été'.rindex('t'.force_encoding(Encoding::US_ASCII)).should == 1 end + + it "raises an Encoding::CompatibilityError if the encodings are incompatible" do + str = 'abc'.force_encoding("ISO-2022-JP") + pattern = 'b'.force_encoding("EUC-JP") + + -> { str.rindex(pattern) }.should raise_error(Encoding::CompatibilityError, "incompatible character encodings: ISO-2022-JP and EUC-JP") + end end describe "String#rindex with Regexp" do @@ -373,6 +380,6 @@ describe "String#rindex with Regexp" do re = Regexp.new "れ".encode(Encoding::EUC_JP) -> do "あれ".rindex re - end.should raise_error(Encoding::CompatibilityError) + end.should raise_error(Encoding::CompatibilityError, "incompatible encoding regexp match (EUC-JP regexp with UTF-8 string)") end end diff --git a/spec/ruby/core/string/upto_spec.rb b/spec/ruby/core/string/upto_spec.rb index f8529b1d2b..3799e338e0 100644 --- a/spec/ruby/core/string/upto_spec.rb +++ b/spec/ruby/core/string/upto_spec.rb @@ -80,6 +80,12 @@ describe "String#upto" do a.should == ["Σ", "Τ", "Υ", "Φ", "Χ", "Ψ", "Ω"] end + it "raises Encoding::CompatibilityError when incompatible characters are given" do + char1 = 'a'.force_encoding("EUC-JP") + char2 = 'b'.force_encoding("ISO-2022-JP") + -> { char1.upto(char2) {} }.should raise_error(Encoding::CompatibilityError, "incompatible character encodings: EUC-JP and ISO-2022-JP") + end + describe "on sequence of numbers" do it "calls the block as Integer#upto" do "8".upto("11").to_a.should == 8.upto(11).map(&:to_s) |