Parent

Class/Module Index [+]

Quicksearch

Spec::Runner::Options

Attributes

argv[RW]
autospec[RW]
backtrace_tweaker[RW]
colour[R]
context_lines[RW]
debug[RW]
diff_format[RW]
differ_class[R]
drb_port[W]
dry_run[RW]
error_stream[RW]
example_groups[R]
examples[R]
filename_pattern[RW]
files[R]
heckle_runner[RW]
line_number[RW]
loadby[RW]
output_stream[RW]
profile[RW]
reporter[RW]
reverse[RW]
timeout[RW]
user_input_for_runner[RW]
verbose[RW]

Public Class Methods

new(error_stream, output_stream) click to toggle source
# File lib/spec/runner/options.rb, line 55
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

Public Instance Methods

add_example_group(example_group) click to toggle source
# File lib/spec/runner/options.rb, line 79
def add_example_group(example_group)
  @example_groups << example_group
end
after_suite_parts() click to toggle source
# File lib/spec/runner/options.rb, line 168
def after_suite_parts
  Spec::Example::BeforeAndAfterHooks.after_suite_parts
end
before_suite_parts() click to toggle source
# File lib/spec/runner/options.rb, line 164
def before_suite_parts
  Spec::Example::BeforeAndAfterHooks.before_suite_parts
end
colour=(colour) click to toggle source
# File lib/spec/runner/options.rb, line 185
def colour=(colour)
  @colour = colour
  if @colour && RUBY_PLATFORM =~ /mswin|mingw/ ;           begin ;             replace_output = @output_stream.equal?($stdout) ;             require 'rubygems' unless ENV['NO_RUBYGEMS'] ;             require 'Win32/Console/ANSI' ;             @output_stream = $stdout if replace_output ;           rescue LoadError ;             warn "You must 'gem install win32console' to use colour on Windows" ;             @colour = false ;           end
  end
end
drb_port() click to toggle source
# File lib/spec/runner/options.rb, line 293
def drb_port
  @drb_port.to_i if defined?(@drb_port)
end
dry_run?() click to toggle source
# File lib/spec/runner/options.rb, line 289
def dry_run?
  @dry_run == true
end
example_line() click to toggle source
# File lib/spec/runner/options.rb, line 87
def example_line
  Spec::Runner::LineNumberQuery.new(self).example_line_for(files.first, line_number)
end
examples_run?() click to toggle source
# File lib/spec/runner/options.rb, line 172
def examples_run?
  @examples_run
end
examples_should_not_be_run() click to toggle source
# File lib/spec/runner/options.rb, line 176
def examples_should_not_be_run
  @examples_should_be_run = false
end
files_to_load() click to toggle source
# File lib/spec/runner/options.rb, line 273
def files_to_load
  result = []
  sorted_files.each do |file|
    if File.directory?(file)
      filename_pattern.split(",").each do |pattern|
        result += Dir[File.expand_path("#{file}/#{pattern.strip}")]
      end
    elsif File.file?(file)
      result << file
    else
      raise "File or directory not found: #{file}"
    end
  end
  result
end
formatter_options() click to toggle source
# File lib/spec/runner/options.rb, line 250
def formatter_options
  @formatter_options ||= OpenStruct.new(
    :colour   => colour,
    :autospec => autospec,
    :dry_run  => dry_run
  )
end
formatters() click to toggle source
# File lib/spec/runner/options.rb, line 233
def formatters
  @format_options ||= [['progress', @output_stream]]
  @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS)
end
line_number_requested?() click to toggle source
# File lib/spec/runner/options.rb, line 83
def line_number_requested?
  !!line_number
end
load_formatters(format_options, formatters) click to toggle source
# File lib/spec/runner/options.rb, line 238
def load_formatters(format_options, formatters)
  format_options.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(formatter_options, where)
  end
end
load_heckle_runner(heckle) click to toggle source
# File lib/spec/runner/options.rb, line 262
def load_heckle_runner(heckle)
  @format_options ||= [['silent', @output_stream]]
  require which_heckle_runner
  @heckle_runner = ::Spec::Runner::HeckleRunner.new(heckle)
end
mock_framework() click to toggle source
# File lib/spec/runner/options.rb, line 180
def mock_framework
  # TODO - don't like this dependency - perhaps store this in here instead?
  Spec::Runner.configuration.mock_framework
end
number_of_examples() click to toggle source
# File lib/spec/runner/options.rb, line 268
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) click to toggle source
# File lib/spec/runner/options.rb, line 200
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) click to toggle source
# File lib/spec/runner/options.rb, line 214
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) click to toggle source
# File lib/spec/runner/options.rb, line 222
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) click to toggle source
# File lib/spec/runner/options.rb, line 91
def remove_example_group(example_group)
  @example_groups.delete(example_group)
end
require_ruby_debug() click to toggle source
# File lib/spec/runner/options.rb, line 95
def require_ruby_debug
  require 'rubygems' unless ENV['NO_RUBYGEMS']
  require 'ruby-debug'
end
run_examples() click to toggle source
# File lib/spec/runner/options.rb, line 122
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
which_heckle_runner() click to toggle source
# File lib/spec/runner/options.rb, line 258
def which_heckle_runner
  ([/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9) ? "spec/runner/heckle_runner_unsupported" : "spec/runner/heckle_runner"
end

Protected Instance Methods

custom_runner() click to toggle source
# File lib/spec/runner/options.rb, line 350
def custom_runner
  return nil unless custom_runner?
  klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
  runner_type = load_class(klass_name, 'example group runner', '--runner')
  return runner_type.new(self, arg)
end
custom_runner?() click to toggle source
# File lib/spec/runner/options.rb, line 357
def custom_runner?
  return user_input_for_runner ? true : false
end
default_differ() click to toggle source
# File lib/spec/runner/options.rb, line 375
def default_differ
  require 'spec/runner/differs/default'
  self.differ_class = ::Spec::Expectations::Differs::Default
end
define_predicate_matchers() click to toggle source
# File lib/spec/runner/options.rb, line 299
def define_predicate_matchers
  Spec::Runner.configuration.predicate_matchers.each_pair do |matcher_method, method_on_object|
    Spec::Example::ExampleMethods::__send__ :define_method, matcher_method do |*args|
      eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
    end
  end
end
differ_class=(klass) click to toggle source
# File lib/spec/runner/options.rb, line 326
def differ_class=(klass)
  return unless klass
  @differ_class = klass
  Spec::Expectations.differ = self.differ_class.new(self)
end
examples_should_be_run?() click to toggle source
# File lib/spec/runner/options.rb, line 321
def examples_should_be_run?
  return @examples_should_be_run unless @examples_should_be_run.nil?
  @examples_should_be_run = true
end
heckle() click to toggle source
# File lib/spec/runner/options.rb, line 361
def heckle
  heckle_runner = self.heckle_runner
  self.heckle_runner = nil
  heckle_runner.heckle_with
end
ignore_backtrace_patterns() click to toggle source
# File lib/spec/runner/options.rb, line 317
def ignore_backtrace_patterns
  @backtrace_tweaker.ignore_patterns Spec::Runner.configuration.ignored_backtrace_patterns
end
load_class(name, kind, option) click to toggle source
# File lib/spec/runner/options.rb, line 332
def load_class(name, kind, option)
  if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
    arg = $2 == "" ? nil : $2
    [$1, arg]
  else
    m = "#{name.inspect} is not a valid class name"
    @error_stream.puts m
    raise m
  end
  begin
    eval(name, binding, __FILE__, __LINE__)
  rescue NameError => e
    @error_stream.puts "Couldn't find #{kind} class #{name}"
    @error_stream.puts "Make sure the --require option is specified *before* #{option}"
    if $_spec_spec ; raise e ; else exit(1) ; end
  end
end
plugin_mock_framework() click to toggle source
# File lib/spec/runner/options.rb, line 307
def plugin_mock_framework
  case mock_framework
  when Module
    Spec::Example::ExampleMethods.__send__ :include, mock_framework
  else
    require mock_framework
    Spec::Example::ExampleMethods.__send__ :include, Spec::Adapters::MockFramework
  end
end
set_spec_from_line_number() click to toggle source
# File lib/spec/runner/options.rb, line 380
def set_spec_from_line_number
  if examples.empty?
    if files.length == 1
      if File.directory?(files[0])
        error_stream.puts "You must specify one file, not a directory when providing a line number"
        exit(1) if stderr?
      else
        example = LineNumberQuery.new(self).spec_name_for(files[0], line_number)
        @examples = [example]
      end
    else
      error_stream.puts "Only one file can be specified when providing a line number: #{files.inspect}"
      exit(3) if stderr?
    end
  else
    error_stream.puts "You cannot use --example and specify a line number"
    exit(4) if stderr?
  end
end
sorted_files() click to toggle source
# File lib/spec/runner/options.rb, line 367
def sorted_files
  return sorter ? files.sort(&sorter) : files
end
sorter() click to toggle source
# File lib/spec/runner/options.rb, line 371
def sorter
  FILE_SORTERS[loadby]
end
stderr?() click to toggle source
# File lib/spec/runner/options.rb, line 400
def stderr?
  @error_stream == $stderr
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.