From ae1f7186d79f35861d3c97ce9e4a4e24b7c14279 Mon Sep 17 00:00:00 2001 From: Roman Chernyatchik Date: Fri, 25 Jun 2010 19:06:11 +0400 Subject: [PATCH] Make --formatter option work with fully qualified classes names Closes #48. --- lib/rspec/core/configuration.rb | 4 ++-- spec/rspec/core/configuration_spec.rb | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/rspec/core/configuration.rb b/lib/rspec/core/configuration.rb index 2767e660c9..eaa1a7cb17 100644 --- a/lib/rspec/core/configuration.rb +++ b/lib/rspec/core/configuration.rb @@ -169,8 +169,8 @@ def full_description=(description) end def formatter=(formatter_to_use) - if string_const?(formatter_to_use) && Object.const_defined?(formatter_to_use) - formatter_class = Object.const_get(formatter_to_use) + if string_const?(formatter_to_use) && (class_name = eval(formatter_to_use)).is_a?(Class) + formatter_class = class_name elsif formatter_to_use.is_a?(Class) formatter_class = formatter_to_use else diff --git a/spec/rspec/core/configuration_spec.rb b/spec/rspec/core/configuration_spec.rb index 61462cdb8a..69ab7a905b 100644 --- a/spec/rspec/core/configuration_spec.rb +++ b/spec/rspec/core/configuration_spec.rb @@ -247,11 +247,17 @@ def that_thing end it "sets a formatter based on its class name" do - Object.const_set("CustomFormatter",Class.new(Formatters::BaseFormatter)) + Object.const_set("CustomFormatter", Class.new(Formatters::BaseFormatter)) config.formatter = "CustomFormatter" config.formatter.should be_an_instance_of(CustomFormatter) end - + + it "sets a formatter based on its class fully qualified name" do + RSpec.const_set("CustomFormatter", Class.new(Formatters::BaseFormatter)) + config.formatter = "RSpec::CustomFormatter" + config.formatter.should be_an_instance_of(RSpec::CustomFormatter) + end + it "raises ArgumentError if formatter is unknown" do lambda { config.formatter = :progresss }.should raise_error(ArgumentError) end @@ -277,13 +283,13 @@ def that_thing config.line_number = '37' config.filter.should == {:line_number => 37} end - + it "overrides :focused" do config.filter_run :focused => true config.line_number = '37' config.filter.should == {:line_number => 37} end - + it "prevents :focused" do config.line_number = '37' config.filter_run :focused => true @@ -319,7 +325,7 @@ def that_thing config.debug = false end end - + describe "#output=" do it "sets the output" do output = mock("output")