Class: OutputToFDMatcher
- Defined in:
- lib/extensions/mspec/mspec/matchers/output_to_fd.rb
Overview
Lower-level output speccing mechanism for a single output stream. Unlike OutputMatcher which provides methods to capture the output, we actually replace the FD itself so that there is no reliance on a certain method being used.
Instance Method Summary collapse
- #failure_message ⇒ Object
-
#initialize(expected, to) ⇒ OutputToFDMatcher
constructor
A new instance of OutputToFDMatcher.
- #matches?(block) ⇒ Boolean
- #negative_failure_message ⇒ Object
- #with_tmp ⇒ Object
Constructor Details
#initialize(expected, to) ⇒ OutputToFDMatcher
Returns a new instance of OutputToFDMatcher.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/extensions/mspec/mspec/matchers/output_to_fd.rb', line 9 def initialize(expected, to) @to, @expected = to, expected case @to when STDOUT @to_name = "STDOUT" when STDERR @to_name = "STDERR" when IO @to_name = @to.object_id.to_s else raise ArgumentError, "#{@to.inspect} is not a supported output target" end end |
Instance Method Details
#failure_message ⇒ Object
57 58 59 60 |
# File 'lib/extensions/mspec/mspec/matchers/output_to_fd.rb', line 57 def () ["Expected (#{@to_name}): #{@expected.inspect}\n", "#{'but got'.rjust(@to_name.length + 10)}: #{@actual.inspect}\nBacktrace"] end |
#matches?(block) ⇒ Boolean
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/extensions/mspec/mspec/matchers/output_to_fd.rb', line 33 def matches?(block) old_to = @to.dup with_tmp do |out| # Replacing with a file handle so that Readline etc. work @to.reopen out begin block.call ensure @to.reopen old_to old_to.close end out.rewind @actual = out.read case @expected when Regexp !(@actual =~ @expected).nil? else @actual == @expected end end end |
#negative_failure_message ⇒ Object
62 63 64 |
# File 'lib/extensions/mspec/mspec/matchers/output_to_fd.rb', line 62 def () ["Expected output (#{@to_name}) to NOT be:\n", @actual.inspect] end |