diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-01 15:41:50 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-01 15:41:50 +0000 |
commit | 4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4 (patch) | |
tree | 8d712e18a619a9720d181d0d44e8cc2474ff31ee /spec/ruby/library | |
parent | 821d9a2d30f2e0d3f9009dc001b4b49aaa63c66e (diff) | |
download | ruby-4d7b0b9112f2adf9e87ef75056f930bf7c1f3dc4.tar.gz |
Update to ruby/spec@bacedc5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/library')
35 files changed, 166 insertions, 49 deletions
diff --git a/spec/ruby/library/bigdecimal/limit_spec.rb b/spec/ruby/library/bigdecimal/limit_spec.rb index 41308abcd8..0c90415aec 100644 --- a/spec/ruby/library/bigdecimal/limit_spec.rb +++ b/spec/ruby/library/bigdecimal/limit_spec.rb @@ -11,20 +11,35 @@ describe "BigDecimal.limit" do BigDecimal.limit(old) end - it "use the global limit if no precision is specified" do + it "uses the global limit if no precision is specified" do BigDecimalSpecs.with_limit(0) do (BigDecimal('0.888') + BigDecimal('0')).should == BigDecimal('0.888') + (BigDecimal('0.888') - BigDecimal('0')).should == BigDecimal('0.888') (BigDecimal('0.888') * BigDecimal('3')).should == BigDecimal('2.664') + (BigDecimal('0.888') / BigDecimal('3')).should == BigDecimal('0.296') end BigDecimalSpecs.with_limit(1) do (BigDecimal('0.888') + BigDecimal('0')).should == BigDecimal('0.9') + (BigDecimal('0.888') - BigDecimal('0')).should == BigDecimal('0.9') (BigDecimal('0.888') * BigDecimal('3')).should == BigDecimal('3') + (BigDecimal('0.888') / BigDecimal('3')).should == BigDecimal('0.3') end BigDecimalSpecs.with_limit(2) do (BigDecimal('0.888') + BigDecimal('0')).should == BigDecimal('0.89') + (BigDecimal('0.888') - BigDecimal('0')).should == BigDecimal('0.89') (BigDecimal('0.888') * BigDecimal('3')).should == BigDecimal('2.7') + (BigDecimal('0.888') / BigDecimal('3')).should == BigDecimal('0.30') + end + end + + it "picks the specified precision over global limit" do + BigDecimalSpecs.with_limit(3) do + BigDecimal('0.888').add(BigDecimal('0'), 2).should == BigDecimal('0.89') + BigDecimal('0.888').sub(BigDecimal('0'), 2).should == BigDecimal('0.89') + BigDecimal('0.888').mult(BigDecimal('3'), 2).should == BigDecimal('2.7') + BigDecimal('0.888').div(BigDecimal('3'), 2).should == BigDecimal('0.30') end end end diff --git a/spec/ruby/library/date/constants_spec.rb b/spec/ruby/library/date/constants_spec.rb index 8e564fe665..ae343f07ec 100644 --- a/spec/ruby/library/date/constants_spec.rb +++ b/spec/ruby/library/date/constants_spec.rb @@ -34,9 +34,13 @@ describe "Date constants" do it "freezes MONTHNAMES, DAYNAMES, ABBR_MONTHNAMES, ABBR_DAYSNAMES" do [Date::MONTHNAMES, Date::DAYNAMES, Date::ABBR_MONTHNAMES, Date::ABBR_DAYNAMES].each do |ary| - lambda { ary << "Unknown" }.should raise_error + lambda { + ary << "Unknown" + }.should raise_error(RuntimeError, /frozen/) ary.compact.each do |name| - lambda { name << "modified" }.should raise_error + lambda { + name << "modified" + }.should raise_error(RuntimeError, /frozen/) end end end diff --git a/spec/ruby/library/date/minus_month_spec.rb b/spec/ruby/library/date/minus_month_spec.rb index fbe5cb8593..51befcc6d4 100644 --- a/spec/ruby/library/date/minus_month_spec.rb +++ b/spec/ruby/library/date/minus_month_spec.rb @@ -13,15 +13,6 @@ describe "Date#<<" do d.should == Date.civil(2008, 2, 29) end - ruby_version_is ""..."2.3" do - it "raises an error on non numeric parameters" do - lambda { Date.civil(2007,2,27) << :hello }.should raise_error - lambda { Date.civil(2007,2,27) << "hello" }.should raise_error - lambda { Date.civil(2007,2,27) << Date.new }.should raise_error - lambda { Date.civil(2007,2,27) << Object.new }.should raise_error - end - end - ruby_version_is "2.3" do it "raises an error on non numeric parameters" do lambda { Date.civil(2007,2,27) << :hello }.should raise_error(TypeError) diff --git a/spec/ruby/library/datetime/now_spec.rb b/spec/ruby/library/datetime/now_spec.rb index a5bf590aff..9118163533 100644 --- a/spec/ruby/library/datetime/now_spec.rb +++ b/spec/ruby/library/datetime/now_spec.rb @@ -7,7 +7,7 @@ describe "DateTime.now" do end it "sets the current date" do - (DateTime.now - Date.today).to_f.should be_close(0.0, 1.0) + (DateTime.now - Date.today).to_f.should be_close(0.0, 2.0) end it "sets the current time" do diff --git a/spec/ruby/library/datetime/to_time_spec.rb b/spec/ruby/library/datetime/to_time_spec.rb index f5b7cb8a23..2a016d1528 100644 --- a/spec/ruby/library/datetime/to_time_spec.rb +++ b/spec/ruby/library/datetime/to_time_spec.rb @@ -6,6 +6,18 @@ describe "DateTime#to_time" do DateTime.now.to_time.should be_kind_of(Time) end + it "returns a Time representing the same instant" do + datetime = DateTime.civil(3, 12, 31, 23, 58, 59) + time = datetime.to_time.utc + + time.year.should == 3 + time.month.should == 12 + time.day.should == 31 + time.hour.should == 23 + time.min.should == 58 + time.sec.should == 59 + end + ruby_version_is "2.4" do it "preserves the same time regardless of local time or zone" do date = DateTime.new(2012, 12, 24, 12, 23, 00, '+03:00') diff --git a/spec/ruby/library/erb/new_spec.rb b/spec/ruby/library/erb/new_spec.rb index 917fd470b7..f141f1c00e 100644 --- a/spec/ruby/library/erb/new_spec.rb +++ b/spec/ruby/library/erb/new_spec.rb @@ -65,7 +65,7 @@ END end - it "not support '<%-= expr %> even when trim_mode is '-'" do + it "does not support '<%-= expr %> even when trim_mode is '-'" do input = <<'END' <p> @@ -74,7 +74,9 @@ END </p> END - lambda { ERB.new(input, nil, '-').result }.should raise_error + lambda { + ERB.new(input, nil, '-').result + }.should raise_error(SyntaxError) end it "regards lines starting with '%' as '<% ... %>' when trim_mode is '%'" do diff --git a/spec/ruby/library/etc/nprocessors_spec.rb b/spec/ruby/library/etc/nprocessors_spec.rb index bce11d06c5..2a22aaafdf 100644 --- a/spec/ruby/library/etc/nprocessors_spec.rb +++ b/spec/ruby/library/etc/nprocessors_spec.rb @@ -1,11 +1,9 @@ require File.expand_path('../../../spec_helper', __FILE__) require 'etc' -ruby_version_is "2.2" do - describe "Etc.nprocessors" do - it "returns the number of online processors" do - Etc.nprocessors.should be_kind_of(Integer) - Etc.nprocessors.should >= 1 - end +describe "Etc.nprocessors" do + it "returns the number of online processors" do + Etc.nprocessors.should be_kind_of(Integer) + Etc.nprocessors.should >= 1 end end diff --git a/spec/ruby/library/openssl/config/freeze_spec.rb b/spec/ruby/library/openssl/config/freeze_spec.rb index 2ed48ae629..b764df4f45 100644 --- a/spec/ruby/library/openssl/config/freeze_spec.rb +++ b/spec/ruby/library/openssl/config/freeze_spec.rb @@ -8,9 +8,13 @@ describe "OpenSSL::Config#freeze" do it "freezes" do c = OpenSSL::Config.new - lambda{c['foo'] = [ ['key', 'value'] ]}.should_not raise_error + lambda { + c['foo'] = [ ['key', 'value'] ] + }.should_not raise_error c.freeze c.frozen?.should be_true - lambda{c['foo'] = [ ['key', 'value'] ]}.should raise_error + lambda { + c['foo'] = [ ['key', 'value'] ] + }.should raise_error(TypeError) end end diff --git a/spec/ruby/library/socket/ipsocket/peeraddr_spec.rb b/spec/ruby/library/socket/ipsocket/peeraddr_spec.rb index dfd4e050ce..27529c3d1c 100644 --- a/spec/ruby/library/socket/ipsocket/peeraddr_spec.rb +++ b/spec/ruby/library/socket/ipsocket/peeraddr_spec.rb @@ -16,7 +16,9 @@ describe "Socket::IPSocket#peeraddr" do end it "raises error if socket is not connected" do - lambda { @server.peeraddr }.should raise_error + lambda { + @server.peeraddr + }.should raise_error(Errno::ENOTCONN) end it "returns an array of information on the peer" do diff --git a/spec/ruby/library/socket/unixsocket/peeraddr_spec.rb b/spec/ruby/library/socket/unixsocket/peeraddr_spec.rb index 14dccf7917..dc5a319f4d 100644 --- a/spec/ruby/library/socket/unixsocket/peeraddr_spec.rb +++ b/spec/ruby/library/socket/unixsocket/peeraddr_spec.rb @@ -21,7 +21,9 @@ describe "UNIXSocket#peeraddr" do end it "raises an error in server sockets" do - lambda { @server.peeraddr }.should raise_error + lambda { + @server.peeraddr + }.should raise_error(Errno::ENOTCONN) end end diff --git a/spec/ruby/library/stringio/printf_spec.rb b/spec/ruby/library/stringio/printf_spec.rb index 5f811547bc..a2094bf52d 100644 --- a/spec/ruby/library/stringio/printf_spec.rb +++ b/spec/ruby/library/stringio/printf_spec.rb @@ -1,5 +1,6 @@ require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../fixtures/classes', __FILE__) +require File.expand_path('../../../core/kernel/shared/sprintf', __FILE__) describe "StringIO#printf" do before :each do @@ -28,6 +29,14 @@ describe "StringIO#printf" do @io.printf("%d %04x", 123, 123) @io.pos.should eql(16) end + + describe "formatting" do + it_behaves_like :kernel_sprintf, -> (format, *args) { + io = StringIO.new + io.printf(format, *args) + io.string + } + end end describe "StringIO#printf when in append mode" do @@ -59,3 +68,4 @@ describe "StringIO#printf when self is not writable" do lambda { io.printf("test") }.should raise_error(IOError) end end + diff --git a/spec/ruby/library/syslog/alert_spec.rb b/spec/ruby/library/syslog/alert_spec.rb index 4653fa8636..e61b3d6ef3 100644 --- a/spec/ruby/library/syslog/alert_spec.rb +++ b/spec/ruby/library/syslog/alert_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/close_spec.rb b/spec/ruby/library/syslog/close_spec.rb index f7bc4ac6e9..d7aadb2198 100644 --- a/spec/ruby/library/syslog/close_spec.rb +++ b/spec/ruby/library/syslog/close_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.close" do diff --git a/spec/ruby/library/syslog/constants_spec.rb b/spec/ruby/library/syslog/constants_spec.rb index c335ff46e6..1ce82be883 100644 --- a/spec/ruby/library/syslog/constants_spec.rb +++ b/spec/ruby/library/syslog/constants_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog::Constants" do diff --git a/spec/ruby/library/syslog/crit_spec.rb b/spec/ruby/library/syslog/crit_spec.rb index 28e3af67cc..cf2cc71abc 100644 --- a/spec/ruby/library/syslog/crit_spec.rb +++ b/spec/ruby/library/syslog/crit_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/debug_spec.rb b/spec/ruby/library/syslog/debug_spec.rb index ff9fc5d97e..09ba9997a2 100644 --- a/spec/ruby/library/syslog/debug_spec.rb +++ b/spec/ruby/library/syslog/debug_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/emerg_spec.rb b/spec/ruby/library/syslog/emerg_spec.rb index 15cc49be32..d416ee57c6 100644 --- a/spec/ruby/library/syslog/emerg_spec.rb +++ b/spec/ruby/library/syslog/emerg_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/err_spec.rb b/spec/ruby/library/syslog/err_spec.rb index fdadd49e09..ad65f6c276 100644 --- a/spec/ruby/library/syslog/err_spec.rb +++ b/spec/ruby/library/syslog/err_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/facility_spec.rb b/spec/ruby/library/syslog/facility_spec.rb index 02ea754b6b..fdcabfa0dd 100644 --- a/spec/ruby/library/syslog/facility_spec.rb +++ b/spec/ruby/library/syslog/facility_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.facility" do diff --git a/spec/ruby/library/syslog/ident_spec.rb b/spec/ruby/library/syslog/ident_spec.rb index a685dfa927..ef1144f12e 100644 --- a/spec/ruby/library/syslog/ident_spec.rb +++ b/spec/ruby/library/syslog/ident_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.ident" do diff --git a/spec/ruby/library/syslog/info_spec.rb b/spec/ruby/library/syslog/info_spec.rb index 88ff81994d..b2abe7c04a 100644 --- a/spec/ruby/library/syslog/info_spec.rb +++ b/spec/ruby/library/syslog/info_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/inspect_spec.rb b/spec/ruby/library/syslog/inspect_spec.rb index 5fd7793c22..c22a053286 100644 --- a/spec/ruby/library/syslog/inspect_spec.rb +++ b/spec/ruby/library/syslog/inspect_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.inspect" do diff --git a/spec/ruby/library/syslog/instance_spec.rb b/spec/ruby/library/syslog/instance_spec.rb index 60f43dbdea..65d97a5d50 100644 --- a/spec/ruby/library/syslog/instance_spec.rb +++ b/spec/ruby/library/syslog/instance_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.instance" do diff --git a/spec/ruby/library/syslog/log_spec.rb b/spec/ruby/library/syslog/log_spec.rb index 2403943cfc..eac6be8b01 100644 --- a/spec/ruby/library/syslog/log_spec.rb +++ b/spec/ruby/library/syslog/log_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.log" do diff --git a/spec/ruby/library/syslog/mask_spec.rb b/spec/ruby/library/syslog/mask_spec.rb index 49be56d304..7a11d1e88c 100644 --- a/spec/ruby/library/syslog/mask_spec.rb +++ b/spec/ruby/library/syslog/mask_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.mask" do diff --git a/spec/ruby/library/syslog/notice_spec.rb b/spec/ruby/library/syslog/notice_spec.rb index 7a27e23729..f31074f3f6 100644 --- a/spec/ruby/library/syslog/notice_spec.rb +++ b/spec/ruby/library/syslog/notice_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/open_spec.rb b/spec/ruby/library/syslog/open_spec.rb index 18e7f0c80e..424b48d831 100644 --- a/spec/ruby/library/syslog/open_spec.rb +++ b/spec/ruby/library/syslog/open_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/reopen', __FILE__) require 'syslog' @@ -73,8 +74,13 @@ platform_is_not :windows do it "raises an error if the log is opened" do Syslog.open - lambda { Syslog.open}.should raise_error - lambda { Syslog.close; Syslog.open }.should_not raise_error + lambda { + Syslog.open + }.should raise_error(RuntimeError, /syslog already open/) + lambda { + Syslog.close + Syslog.open + }.should_not raise_error Syslog.close end end diff --git a/spec/ruby/library/syslog/opened_spec.rb b/spec/ruby/library/syslog/opened_spec.rb index 82b8ba45f7..1db388fa61 100644 --- a/spec/ruby/library/syslog/opened_spec.rb +++ b/spec/ruby/library/syslog/opened_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.opened?" do diff --git a/spec/ruby/library/syslog/options_spec.rb b/spec/ruby/library/syslog/options_spec.rb index 4a3914531a..145d11a2fb 100644 --- a/spec/ruby/library/syslog/options_spec.rb +++ b/spec/ruby/library/syslog/options_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require 'syslog' describe "Syslog.options" do diff --git a/spec/ruby/library/syslog/reopen_spec.rb b/spec/ruby/library/syslog/reopen_spec.rb index de1ce2c255..49704784e5 100644 --- a/spec/ruby/library/syslog/reopen_spec.rb +++ b/spec/ruby/library/syslog/reopen_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/reopen', __FILE__) require 'syslog' diff --git a/spec/ruby/library/syslog/warning_spec.rb b/spec/ruby/library/syslog/warning_spec.rb index 85fcb3a355..31fa9524f7 100644 --- a/spec/ruby/library/syslog/warning_spec.rb +++ b/spec/ruby/library/syslog/warning_spec.rb @@ -1,5 +1,6 @@ +require File.expand_path('../../../spec_helper', __FILE__) + platform_is_not :windows do - require File.expand_path('../../../spec_helper', __FILE__) require File.expand_path('../shared/log', __FILE__) require 'syslog' diff --git a/spec/ruby/library/time/to_datetime_spec.rb b/spec/ruby/library/time/to_datetime_spec.rb new file mode 100644 index 0000000000..54655963c6 --- /dev/null +++ b/spec/ruby/library/time/to_datetime_spec.rb @@ -0,0 +1,27 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require 'time' + +describe "Time#to_datetime" do + it "returns a DateTime representing the same instant" do + time = Time.utc(3, 12, 31, 23, 58, 59) + datetime = time.to_datetime + datetime.year.should == 3 + datetime.month.should == 12 + datetime.day.should == 31 + datetime.hour.should == 23 + datetime.min.should == 58 + datetime.sec.should == 59 + end + + it "roundtrips" do + time = Time.utc(3, 12, 31, 23, 58, 59) + datetime = time.to_datetime + datetime.to_time.utc.should == time + end + + it "yields a DateTime with the default Calendar reform day" do + Time.utc(1582, 10, 4, 1, 2, 3).to_datetime.start.should == Date::ITALY + Time.utc(1582, 10, 14, 1, 2, 3).to_datetime.start.should == Date::ITALY + Time.utc(1582, 10, 15, 1, 2, 3).to_datetime.start.should == Date::ITALY + end +end diff --git a/spec/ruby/library/uri/join_spec.rb b/spec/ruby/library/uri/join_spec.rb index 681ba45cc7..3e0dbe7f2b 100644 --- a/spec/ruby/library/uri/join_spec.rb +++ b/spec/ruby/library/uri/join_spec.rb @@ -21,7 +21,9 @@ describe "URI.join" do end it "raises an error if given no argument" do - lambda{ URI.join }.should raise_error + lambda { + URI.join + }.should raise_error(ArgumentError) end it "doesn't create redundant '/'s" do diff --git a/spec/ruby/library/uri/shared/join.rb b/spec/ruby/library/uri/shared/join.rb index dfe44e9be2..ff85b57a80 100644 --- a/spec/ruby/library/uri/shared/join.rb +++ b/spec/ruby/library/uri/shared/join.rb @@ -18,7 +18,9 @@ describe :uri_join, shared: true do end it "raises an error if given no argument" do - lambda{ @object.join }.should raise_error + lambda { + @object.join + }.should raise_error(ArgumentError) end it "doesn't create redundant '/'s" do diff --git a/spec/ruby/library/yaml/load_spec.rb b/spec/ruby/library/yaml/load_spec.rb index 7c5a33d52f..6a2ab65b65 100644 --- a/spec/ruby/library/yaml/load_spec.rb +++ b/spec/ruby/library/yaml/load_spec.rb @@ -34,6 +34,27 @@ describe "YAML.load" do end end + it "loads strings with chars from non-base Unicode plane" do + # We add these strings as bytes and force the encoding for safety + # as bugs in parsing unicode characters can obscure bugs in this + # area. + + yaml_and_strings = { + # "--- 🌵" => "🌵" + [45, 45, 45, 32, 240, 159, 140, 181] => + [240, 159, 140, 181], + # "--- 🌵 and some text" => "🌵 and some text" + [45, 45, 45, 32, 240, 159, 140, 181, 32, 97, 110, 100, 32, 115, 111, 109, 101, 32, 116, 101, 120, 116] => + [240, 159, 140, 181, 32, 97, 110, 100, 32, 115, 111, 109, 101, 32, 116, 101, 120, 116], + # "--- Some text 🌵 and some text" => "Some text 🌵 and some text" + [45, 45, 45, 32, 83, 111, 109, 101, 32, 116, 101, 120, 116, 32, 240, 159, 140, 181, 32, 97, 110, 100, 32, 115, 111, 109, 101, 32, 116, 101, 120, 116] => + [83, 111, 109, 101, 32, 116, 101, 120, 116, 32, 240, 159, 140, 181, 32, 97, 110, 100, 32, 115, 111, 109, 101, 32, 116, 101, 120, 116] + } + yaml_and_strings.each do |yaml, str| + YAML.load(yaml.pack("C*").force_encoding("UTF-8")).should == str.pack("C*").force_encoding("UTF-8") + end + end + it "fails on invalid keys" do if YAML.to_s == "Psych" error = Psych::SyntaxError |