Class: Spec::Runner::Options
Constant Summary collapse
- FILE_SORTERS =
{ 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)} }
- EXAMPLE_FORMATTERS =
Load these lazily for better speed
{ # Load these lazily for better speed 'silent' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'], 'l' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'], 'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], 's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'], 'nested' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'], 'n' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'], 'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], 'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'], 'progress' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], 'p' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'], 'failing_examples' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], 'e' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'], 'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], 'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'], 'profile' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], 'o' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'], 'textmate' => ['spec/runner/formatter/text_mate_formatter', 'Formatter::TextMateFormatter'] }
Instance Attribute Summary collapse
-
#argv ⇒ Object
Returns the value of attribute argv.
-
#autospec ⇒ Object
Returns the value of attribute autospec.
-
#backtrace_tweaker ⇒ Object
Returns the value of attribute backtrace_tweaker.
-
#colour ⇒ Object
Returns the value of attribute colour.
-
#context_lines ⇒ Object
Returns the value of attribute context_lines.
-
#debug ⇒ Object
Returns the value of attribute debug.
-
#diff_format ⇒ Object
Returns the value of attribute diff_format.
-
#differ_class ⇒ Object
readonly
Returns the value of attribute differ_class.
- #drb_port ⇒ Object
-
#dry_run ⇒ Object
Returns the value of attribute dry_run.
-
#error_stream ⇒ Object
Returns the value of attribute error_stream.
-
#example_groups ⇒ Object
readonly
Returns the value of attribute example_groups.
-
#examples ⇒ Object
readonly
Returns the value of attribute examples.
-
#filename_pattern ⇒ Object
Returns the value of attribute filename_pattern.
-
#files ⇒ Object
readonly
Returns the value of attribute files.
-
#heckle_runner ⇒ Object
Returns the value of attribute heckle_runner.
-
#line_number ⇒ Object
Returns the value of attribute line_number.
-
#loadby ⇒ Object
Returns the value of attribute loadby.
-
#output_stream ⇒ Object
Returns the value of attribute output_stream.
-
#profile ⇒ Object
Returns the value of attribute profile.
-
#reporter ⇒ Object
Returns the value of attribute reporter.
-
#reverse ⇒ Object
Returns the value of attribute reverse.
-
#timeout ⇒ Object
Returns the value of attribute timeout.
-
#user_input_for_runner ⇒ Object
Returns the value of attribute user_input_for_runner.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
Instance Method Summary collapse
-
#add_dir_from_project_root_to_load_path(dir, load_path = $LOAD_PATH) ⇒ Object
:nodoc:.
- #add_example_group(example_group) ⇒ Object
- #after_suite_parts ⇒ Object
- #before_suite_parts ⇒ Object
-
#determine_project_root ⇒ Object
:nodoc:.
- #dry_run? ⇒ Boolean
- #example_line ⇒ Object
- #examples_run? ⇒ Boolean
- #examples_should_not_be_run ⇒ Object
- #files_to_load ⇒ Object
- #formatter_options ⇒ Object
- #formatters ⇒ Object
-
#initialize(error_stream, output_stream) ⇒ Options
constructor
A new instance of Options.
- #line_number_requested? ⇒ Boolean
- #load_formatters(format_options, formatters) ⇒ Object
- #load_heckle_runner(heckle) ⇒ Object
- #mock_framework ⇒ Object
- #number_of_examples ⇒ Object
- #parse_diff(format) ⇒ Object
- #parse_example(example) ⇒ Object
- #parse_format(format_arg) ⇒ Object
-
#project_root ⇒ Object
:nodoc:.
- #remove_example_group(example_group) ⇒ Object
- #require_ruby_debug ⇒ Object
- #run_examples ⇒ Object
- #which_heckle_runner ⇒ Object
Constructor Details
#initialize(error_stream, output_stream) ⇒ Options
Returns a new instance of Options.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/spec/runner/options.rb', line 56 def initialize(error_stream, output_stream) @error_stream = error_stream @output_stream = output_stream @filename_pattern = "**/*_spec.rb" @backtrace_tweaker = QuietBacktraceTweaker.new @examples = [] @colour = false @profile = false @dry_run = false @debug = false @reporter = Reporter.new(self) @context_lines = 3 @diff_format = :unified @files = [] @example_groups = [] @result = nil @examples_run = false @examples_should_be_run = nil @user_input_for_runner = nil @after_suite_parts = [] @files_loaded = false @out_used = nil end |
Instance Attribute Details
#argv ⇒ Object
Returns the value of attribute argv.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def argv @argv end |
#autospec ⇒ Object
Returns the value of attribute autospec.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def autospec @autospec end |
#backtrace_tweaker ⇒ Object
Returns the value of attribute backtrace_tweaker.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def backtrace_tweaker @backtrace_tweaker end |
#colour ⇒ Object
Returns the value of attribute colour.
53 54 55 |
# File 'lib/spec/runner/options.rb', line 53 def colour @colour end |
#context_lines ⇒ Object
Returns the value of attribute context_lines.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def context_lines @context_lines end |
#debug ⇒ Object
Returns the value of attribute debug.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def debug @debug end |
#diff_format ⇒ Object
Returns the value of attribute diff_format.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def diff_format @diff_format end |
#differ_class ⇒ Object
Returns the value of attribute differ_class.
53 54 55 |
# File 'lib/spec/runner/options.rb', line 53 def differ_class @differ_class end |
#drb_port ⇒ Object
294 295 296 |
# File 'lib/spec/runner/options.rb', line 294 def drb_port @drb_port.to_i if defined?(@drb_port) end |
#dry_run ⇒ Object
Returns the value of attribute dry_run.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def dry_run @dry_run end |
#error_stream ⇒ Object
Returns the value of attribute error_stream.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def error_stream @error_stream end |
#example_groups ⇒ Object (readonly)
Returns the value of attribute example_groups.
53 54 55 |
# File 'lib/spec/runner/options.rb', line 53 def example_groups @example_groups end |
#examples ⇒ Object (readonly)
Returns the value of attribute examples.
53 54 55 |
# File 'lib/spec/runner/options.rb', line 53 def examples @examples end |
#filename_pattern ⇒ Object
Returns the value of attribute filename_pattern.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def filename_pattern @filename_pattern end |
#files ⇒ Object (readonly)
Returns the value of attribute files.
53 54 55 |
# File 'lib/spec/runner/options.rb', line 53 def files @files end |
#heckle_runner ⇒ Object
Returns the value of attribute heckle_runner.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def heckle_runner @heckle_runner end |
#line_number ⇒ Object
Returns the value of attribute line_number.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def line_number @line_number end |
#loadby ⇒ Object
Returns the value of attribute loadby.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def loadby @loadby end |
#output_stream ⇒ Object
Returns the value of attribute output_stream.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def output_stream @output_stream end |
#profile ⇒ Object
Returns the value of attribute profile.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def profile @profile end |
#reporter ⇒ Object
Returns the value of attribute reporter.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def reporter @reporter end |
#reverse ⇒ Object
Returns the value of attribute reverse.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def reverse @reverse end |
#timeout ⇒ Object
Returns the value of attribute timeout.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def timeout @timeout end |
#user_input_for_runner ⇒ Object
Returns the value of attribute user_input_for_runner.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def user_input_for_runner @user_input_for_runner end |
#verbose ⇒ Object
Returns the value of attribute verbose.
31 32 33 |
# File 'lib/spec/runner/options.rb', line 31 def verbose @verbose end |
Instance Method Details
#add_dir_from_project_root_to_load_path(dir, load_path = $LOAD_PATH) ⇒ Object
:nodoc:
117 118 119 120 121 |
# File 'lib/spec/runner/options.rb', line 117 def add_dir_from_project_root_to_load_path(dir, load_path=$LOAD_PATH) # :nodoc: return if project_root.nil? full_dir = File.join(project_root, dir) load_path.unshift full_dir unless load_path.include?(full_dir) end |
#add_example_group(example_group) ⇒ Object
80 81 82 |
# File 'lib/spec/runner/options.rb', line 80 def add_example_group(example_group) @example_groups << example_group end |
#after_suite_parts ⇒ Object
169 170 171 |
# File 'lib/spec/runner/options.rb', line 169 def after_suite_parts Spec::Example::BeforeAndAfterHooks.after_suite_parts end |
#before_suite_parts ⇒ Object
165 166 167 |
# File 'lib/spec/runner/options.rb', line 165 def before_suite_parts Spec::Example::BeforeAndAfterHooks.before_suite_parts end |
#determine_project_root ⇒ Object
:nodoc:
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/spec/runner/options.rb', line 106 def determine_project_root # :nodoc: # This is borrowed (slightly modified) from Scott Taylors # project_path project: # http://github.com/smtlaissezfaire/project_path Pathname(File.('.')).ascend do |path| if File.exists?(File.join(path, "spec")) return path end end end |
#dry_run? ⇒ Boolean
290 291 292 |
# File 'lib/spec/runner/options.rb', line 290 def dry_run? @dry_run == true end |
#example_line ⇒ Object
88 89 90 |
# File 'lib/spec/runner/options.rb', line 88 def example_line Spec::Runner::LineNumberQuery.new(self).example_line_for(files.first, line_number) end |
#examples_run? ⇒ Boolean
173 174 175 |
# File 'lib/spec/runner/options.rb', line 173 def examples_run? @examples_run end |
#examples_should_not_be_run ⇒ Object
177 178 179 |
# File 'lib/spec/runner/options.rb', line 177 def examples_should_not_be_run @examples_should_be_run = false end |
#files_to_load ⇒ Object
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/spec/runner/options.rb', line 274 def files_to_load result = [] sorted_files.each do |file| if File.directory?(file) filename_pattern.split(",").each do |pattern| result += Dir[File.("#{file}/#{pattern.strip}")] end elsif File.file?(file) result << file else raise "File or directory not found: #{file}" end end result end |
#formatter_options ⇒ Object
251 252 253 254 255 256 257 |
# File 'lib/spec/runner/options.rb', line 251 def @formatter_options ||= OpenStruct.new( :colour => colour, :autospec => autospec, :dry_run => dry_run ) end |
#formatters ⇒ Object
234 235 236 237 |
# File 'lib/spec/runner/options.rb', line 234 def formatters @format_options ||= [['progress', @output_stream]] @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS) end |
#line_number_requested? ⇒ Boolean
84 85 86 |
# File 'lib/spec/runner/options.rb', line 84 def line_number_requested? !!line_number end |
#load_formatters(format_options, formatters) ⇒ Object
239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/spec/runner/options.rb', line 239 def load_formatters(, formatters) .map do |format, where| formatter_type = if formatters[format] require formatters[format][0] eval(formatters[format][1], binding, __FILE__, __LINE__) else load_class(format, 'formatter', '--format') end formatter_type.new(, where) end end |
#load_heckle_runner(heckle) ⇒ Object
263 264 265 266 267 |
# File 'lib/spec/runner/options.rb', line 263 def load_heckle_runner(heckle) @format_options ||= [['silent', @output_stream]] require which_heckle_runner @heckle_runner = ::Spec::Runner::HeckleRunner.new(heckle) end |
#mock_framework ⇒ Object
181 182 183 184 |
# File 'lib/spec/runner/options.rb', line 181 def mock_framework # TODO - don't like this dependency - perhaps store this in here instead? Spec::Runner.configuration.mock_framework end |
#number_of_examples ⇒ Object
269 270 271 272 |
# File 'lib/spec/runner/options.rb', line 269 def number_of_examples return examples.size unless examples.empty? @example_groups.inject(0) {|sum, group| sum + group.number_of_examples} end |
#parse_diff(format) ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/spec/runner/options.rb', line 201 def parse_diff(format) case format when :context, 'context', 'c' @diff_format = :context default_differ when :unified, 'unified', 'u', '', nil @diff_format = :unified default_differ else @diff_format = :custom self.differ_class = load_class(format, 'differ', '--diff') end end |
#parse_example(example) ⇒ Object
215 216 217 218 219 220 221 |
# File 'lib/spec/runner/options.rb', line 215 def parse_example(example) if(File.file?(example)) @examples = [File.open(example).read.split("\n")].flatten else @examples = [example] end end |
#parse_format(format_arg) ⇒ Object
223 224 225 226 227 228 229 230 231 232 |
# File 'lib/spec/runner/options.rb', line 223 def parse_format(format_arg) format, where = ClassAndArgumentsParser.parse(format_arg) unless where raise "When using several --format options only one of them can be without a file" if @out_used where = @output_stream @out_used = true end @format_options ||= [] @format_options << [format, where] end |
#project_root ⇒ Object
:nodoc:
101 102 103 104 |
# File 'lib/spec/runner/options.rb', line 101 def project_root # :nodoc: require 'pathname' @project_root ||= determine_project_root end |
#remove_example_group(example_group) ⇒ Object
92 93 94 |
# File 'lib/spec/runner/options.rb', line 92 def remove_example_group(example_group) @example_groups.delete(example_group) end |
#require_ruby_debug ⇒ Object
96 97 98 99 |
# File 'lib/spec/runner/options.rb', line 96 def require_ruby_debug require 'rubygems' unless ENV['NO_RUBYGEMS'] require 'ruby-debug' end |
#run_examples ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/spec/runner/options.rb', line 123 def run_examples require_ruby_debug if debug return true unless examples_should_be_run? success = true begin runner = custom_runner || ExampleGroupRunner.new(self) unless @files_loaded ['spec','lib'].each do |dir| add_dir_from_project_root_to_load_path(dir) end runner.load_files(files_to_load) @files_loaded = true end define_predicate_matchers plugin_mock_framework ignore_backtrace_patterns # TODO - this has to happen after the files get loaded, # otherwise the before_suite_parts are not populated # from the configuration. There is no spec for this # directly, but features/before_and_after_blocks/before_and_after_blocks.story # will fail if this happens before the files are loaded. before_suite_parts.each { |part| part.call } if example_groups.empty? true else set_spec_from_line_number if line_number success = runner.run @examples_run = true heckle if heckle_runner success end ensure after_suite_parts.each do |part| part.arity < 1 ? part.call : part.call(success) end end end |