1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
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
it "is called by Kernel.warn with nil category keyword" do
Warning.should_receive(:warn).with("Chunky bacon!\n", category: nil)
verbose = $VERBOSE
$VERBOSE = false
begin
Kernel.warn("Chunky bacon!")
ensure
$VERBOSE = verbose
end
end
it "is called by Kernel.warn with given category keyword converted to a symbol" do
Warning.should_receive(:warn).with("Chunky bacon!\n", category: :deprecated)
verbose = $VERBOSE
$VERBOSE = false
begin
Kernel.warn("Chunky bacon!", category: "deprecated")
ensure
$VERBOSE = verbose
end
end
it "warns when category is :deprecated and Warning[:deprecated] is true" do
warn_deprecated = Warning[:deprecated]
Warning[:deprecated] = true
begin
-> {
Warning.warn("foo", category: :deprecated)
}.should complain("foo")
ensure
Warning[:deprecated] = warn_deprecated
end
end
it "warns when category is :experimental and Warning[:experimental] is true" do
warn_experimental = Warning[:experimental]
Warning[:experimental] = true
begin
-> {
Warning.warn("foo", category: :experimental)
}.should complain("foo")
ensure
Warning[:experimental] = warn_experimental
end
end
it "doesn't print message when category is :deprecated but Warning[:deprecated] is false" do
warn_deprecated = Warning[:deprecated]
Warning[:deprecated] = false
begin
-> {
Warning.warn("foo", category: :deprecated)
}.should_not complain
ensure
Warning[:deprecated] = warn_deprecated
end
end
it "doesn't print message when category is :experimental but Warning[:experimental] is false" do
warn_experimental = Warning[:experimental]
Warning[:experimental] = false
begin
-> {
Warning.warn("foo", category: :experimental)
}.should_not complain
ensure
Warning[:experimental] = warn_experimental
end
end
it "prints the message when VERBOSE is false" do
-> { Warning.warn("foo") }.should complain("foo")
end
it "prints the message when VERBOSE is nil" do
-> { Warning.warn("foo") }.should complain("foo", verbose: nil)
end
it "prints the message when VERBOSE is true" do
-> { Warning.warn("foo") }.should complain("foo", verbose: true)
end
end
|