Class: Cucumber::Cli::Main

Inherits:
Object show all
Defined in:
lib/cucumber/cli/main.rb

Constant Summary collapse

FAILURE =
1

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args, out_stream = STDOUT, error_stream = STDERR) ⇒ Main

Returns a new instance of Main.



28
29
30
31
32
# File 'lib/cucumber/cli/main.rb', line 28

def initialize(args, out_stream = STDOUT, error_stream = STDERR)
  @args         = args
  @out_stream   = out_stream == STDOUT ? Formatter::ColorIO.new : out_stream
  @error_stream = error_stream
end

Class Method Details

.execute(args) ⇒ Object



23
24
25
# File 'lib/cucumber/cli/main.rb', line 23

def execute(args)
  new(args).execute!(step_mother)
end

.step_motherObject



19
20
21
# File 'lib/cucumber/cli/main.rb', line 19

def step_mother
  @step_mother ||= StepMother.new
end

Instance Method Details

#configurationObject



83
84
85
86
87
88
89
# File 'lib/cucumber/cli/main.rb', line 83

def configuration
  return @configuration if @configuration

  @configuration = Configuration.new(@out_stream, @error_stream)
  @configuration.parse!(@args)
  @configuration
end

#exceeded_tag_limts?(features) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/cucumber/cli/main.rb', line 70

def exceeded_tag_limts?(features)
  exceeded = false
  configuration.options[:tag_names].each do |tag_name, limit|
    if !Ast::Tags.exclude_tag?(tag_name) && limit
      tag_count = features.tag_count(tag_name)
      if tag_count > limit.to_i
        exceeded = true
      end
    end
  end
  exceeded
end

#execute!(step_mother) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/cucumber/cli/main.rb', line 34

def execute!(step_mother)
  trap_interrupt
  if configuration.drb?
    begin
      return DRbClient.run(@args, @error_stream, @out_stream, configuration.drb_port)
    rescue DRbClientError => e
      @error_stream.puts "WARNING: #{e.message} Running features locally:"
    end
  end
  step_mother.options = configuration.options
  step_mother.log = configuration.log

  step_mother.load_code_files(configuration.support_to_load)
  step_mother.after_configuration(configuration)
  features = step_mother.load_plain_text_features(configuration.feature_files)
  step_mother.load_code_files(configuration.step_defs_to_load)

  enable_diffing

  runner = configuration.build_runner(step_mother, @out_stream)
  step_mother.visitor = runner # Needed to support World#announce
  runner.visit_features(features)

  failure = if exceeded_tag_limts?(features)
      FAILURE
    elsif configuration.wip?
      step_mother.scenarios(:passed).any?
    else
      step_mother.scenarios(:failed).any? ||
      (configuration.strict? && (step_mother.steps(:undefined).any? || step_mother.steps(:pending).any?))
    end
rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
  @error_stream.puts e.message
  true
end