1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# frozen_string_literal: true
require 'cucumber/core/test/location'
require 'cucumber/core/test/result'
require 'cucumber/core/test/timer'
module Cucumber
module Core
module Test
module Action
class Defined
attr_reader :location
def initialize(location = nil, &block)
raise ArgumentError, 'Passing a block to execute the action is mandatory.' unless block
@location = location || Test::Location.new(*block.source_location[0..1])
@block = block
@timer = Timer.new
end
def execute(*)
@timer.start
@block.call(*)
passed
rescue Result::Raisable => e
e.with_duration(@timer.duration)
rescue Exception => e
failed(e)
end
def inspect
"#<#{self.class}: #{location}>"
end
def skip(*)
skipped
end
private
def passed
Result::Passed.new(@timer.duration)
end
def failed(exception)
Result::Failed.new(@timer.duration, exception)
end
def skipped
Result::Skipped.new
end
end
end
end
end
end
|