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/base_formatter', 'Formatter::BaseFormatter'], 'l' => ['spec/runner/formatter/base_formatter', 'Formatter::BaseFormatter'], '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.
-
#diff_format ⇒ Object
Returns the value of attribute diff_format.
-
#differ_class ⇒ Object
readonly
Returns the value of attribute differ_class.
-
#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_example_group(example_group) ⇒ Object
- #after_suite_parts ⇒ Object
- #before_suite_parts ⇒ Object
- #dry_run? ⇒ Boolean
- #examples_run? ⇒ Boolean
- #examples_should_not_be_run ⇒ Object
- #files_to_load ⇒ Object
- #formatters ⇒ Object
-
#initialize(error_stream, output_stream) ⇒ Options
constructor
A new instance of Options.
- #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
- #remove_example_group(example_group) ⇒ Object
- #run_examples ⇒ Object
Constructor Details
#initialize(error_stream, output_stream) ⇒ Options
Returns a new instance of Options.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/spec/runner/options.rb', line 51 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 @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 = [] end |
Instance Attribute Details
#argv ⇒ Object
Returns the value of attribute argv.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def argv @argv end |
#autospec ⇒ Object
Returns the value of attribute autospec.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def autospec @autospec end |
#backtrace_tweaker ⇒ Object
Returns the value of attribute backtrace_tweaker.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def backtrace_tweaker @backtrace_tweaker end |
#colour ⇒ Object
Returns the value of attribute colour.
49 50 51 |
# File 'lib/spec/runner/options.rb', line 49 def colour @colour end |
#context_lines ⇒ Object
Returns the value of attribute context_lines.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def context_lines @context_lines end |
#diff_format ⇒ Object
Returns the value of attribute diff_format.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def diff_format @diff_format end |
#differ_class ⇒ Object
Returns the value of attribute differ_class.
49 50 51 |
# File 'lib/spec/runner/options.rb', line 49 def differ_class @differ_class end |
#dry_run ⇒ Object
Returns the value of attribute dry_run.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def dry_run @dry_run end |
#error_stream ⇒ Object
Returns the value of attribute error_stream.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def error_stream @error_stream end |
#example_groups ⇒ Object (readonly)
Returns the value of attribute example_groups.
49 50 51 |
# File 'lib/spec/runner/options.rb', line 49 def example_groups @example_groups end |
#examples ⇒ Object (readonly)
Returns the value of attribute examples.
49 50 51 |
# File 'lib/spec/runner/options.rb', line 49 def examples @examples end |
#filename_pattern ⇒ Object
Returns the value of attribute filename_pattern.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def filename_pattern @filename_pattern end |
#files ⇒ Object (readonly)
Returns the value of attribute files.
49 50 51 |
# File 'lib/spec/runner/options.rb', line 49 def files @files end |
#heckle_runner ⇒ Object
Returns the value of attribute heckle_runner.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def heckle_runner @heckle_runner end |
#line_number ⇒ Object
Returns the value of attribute line_number.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def line_number @line_number end |
#loadby ⇒ Object
Returns the value of attribute loadby.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def loadby @loadby end |
#output_stream ⇒ Object
Returns the value of attribute output_stream.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def output_stream @output_stream end |
#profile ⇒ Object
Returns the value of attribute profile.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def profile @profile end |
#reporter ⇒ Object
Returns the value of attribute reporter.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def reporter @reporter end |
#reverse ⇒ Object
Returns the value of attribute reverse.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def reverse @reverse end |
#timeout ⇒ Object
Returns the value of attribute timeout.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def timeout @timeout end |
#user_input_for_runner ⇒ Object
Returns the value of attribute user_input_for_runner.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def user_input_for_runner @user_input_for_runner end |
#verbose ⇒ Object
Returns the value of attribute verbose.
28 29 30 |
# File 'lib/spec/runner/options.rb', line 28 def verbose @verbose end |
Instance Method Details
#add_example_group(example_group) ⇒ Object
72 73 74 |
# File 'lib/spec/runner/options.rb', line 72 def add_example_group(example_group) @example_groups << example_group end |
#after_suite_parts ⇒ Object
123 124 125 |
# File 'lib/spec/runner/options.rb', line 123 def after_suite_parts Spec::Example::BeforeAndAfterHooks.after_suite_parts end |
#before_suite_parts ⇒ Object
119 120 121 |
# File 'lib/spec/runner/options.rb', line 119 def before_suite_parts Spec::Example::BeforeAndAfterHooks.before_suite_parts end |
#dry_run? ⇒ Boolean
232 233 234 |
# File 'lib/spec/runner/options.rb', line 232 def dry_run? @dry_run == true end |
#examples_run? ⇒ Boolean
127 128 129 |
# File 'lib/spec/runner/options.rb', line 127 def examples_run? @examples_run end |
#examples_should_not_be_run ⇒ Object
131 132 133 |
# File 'lib/spec/runner/options.rb', line 131 def examples_should_not_be_run @examples_should_be_run = false end |
#files_to_load ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/spec/runner/options.rb', line 216 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 |
#formatters ⇒ Object
187 188 189 190 |
# File 'lib/spec/runner/options.rb', line 187 def formatters @format_options ||= [['progress', @output_stream]] @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS) end |
#load_formatters(format_options, formatters) ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/spec/runner/options.rb', line 192 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(self, where) end end |
#load_heckle_runner(heckle) ⇒ Object
204 205 206 207 208 209 |
# File 'lib/spec/runner/options.rb', line 204 def load_heckle_runner(heckle) @format_options ||= [['silent', @output_stream]] suffix = ([/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9) ? '_unsupported' : '' require "spec/runner/heckle_runner#{suffix}" @heckle_runner = ::Spec::Runner::HeckleRunner.new(heckle) end |
#mock_framework ⇒ Object
135 136 137 138 |
# File 'lib/spec/runner/options.rb', line 135 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
211 212 213 214 |
# File 'lib/spec/runner/options.rb', line 211 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
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/spec/runner/options.rb', line 154 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
168 169 170 171 172 173 174 |
# File 'lib/spec/runner/options.rb', line 168 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
176 177 178 179 180 181 182 183 184 185 |
# File 'lib/spec/runner/options.rb', line 176 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 |
#remove_example_group(example_group) ⇒ Object
76 77 78 |
# File 'lib/spec/runner/options.rb', line 76 def remove_example_group(example_group) @example_groups.delete(example_group) end |
#run_examples ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/spec/runner/options.rb', line 80 def run_examples return true unless examples_should_be_run? success = true begin runner = custom_runner || ExampleGroupRunner.new(self) unless @files_loaded runner.load_files(files_to_load) @files_loaded = true end define_predicate_matchers plugin_mock_framework # 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 do |part| part.call end 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 |