From: Howard Kapustein Date: 2009-06-02T15:52:08+09:00 Subject: [ruby-core:23668] [Bug #1555] Inaccessible 'io' parameter in Test::Unit::UI::Console::TestRunner.initialize(x,y,io) Bug #1555: Inaccessible 'io' parameter in Test::Unit::UI::Console::TestRunner.initialize(x,y,io) http://redmine.ruby-lang.org/issues/show/1555 Author: Howard Kapustein Status: Open, Priority: High Category: core, Target version: Ruby 1.8.6 ruby -v: ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] Console::TestRunner supports an io parameter to send output to an IO object, but Autorunner has no way to control it! test/unit/ui/console/testrunner.rb contains the Test::Unit::UI::Console::TestRunnner class with a 3-parm initalizer But Test::Unit::AutoRunner has no option to specify an alternative destination for io, and even if it did, run is only called with 2 parameters! I need to redirect test output to a file, and the console testrunner supports this, but the autorunner machinery doesn't use it. The fix is simple, but requires 2 files to change. Console::TestRunner defines a 3rd, optional 'io' parameter, obviously meant to support redirecting output to an arbitrary io object. The autorunner machinery is fine for me (I don't need a whole custom autorunner), but needs an option to direct output elsewhere (e.g. a file). I added a new attribute, output_io, set via the new --output option, and the critical change def run ... result.run(@suite, @output_level).passed? end to result.run(@suite, @output_level, @output_io).passed? But run calls the TestRunner thru Test::Unit::UI::run() - we need to alter test\unit\ui\testrunnerutilities.rb to accept this 3rd parm and pass it along, i.e. change def run(suite, output_level=NORMAL) return new(suite, output_level).start end to def run(suite, output_level=NORMAL, io=STDOUT) return new(suite, output_level, io).start end I've attached modified files, diff against 1.8.6 to see the exact changes. I don't see how Console TestRunner's io parameter is accessible - w/o writing a custom AutoRunner, just to control this one option. A heavyweight solution with ugly maintenance and sync implications. But if I've missed something, by all means, please point it out. ---------------------------------------- http://redmine.ruby-lang.org