Michael Johnston
2006-Dec-21 11:04 UTC
[rspec-users] heres how to get color output in rspec_autotest with rspec 0.7.5
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
aslak hellesoy
2006-Dec-21 17:14 UTC
[rspec-users] heres how to get color output in rspec_autotest with rspec 0.7.5
Thanks, I saw the patch in the tracker. On 12/21/06, Michael Johnston <lastobelus at mac.com> wrote:> 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 > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >