Class: Cucumber::Ast::Step

Inherits:
Object show all
Defined in:
lib/cucumber/ast/step.rb

Overview

:nodoc:

Constant Summary collapse

INDENT =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line, keyword, name, multiline_arg = nil) ⇒ Step

Returns a new instance of Step.



13
14
15
# File 'lib/cucumber/ast/step.rb', line 13

def initialize(line, keyword, name, multiline_arg=nil)
  @line, @keyword, @name, @multiline_arg = line, keyword, name, multiline_arg
end

Instance Attribute Details

#exceptionObject

Returns the value of attribute exception.



9
10
11
# File 'lib/cucumber/ast/step.rb', line 9

def exception
  @exception
end

#feature_elementObject

Returns the value of attribute feature_element.



9
10
11
# File 'lib/cucumber/ast/step.rb', line 9

def feature_element
  @feature_element
end

#keywordObject (readonly)

Returns the value of attribute keyword.



7
8
9
# File 'lib/cucumber/ast/step.rb', line 7

def keyword
  @keyword
end

#lineObject (readonly)

Returns the value of attribute line.



7
8
9
# File 'lib/cucumber/ast/step.rb', line 7

def line
  @line
end

#multiline_argObject (readonly)

Returns the value of attribute multiline_arg.



7
8
9
# File 'lib/cucumber/ast/step.rb', line 7

def multiline_arg
  @multiline_arg
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/cucumber/ast/step.rb', line 7

def name
  @name
end

#options=(value) ⇒ Object (writeonly)

Sets the attribute options

Parameters:

  • value

    the value to set the attribute options to.



8
9
10
# File 'lib/cucumber/ast/step.rb', line 8

def options=(value)
  @options = value
end

#step_collection=(value) ⇒ Object (writeonly)

Sets the attribute step_collection

Parameters:

  • value

    the value to set the attribute step_collection to.



8
9
10
# File 'lib/cucumber/ast/step.rb', line 8

def step_collection=(value)
  @step_collection = value
end

Instance Method Details

#accept(visitor) ⇒ Object



40
41
42
43
44
45
# File 'lib/cucumber/ast/step.rb', line 40

def accept(visitor)
  return if Cucumber.wants_to_quit
  # The only time a Step is visited is when it is in a ScenarioOutline.
  # Otherwise it's always StepInvocation that gets visited instead.
  visit_step_result(visitor, first_match(visitor), @multiline_arg, :skipped, nil, nil)
end

#background?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/cucumber/ast/step.rb', line 17

def background?
  false
end

#backtrace_lineObject



75
76
77
# File 'lib/cucumber/ast/step.rb', line 75

def backtrace_line
  @backtrace_line ||= @feature_element.backtrace_line("#{@keyword} #{@name}", @line) unless @feature_element.nil?
end

#dom_idObject



87
88
89
# File 'lib/cucumber/ast/step.rb', line 87

def dom_id
  @dom_id ||= file_colon_line.gsub(/\//, '_').gsub(/\./, '_').gsub(/:/, '_')
end

#file_colon_lineObject



79
80
81
# File 'lib/cucumber/ast/step.rb', line 79

def file_colon_line
  @file_colon_line ||= @feature_element.file_colon_line(@line) unless @feature_element.nil?
end

#first_match(visitor) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/cucumber/ast/step.rb', line 51

def first_match(visitor)
  # @feature_element is always a ScenarioOutline in this case
  @feature_element.each_example_row do |cells|
    argument_hash       = cells.to_hash
    delimited_arguments = delimit_argument_names(argument_hash)
    name                = replace_name_arguments(delimited_arguments)
    step_match          = visitor.step_mother.step_match(name, @name) rescue nil
    return step_match if step_match
  end
  NoStepMatch.new(self, @name)
end

#languageObject



83
84
85
# File 'lib/cucumber/ast/step.rb', line 83

def language
  @feature_element.language
end

#source_indentObject



67
68
69
# File 'lib/cucumber/ast/step.rb', line 67

def source_indent
  @feature_element.source_indent(text_length)
end

#statusObject



21
22
23
24
# File 'lib/cucumber/ast/step.rb', line 21

def status
  # Step always has status skipped, because Step is always in a ScenarioOutline
  :skipped
end

#step_invocationObject



26
27
28
# File 'lib/cucumber/ast/step.rb', line 26

def step_invocation
  StepInvocation.new(self, @name, @multiline_arg, [])
end

#step_invocation_from_cells(cells) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/cucumber/ast/step.rb', line 30

def step_invocation_from_cells(cells)
  matched_cells = matched_cells(cells)

  delimited_arguments = delimit_argument_names(cells.to_hash)
  name                = replace_name_arguments(delimited_arguments)
  multiline_arg       = @multiline_arg.nil? ? nil : @multiline_arg.arguments_replaced(delimited_arguments)

  StepInvocation.new(self, name, multiline_arg, matched_cells)
end

#text_length(name = @name) ⇒ Object



71
72
73
# File 'lib/cucumber/ast/step.rb', line 71

def text_length(name=@name)
  @keyword.jlength + name.jlength + INDENT # Add indent as steps get indented more than scenarios
end

#to_sexpObject



63
64
65
# File 'lib/cucumber/ast/step.rb', line 63

def to_sexp
  [:step, @line, @keyword, @name, (@multiline_arg.nil? ? nil : @multiline_arg.to_sexp)].compact
end

#visit_step_result(visitor, step_match, multiline_arg, status, exception, background) ⇒ Object



47
48
49
# File 'lib/cucumber/ast/step.rb', line 47

def visit_step_result(visitor, step_match, multiline_arg, status, exception, background)
  visitor.visit_step_result(@keyword, step_match, @multiline_arg, status, exception, source_indent, background)
end