class Lucid::AST::StepInvocation
Constants
- BACKTRACE_FILTER_PATTERNS
- PWD_PATTERN
- SEVERITY
Attributes
background[W]
exception[RW]
matched_cells[R]
name[R]
reported_exception[R]
status[R]
step_collection[W]
Public Class Methods
new(step, name, multiline_arg, matched_cells)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 20 def initialize(step, name, multiline_arg, matched_cells) @step, @name, @multiline_arg, @matched_cells = step, name, multiline_arg, matched_cells status!(:skipped) @skip_invoke = @exception = @step_match = @different_table = @reported_exception = @background = nil end
worst_status(statuses)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 15 def worst_status(statuses) SEVERITY[statuses.map{|status| SEVERITY.index(status)}.max] end
Public Instance Methods
accept(visitor)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 34 def accept(visitor) visitor.visit_step(self) do invoke(visitor.runtime, visitor.context) step_result.accept(visitor) end end
actual_keyword()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 132 def actual_keyword keywords = Keywords.new(language) if keywords.repeat_keyword?(keyword) && previous previous.actual_keyword else keyword == '* ' ? keywords.star_code_keyword : keyword end end
background?()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 26 def background? @background end
backtrace_line()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 190 def backtrace_line @step.backtrace_line end
dom_id()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 186 def dom_id @step.dom_id end
failed(context, e, clear_backtrace)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 82 def failed(context, e, clear_backtrace) e.set_backtrace([]) if e.backtrace.nil? || clear_backtrace e.backtrace << @step.backtrace_line unless @step.backtrace_line.nil? e = filter_backtrace(e) @exception = e if(context.strict? || !(Undefined === e) || e.nested?) @reported_exception = e else @reported_exception = nil end end
file_colon_line()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 182 def file_colon_line @step.file_colon_line end
filter_backtrace(e)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 102 def filter_backtrace(e) return e if Lucid.use_full_backtrace e.backtrace.each{|line| line.gsub!(PWD_PATTERN, './')} filtered = (e.backtrace || []).reject do |line| BACKTRACE_FILTER_PATTERNS.detect { |p| line =~ p } end if ENV['LUCID_TRUNCATE_OUTPUT'] # Strip off file locations filtered = filtered.map do |line| line =~ /(.*):in `/ ? $1 : line end end e.set_backtrace(filtered) e end
find_step_match!(runtime, context)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 66 def find_step_match!(runtime, context) return if @step_match begin @step_match = runtime.step_match(@name) rescue Undefined => e failed(context, e, true) status!(:undefined) @step_match = NoStepMatch.new(@step, @name) rescue Ambiguous => e failed(context, e, false) status!(:failed) @step_match = NoStepMatch.new(@step, @name) end runtime.step_visited(self) end
gherkin_statement()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 198 def gherkin_statement @step.gherkin_statement end
invoke(runtime, context)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 41 def invoke(runtime, context) find_step_match!(runtime, context) unless @skip_invoke || context.dry_run? || @exception || @step_collection.exception @skip_invoke = true begin @step_match.invoke(@multiline_arg) runtime.after_step status!(:passed) rescue Pending => e failed(context, e, false) status!(:pending) rescue Undefined => e failed(context, e, false) status!(:undefined) rescue Lucid::AST::Table::Different => e @different_table = e.table failed(context, e, false) status!(:failed) rescue Exception => e failed(context, e, false) status!(:failed) end end end
keyword()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 174 def keyword @step.keyword end
language()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 194 def language @step.language || raise("Language is required on #{@step}") end
multiline_arg()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 178 def multiline_arg @step.multiline_arg end
previous()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 128 def previous @step_collection.previous_step(self) end
skip_invoke!()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 30 def skip_invoke! @skip_invoke = true end
source_indent()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 166 def source_indent @step.feature_element.source_indent(text_length) end
status!(status)
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 121 def status!(status) @status = status @matched_cells.each do |cell| cell.status = status end end
text_length()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 170 def text_length @step.text_length(@name) end
to_sexp()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 202 def to_sexp [:step_invocation, @step.line, @step.keyword, @name, (@multiline_arg.nil? ? nil : @multiline_arg.to_sexp)].compact end
Private Instance Methods
step_result()
click to toggle source
# File lib/lucid/ast/step_invocation.rb, line 208 def step_result StepResult.new( keyword, @step_match, (@different_table || @multiline_arg), @status, @reported_exception, source_indent, @background, file_colon_line ) end