[rspec-users] heres how to get color output in rspec_autotest with rspec 0.7.5

Michael Johnston lastobelus at mac.com
Thu Dec 21 06:04:05 EST 2006


In case anyone else is trying to make this work, here is what I did  
(Before 0.7.4 I had patched the regex in zentest redgreen, but that  
is not used any more)

To use directly, it is very simple. In rspec_autotest/lib/ 
rspec_autotest.rb, add a -c to the spec_command in the initializer  
function:

	@spec_command = "spec -c --diff unified"

This won't help however if you want to use rails_spec_server. To do  
that I patched rspec_0.7.5 to add an option to force the adding of  
colour codes (I did it this way because I assumed the check for  
output==Kernel was important for some other situation and I didn't  
want to just throw it away):

diff -upr rspec-0.7.5/lib/spec/runner/formatter/ 
base_text_formatter.rb rspec-0.7.5_with_colour_patch/lib/spec/runner/ 
formatter/base_text_formatter.rb
--- rspec-0.7.5/lib/spec/runner/formatter/base_text_formatter.rb	 
2006-12-21 01:42:44.000000000 -0800
+++ rspec-0.7.5_with_colour_patch/lib/spec/runner/formatter/ 
base_text_formatter.rb	2006-12-21 01:47:16.000000000 -0800
@@ -5,10 +5,11 @@ module Spec
        # non-text based ones too - just ignore the +output+ constructor
        # argument.
        class BaseTextFormatter
-        def initialize(output, dry_run=false, colour=false)
+        def initialize(output, dry_run=false, colour=false,  
force_colour=false)
            @output = output
            @dry_run = dry_run
-          @colour = colour
+          @colour = colour || force_colour
+          @force_colour = force_colour
            begin ; require 'Win32/Console/ANSI' if @colour &&  
PLATFORM =~ /win32/ ; rescue LoadError ; raise "You must gem install  
win32console to use colour on Windows" ; end
	      end
@@ -96,7 +97,7 @@ module Spec
          end
          def colour(text, colour_code)
-          return text unless @colour && @output == Kernel
+          return text unless @force_colour || (@colour && @output ==  
Kernel)
            "#{colour_code}#{text}\e[0m"
          end

diff -upr rspec-0.7.5/lib/spec/runner/option_parser.rb  
rspec-0.7.5_with_colour_patch/lib/spec/runner/option_parser.rb
--- rspec-0.7.5/lib/spec/runner/option_parser.rb	2006-12-21  
01:42:44.000000000 -0800
+++ rspec-0.7.5_with_colour_patch/lib/spec/runner/option_parser.rb	 
2006-12-21 01:38:15.000000000 -0800
@@ -11,8 +11,7 @@ module Spec
        def create_context_runner(args, err, out, warn_if_no_files)
          options = parse(args, err, out, warn_if_no_files)
-
-        formatter = options.formatter_type.new(options.out,  
options.dry_run, options.colour)
+        formatter = options.formatter_type.new(options.out,  
options.dry_run, options.colour, options.force_colour)
          options.reporter = Reporter.new(formatter,  
options.backtrace_tweaker)
          # this doesn't really belong here.
@@ -71,6 +70,10 @@ module Spec
              options.colour = true
            end

+          opts.on("-C", "--force-colour", "--force-color", "force  
adding color codes regardless of output method") do
+            options.force_colour = true
+          end
+
            opts.on("-s", "--spec SPECIFICATION_NAME", "Execute  
context or specification with matching name") do |spec_name|
              options.spec_name = spec_name
            end






then you can set the spec_command in rspec_autotest/lib/ 
rspec_autotest.rb to:

     @spec_command = "script/rails_spec -C --diff unified"



Cheers,
Michael



More information about the rspec-users mailing list