mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require_relative '../../spec_helper'
 | 
						|
 | 
						|
describe "Warning.warn" do
 | 
						|
  it "complains" do
 | 
						|
    -> {
 | 
						|
      Warning.warn("Chunky bacon!")
 | 
						|
    }.should complain("Chunky bacon!")
 | 
						|
  end
 | 
						|
 | 
						|
  it "does not add a newline" do
 | 
						|
    ruby_exe("Warning.warn('test')", args: "2>&1").should == "test"
 | 
						|
  end
 | 
						|
 | 
						|
  it "returns nil" do
 | 
						|
    ruby_exe("p Warning.warn('test')", args: "2>&1").should == "testnil\n"
 | 
						|
  end
 | 
						|
 | 
						|
  it "extends itself" do
 | 
						|
    Warning.singleton_class.ancestors.should include(Warning)
 | 
						|
  end
 | 
						|
 | 
						|
  it "has Warning as the method owner" do
 | 
						|
    ruby_exe("p Warning.method(:warn).owner").should == "Warning\n"
 | 
						|
  end
 | 
						|
 | 
						|
  it "can be overridden" do
 | 
						|
    code = <<-RUBY
 | 
						|
      $stdout.sync = true
 | 
						|
      $stderr.sync = true
 | 
						|
      def Warning.warn(msg)
 | 
						|
        if msg.start_with?("A")
 | 
						|
          puts msg.upcase
 | 
						|
        else
 | 
						|
          super
 | 
						|
        end
 | 
						|
      end
 | 
						|
      Warning.warn("A warning!")
 | 
						|
      Warning.warn("warning from stderr\n")
 | 
						|
    RUBY
 | 
						|
    ruby_exe(code, args: "2>&1").should == %Q[A WARNING!\nwarning from stderr\n]
 | 
						|
  end
 | 
						|
 | 
						|
  it "is called by parser warnings" do
 | 
						|
    Warning.should_receive(:warn)
 | 
						|
    verbose = $VERBOSE
 | 
						|
    $VERBOSE = false
 | 
						|
    begin
 | 
						|
      eval "{ key: :value, key: :value2 }"
 | 
						|
    ensure
 | 
						|
      $VERBOSE = verbose
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  ruby_version_is "2.5" do
 | 
						|
    it "is called by Kernel.warn" do
 | 
						|
      Warning.should_receive(:warn).with("Chunky bacon!\n")
 | 
						|
      verbose = $VERBOSE
 | 
						|
      $VERBOSE = false
 | 
						|
      begin
 | 
						|
        Kernel.warn("Chunky bacon!")
 | 
						|
      ensure
 | 
						|
        $VERBOSE = verbose
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |