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 '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.
-
#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
- #predicate_matchers ⇒ Object
- #remove_example_group(example_group) ⇒ Object
- #run_examples ⇒ Object
Constructor Details
#initialize(error_stream, output_stream) ⇒ Options
Returns a new instance of Options.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/spec/runner/options.rb', line 48 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.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def argv @argv end |
#backtrace_tweaker ⇒ Object
Returns the value of attribute backtrace_tweaker.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def backtrace_tweaker @backtrace_tweaker end |
#colour ⇒ Object
Returns the value of attribute colour.
46 47 48 |
# File 'lib/spec/runner/options.rb', line 46 def colour @colour end |
#context_lines ⇒ Object
Returns the value of attribute context_lines.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def context_lines @context_lines end |
#diff_format ⇒ Object
Returns the value of attribute diff_format.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def diff_format @diff_format end |
#differ_class ⇒ Object
Returns the value of attribute differ_class.
46 47 48 |
# File 'lib/spec/runner/options.rb', line 46 def differ_class @differ_class end |
#dry_run ⇒ Object
Returns the value of attribute dry_run.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def dry_run @dry_run end |
#error_stream ⇒ Object
Returns the value of attribute error_stream.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def error_stream @error_stream end |
#example_groups ⇒ Object (readonly)
Returns the value of attribute example_groups.
46 47 48 |
# File 'lib/spec/runner/options.rb', line 46 def example_groups @example_groups end |
#examples ⇒ Object (readonly)
Returns the value of attribute examples.
46 47 48 |
# File 'lib/spec/runner/options.rb', line 46 def examples @examples end |
#filename_pattern ⇒ Object
Returns the value of attribute filename_pattern.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def filename_pattern @filename_pattern end |
#files ⇒ Object (readonly)
Returns the value of attribute files.
46 47 48 |
# File 'lib/spec/runner/options.rb', line 46 def files @files end |
#heckle_runner ⇒ Object
Returns the value of attribute heckle_runner.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def heckle_runner @heckle_runner end |
#line_number ⇒ Object
Returns the value of attribute line_number.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def line_number @line_number end |
#loadby ⇒ Object
Returns the value of attribute loadby.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def loadby @loadby end |
#output_stream ⇒ Object
Returns the value of attribute output_stream.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def output_stream @output_stream end |
#profile ⇒ Object
Returns the value of attribute profile.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def profile @profile end |
#reporter ⇒ Object
Returns the value of attribute reporter.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def reporter @reporter end |
#reverse ⇒ Object
Returns the value of attribute reverse.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def reverse @reverse end |
#timeout ⇒ Object
Returns the value of attribute timeout.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def timeout @timeout end |
#user_input_for_runner ⇒ Object
Returns the value of attribute user_input_for_runner.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def user_input_for_runner @user_input_for_runner end |
#verbose ⇒ Object
Returns the value of attribute verbose.
26 27 28 |
# File 'lib/spec/runner/options.rb', line 26 def verbose @verbose end |
Instance Method Details
#add_example_group(example_group) ⇒ Object
69 70 71 |
# File 'lib/spec/runner/options.rb', line 69 def add_example_group(example_group) @example_groups << example_group end |
#after_suite_parts ⇒ Object
117 118 119 |
# File 'lib/spec/runner/options.rb', line 117 def after_suite_parts Spec::Example::BeforeAndAfterHooks.after_suite_parts end |
#before_suite_parts ⇒ Object
113 114 115 |
# File 'lib/spec/runner/options.rb', line 113 def before_suite_parts Spec::Example::BeforeAndAfterHooks.before_suite_parts end |
#dry_run? ⇒ Boolean
231 232 233 |
# File 'lib/spec/runner/options.rb', line 231 def dry_run? @dry_run == true end |
#examples_run? ⇒ Boolean
121 122 123 |
# File 'lib/spec/runner/options.rb', line 121 def examples_run? @examples_run end |
#examples_should_not_be_run ⇒ Object
125 126 127 |
# File 'lib/spec/runner/options.rb', line 125 def examples_should_not_be_run @examples_should_be_run = false end |
#files_to_load ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/spec/runner/options.rb', line 215 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 |
# File 'lib/spec/runner/options.rb', line 204 def load_heckle_runner(heckle) suffix = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? '_unsupported' : '' require "spec/runner/heckle_runner#{suffix}" @heckle_runner = HeckleRunner.new(heckle) end |
#mock_framework ⇒ Object
134 135 136 137 |
# File 'lib/spec/runner/options.rb', line 134 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
210 211 212 213 |
# File 'lib/spec/runner/options.rb', line 210 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 |
#predicate_matchers ⇒ Object
129 130 131 132 |
# File 'lib/spec/runner/options.rb', line 129 def predicate_matchers # TODO - don't like this dependency - perhaps store these in here instead? Spec::Runner.configuration.predicate_matchers end |
#remove_example_group(example_group) ⇒ Object
73 74 75 |
# File 'lib/spec/runner/options.rb', line 73 def remove_example_group(example_group) @example_groups.delete(example_group) end |
#run_examples ⇒ Object
77 78 79 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 |
# File 'lib/spec/runner/options.rb', line 77 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 # 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.call(success) end end end |