Class: Cucumber::Ast::Step

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

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



35
36
37
38
39
# File 'lib/cucumber/ast/step.rb', line 35

def accept(visitor)
  # 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



69
70
71
# File 'lib/cucumber/ast/step.rb', line 69

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

#dom_idObject



81
82
83
# File 'lib/cucumber/ast/step.rb', line 81

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

#file_colon_lineObject



73
74
75
# File 'lib/cucumber/ast/step.rb', line 73

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

#first_match(visitor) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/cucumber/ast/step.rb', line 45

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



77
78
79
# File 'lib/cucumber/ast/step.rb', line 77

def language
  @feature_element.language
end

#source_indentObject



61
62
63
# File 'lib/cucumber/ast/step.rb', line 61

def source_indent
  @feature_element.source_indent(text_length)
end

#step_invocationObject



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

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

#step_invocation_from_cells(cells) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/cucumber/ast/step.rb', line 25

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



65
66
67
# File 'lib/cucumber/ast/step.rb', line 65

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

#to_sexpObject



57
58
59
# File 'lib/cucumber/ast/step.rb', line 57

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



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

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