diff options
author | Benoit Daloze <eregontp@gmail.com> | 2021-06-02 14:34:07 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2021-06-02 14:34:07 +0200 |
commit | 22e2a6a999b958efe5d84d9c7314e450fda82254 (patch) | |
tree | b2dc946cf2fe2c250d0583675e548c67dca3e71a /spec/ruby/core/kernel | |
parent | a4fbc7e2884ba694278adea3b32ddb8c2ac10efe (diff) |
Update to ruby/spec@a0b7d0d
Diffstat (limited to 'spec/ruby/core/kernel')
-rw-r--r-- | spec/ruby/core/kernel/at_exit_spec.rb | 11 | ||||
-rw-r--r-- | spec/ruby/core/kernel/eval_spec.rb | 65 | ||||
-rw-r--r-- | spec/ruby/core/kernel/format_spec.rb | 1 | ||||
-rw-r--r-- | spec/ruby/core/kernel/inspect_spec.rb | 8 | ||||
-rw-r--r-- | spec/ruby/core/kernel/shared/sprintf.rb | 17 |
5 files changed, 71 insertions, 31 deletions
diff --git a/spec/ruby/core/kernel/at_exit_spec.rb b/spec/ruby/core/kernel/at_exit_spec.rb index 7bdb5391fe..a784c1ae17 100644 --- a/spec/ruby/core/kernel/at_exit_spec.rb +++ b/spec/ruby/core/kernel/at_exit_spec.rb @@ -33,31 +33,32 @@ describe "Kernel.at_exit" do end EOC - result = ruby_exe(code, args: "2>&1") + result = ruby_exe(code, args: "2>&1", exit_status: 1) result.lines.should.include?("The exception matches: true (message=foo)\n") end it "both exceptions in at_exit and in the main script are printed" do - result = ruby_exe('at_exit { raise "at_exit_error" }; raise "main_script_error"', args: "2>&1") + code = 'at_exit { raise "at_exit_error" }; raise "main_script_error"' + result = ruby_exe(code, args: "2>&1", exit_status: 1) result.should.include?('at_exit_error (RuntimeError)') result.should.include?('main_script_error (RuntimeError)') end it "decides the exit status if both at_exit and the main script raise SystemExit" do - ruby_exe('at_exit { exit 43 }; exit 42', args: "2>&1") + ruby_exe('at_exit { exit 43 }; exit 42', args: "2>&1", exit_status: 43) $?.exitstatus.should == 43 end it "runs all at_exit even if some raise exceptions" do code = 'at_exit { STDERR.puts "last" }; at_exit { exit 43 }; at_exit { STDERR.puts "first" }; exit 42' - result = ruby_exe(code, args: "2>&1") + result = ruby_exe(code, args: "2>&1", exit_status: 43) result.should == "first\nlast\n" $?.exitstatus.should == 43 end it "runs at_exit handlers even if the main script fails to parse" do script = fixture(__FILE__, "at_exit.rb") - result = ruby_exe('{', options: "-r#{script}", args: "2>&1") + result = ruby_exe('{', options: "-r#{script}", args: "2>&1", exit_status: 1) $?.should_not.success? result.should.include?("at_exit ran\n") result.should.include?("syntax error") diff --git a/spec/ruby/core/kernel/eval_spec.rb b/spec/ruby/core/kernel/eval_spec.rb index c53e51e430..1e2764a4de 100644 --- a/spec/ruby/core/kernel/eval_spec.rb +++ b/spec/ruby/core/kernel/eval_spec.rb @@ -228,6 +228,17 @@ describe "Kernel#eval" do ruby_exe(code).chomp.should == "a,b,c,e,LocalJumpError,f" end + it "can be called with Method#call" do + method(:eval).call("2 * 3").should == 6 + end + + it "has the correct default definee when called through Method#call" do + class EvalSpecs + method(:eval).call("def eval_spec_method_call; end") + EvalSpecs.should have_instance_method(:eval_spec_method_call) + end + end + # See language/magic_comment_spec.rb for more magic comments specs describe "with a magic encoding comment" do it "uses the magic comment encoding for the encoding of literal strings" do @@ -374,43 +385,45 @@ CODE end end - it "activates refinements from the eval scope" do - refinery = Module.new do - refine EvalSpecs::A do - def foo - "bar" + describe 'with refinements' do + it "activates refinements from the eval scope" do + refinery = Module.new do + refine EvalSpecs::A do + def foo + "bar" + end end end - end - result = nil + result = nil - Module.new do - using refinery + Module.new do + using refinery - result = eval "EvalSpecs::A.new.foo" - end + result = eval "EvalSpecs::A.new.foo" + end - result.should == "bar" - end + result.should == "bar" + end - it "activates refinements from the binding" do - refinery = Module.new do - refine EvalSpecs::A do - def foo - "bar" + it "activates refinements from the binding" do + refinery = Module.new do + refine EvalSpecs::A do + def foo + "bar" + end end end - end - b = nil - m = Module.new do - using refinery - b = binding - end + b = nil + m = Module.new do + using refinery + b = binding + end - result = eval "EvalSpecs::A.new.foo", b + result = eval "EvalSpecs::A.new.foo", b - result.should == "bar" + result.should == "bar" + end end end diff --git a/spec/ruby/core/kernel/format_spec.rb b/spec/ruby/core/kernel/format_spec.rb index 72fd40b952..e8b031e480 100644 --- a/spec/ruby/core/kernel/format_spec.rb +++ b/spec/ruby/core/kernel/format_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' require_relative 'fixtures/classes' +# NOTE: most specs are in sprintf_spec.rb, this is just an alias describe "Kernel#format" do it "is a private method" do Kernel.should have_private_instance_method(:format) diff --git a/spec/ruby/core/kernel/inspect_spec.rb b/spec/ruby/core/kernel/inspect_spec.rb index a946d032db..e6fca8bf6f 100644 --- a/spec/ruby/core/kernel/inspect_spec.rb +++ b/spec/ruby/core/kernel/inspect_spec.rb @@ -30,4 +30,12 @@ describe "Kernel#inspect" do obj = Object.new obj.inspect.should =~ /^#<Object:0x[0-9a-f]+>$/ end + + it "returns a String for an object without #class method" do + obj = Object.new + class << obj + undef_method :class + end + obj.inspect.should be_kind_of(String) + end end diff --git a/spec/ruby/core/kernel/shared/sprintf.rb b/spec/ruby/core/kernel/shared/sprintf.rb index ca1e6bb2ed..6d62a65f7c 100644 --- a/spec/ruby/core/kernel/shared/sprintf.rb +++ b/spec/ruby/core/kernel/shared/sprintf.rb @@ -342,6 +342,23 @@ describe :kernel_sprintf, shared: true do sub_string = long_string[8, 5] sprintf("%.#{1 * 3}s", sub_string).should == "hel" end + + it "formats string with precision" do + Kernel.format("%.3s", "hello").should == "hel" + Kernel.format("%-3.3s", "hello").should == "hel" + end + + it "formats multibyte string with precision" do + Kernel.format("%.2s", "été").should == "ét" + end + + it "preserves encoding of the format string" do + str = format('%s'.encode(Encoding::UTF_8), 'foobar') + str.encoding.should == Encoding::UTF_8 + + str = format('%s'.encode(Encoding::US_ASCII), 'foobar') + str.encoding.should == Encoding::US_ASCII + end end describe "%" do |