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
136
137
138
139
140
|
require 'abstract_unit'
require 'active_support/core_ext/kernel'
class KernelTest < ActiveSupport::TestCase
def test_silence_warnings
silence_warnings { assert_nil $VERBOSE }
assert_equal 1234, silence_warnings { 1234 }
end
def test_silence_warnings_verbose_invariant
old_verbose = $VERBOSE
silence_warnings { raise }
flunk
rescue
assert_equal old_verbose, $VERBOSE
end
def test_enable_warnings
enable_warnings { assert_equal true, $VERBOSE }
assert_equal 1234, enable_warnings { 1234 }
end
def test_enable_warnings_verbose_invariant
old_verbose = $VERBOSE
enable_warnings { raise }
flunk
rescue
assert_equal old_verbose, $VERBOSE
end
def test_silence_stderr
old_stderr_position = STDERR.tell
silence_stderr { STDERR.puts 'hello world' }
assert_equal old_stderr_position, STDERR.tell
rescue Errno::ESPIPE
# Skip if we can't STDERR.tell
end
def test_silence_stream
old_stream_position = STDOUT.tell
silence_stream(STDOUT) { STDOUT.puts 'hello world' }
assert_equal old_stream_position, STDOUT.tell
rescue Errno::ESPIPE
# Skip if we can't stream.tell
end
def test_silence_stream_closes_file_descriptors
stream = StringIO.new
dup_stream = StringIO.new
stream.stubs(:dup).returns(dup_stream)
dup_stream.expects(:close)
silence_stream(stream) { stream.puts 'hello world' }
end
def test_quietly
old_stdout_position, old_stderr_position = STDOUT.tell, STDERR.tell
quietly do
puts 'see me, feel me'
STDERR.puts 'touch me, heal me'
end
assert_equal old_stdout_position, STDOUT.tell
assert_equal old_stderr_position, STDERR.tell
rescue Errno::ESPIPE
# Skip if we can't STDERR.tell
end
def test_silence_stderr_with_return_value
assert_equal 1, silence_stderr { 1 }
end
def test_class_eval
o = Object.new
class << o; @x = 1; end
assert_equal 1, o.class_eval { @x }
end
def test_capture
assert_equal 'STDERR', capture(:stderr) { $stderr.print 'STDERR' }
assert_equal 'STDOUT', capture(:stdout) { print 'STDOUT' }
assert_equal "STDERR\n", capture(:stderr) { system('echo STDERR 1>&2') }
assert_equal "STDOUT\n", capture(:stdout) { system('echo STDOUT') }
end
end
class KernelSuppressTest < ActiveSupport::TestCase
def test_reraise
assert_raise(LoadError) do
suppress(ArgumentError) { raise LoadError }
end
end
def test_suppression
suppress(ArgumentError) { raise ArgumentError }
suppress(LoadError) { raise LoadError }
suppress(LoadError, ArgumentError) { raise LoadError }
suppress(LoadError, ArgumentError) { raise ArgumentError }
end
end
class MockStdErr
attr_reader :output
def puts(message)
@output ||= []
@output << message
end
def info(message)
puts(message)
end
def write(message)
puts(message)
end
end
class KernelDebuggerTest < ActiveSupport::TestCase
def test_debugger_not_available_message_to_stderr
old_stderr = $stderr
$stderr = MockStdErr.new
debugger
assert_match(/Debugger requested/, $stderr.output.first)
ensure
$stderr = old_stderr
end
def test_debugger_not_available_message_to_rails_logger
rails = Class.new do
def self.logger
@logger ||= MockStdErr.new
end
end
Object.const_set(:Rails, rails)
debugger
assert_match(/Debugger requested/, rails.logger.output.first)
ensure
Object.send(:remove_const, :Rails)
end
end
|