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

#gherkin_statement(statement = nil) ⇒ Object (readonly)

Returns the value of attribute gherkin_statement.



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

def gherkin_statement
  @gherkin_statement
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

Returns the value of attribute multiline_arg.



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

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



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

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)


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

def background?
  false
end

#backtrace_lineObject



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

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

#dom_idObject



92
93
94
# File 'lib/cucumber/ast/step.rb', line 92

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

#file_colon_lineObject



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

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

#first_match(visitor) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/cucumber/ast/step.rb', line 56

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



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

def language
  @feature_element.language
end

#source_indentObject



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

def source_indent
  @feature_element.source_indent(text_length)
end

#statusObject



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

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

#step_invocationObject



31
32
33
# File 'lib/cucumber/ast/step.rb', line 31

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

#step_invocation_from_cells(cells) ⇒ Object



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

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



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

def text_length(name=@name)
  INDENT + INDENT + @keyword.unpack('U*').length + name.unpack('U*').length
end

#to_sexpObject



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

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



52
53
54
# File 'lib/cucumber/ast/step.rb', line 52

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