1module Test
2  module Unit
3    module Util
4      module Output
5        ##
6        # Returns output for standard output and standard
7        # error as string.
8        #
9        # Example:
10        #   capture_output do
11        #     puts("stdout")
12        #     warn("stderr")
13        #   end # -> ["stdout\n", "stderr\n"]
14        def capture_output
15          require 'stringio'
16
17          output = StringIO.new
18          error = StringIO.new
19          stdout_save, stderr_save = $stdout, $stderr
20          $stdout, $stderr = output, error
21          begin
22            yield
23            [output.string, error.string]
24          ensure
25            $stdout, $stderr = stdout_save, stderr_save
26          end
27        end
28      end
29    end
30  end
31end
32