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
|