2018-03-04 10:09:32 -05:00
|
|
|
require_relative '../../spec_helper'
|
2017-10-28 11:15:48 -04:00
|
|
|
|
|
|
|
describe "Warning.warn" do
|
|
|
|
ruby_version_is "2.4" do
|
|
|
|
it "complains" do
|
|
|
|
-> {
|
|
|
|
Warning.warn("Chunky bacon!")
|
|
|
|
}.should complain("Chunky bacon!")
|
|
|
|
end
|
|
|
|
|
2018-11-27 15:38:57 -05:00
|
|
|
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
|
|
|
|
|
2017-10-28 11:15:48 -04:00
|
|
|
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
|
|
|
|
end
|
|
|
|
|
|
|
|
ruby_version_is "2.5" do
|
|
|
|
it "is called by Kernel.warn" do
|
|
|
|
Warning.should_receive(:warn)
|
|
|
|
verbose = $VERBOSE
|
|
|
|
$VERBOSE = false
|
|
|
|
begin
|
|
|
|
Kernel.warn("Chunky bacon!")
|
|
|
|
ensure
|
|
|
|
$VERBOSE = verbose
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|