Class: Cucumber::Core::Test::Runner
- Inherits:
-
Object
- Object
- Cucumber::Core::Test::Runner
- Includes:
- Messages::Helpers::TimeConversion
- Defined in:
- lib/cucumber/core/test/runner.rb
Defined Under Namespace
Classes: RunningTestCase
Instance Method Summary collapse
- #around_hook(hook) ⇒ Object
- #calculate_test_case_result(test_case) ⇒ Object
- #done ⇒ Object
-
#initialize(event_bus, id_generator = Cucumber::Messages::Helpers::IdGenerator::UUID.new, backtrace_filter = nil, max_attempts = 1) ⇒ Runner
constructor
A new instance of Runner.
- #test_case(test_case, &descend) ⇒ Object
- #test_step(test_step) ⇒ Object
- #to_error_message(message_element) ⇒ Object
- #to_exception_object(result, message_element) ⇒ Object
- #to_test_case_finished_envelope(result) ⇒ Object
- #to_test_case_started_envelope(test_case) ⇒ Object
- #to_test_step_finished_envelope(test_step, step_result) ⇒ Object
- #to_test_step_started_envelope(test_step) ⇒ Object
Constructor Details
#initialize(event_bus, id_generator = Cucumber::Messages::Helpers::IdGenerator::UUID.new, backtrace_filter = nil, max_attempts = 1) ⇒ Runner
Returns a new instance of Runner.
17 18 19 20 21 22 23 |
# File 'lib/cucumber/core/test/runner.rb', line 17 def initialize(event_bus, id_generator = Cucumber::Messages::Helpers::IdGenerator::UUID.new, backtrace_filter = nil, max_attempts = 1) @event_bus = event_bus @id_generator = id_generator @backtrace_filter = backtrace_filter @max_attempts = max_attempts @current_test_case = nil end |
Instance Method Details
#around_hook(hook) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/cucumber/core/test/runner.rb', line 55 def around_hook(hook, &) result = running_test_case.execute(hook, &) event_bus.test_step_finished running_test_step, result if running_test_step @running_test_step = nil self end |
#calculate_test_case_result(test_case) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/cucumber/core/test/runner.rb', line 66 def calculate_test_case_result(test_case) if running_test_case.result.unknown? Result::Undefined.new('The test case has no steps', Result::UnknownDuration.new, ["#{test_case.location}:in `#{test_case.name}'"]) else running_test_case.result end end |
#done ⇒ Object
62 63 64 |
# File 'lib/cucumber/core/test/runner.rb', line 62 def done self end |
#test_case(test_case, &descend) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/cucumber/core/test/runner.rb', line 25 def test_case(test_case, &descend) @attempt = @current_test_case == test_case ? @attempt + 1 : 1 @current_test_case = test_case @current_test_case_started_id = id_generator.new_id @running_test_case = RunningTestCase.new @running_test_step = nil event_bus.test_case_started(test_case) event_bus.envelope(to_test_case_started_envelope(test_case)) descend.call(self) result = calculate_test_case_result(test_case) event_bus.test_case_finished(test_case, result) event_bus.envelope(to_test_case_finished_envelope(result)) self end |
#test_step(test_step) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/cucumber/core/test/runner.rb', line 42 def test_step(test_step) @running_test_step = test_step event_bus.test_step_started test_step event_bus.envelope(to_test_step_started_envelope(test_step)) step_result = running_test_case.execute(test_step) event_bus.test_step_finished test_step, step_result event_bus.envelope(to_test_step_finished_envelope(test_step, step_result)) @running_test_step = nil self end |
#to_error_message(message_element) ⇒ Object
128 129 130 131 132 133 |
# File 'lib/cucumber/core/test/runner.rb', line 128 def () <<~ERROR_MESSAGE #{.} (#{.class}) #{.backtrace} ERROR_MESSAGE end |
#to_exception_object(result, message_element) ⇒ Object
135 136 137 138 139 140 141 142 143 |
# File 'lib/cucumber/core/test/runner.rb', line 135 def to_exception_object(result, ) return unless result.failed? Cucumber::Messages::Exception.new( type: .class, message: ., stack_trace: .backtrace.join("\n") ) end |
#to_test_case_finished_envelope(result) ⇒ Object
85 86 87 88 89 90 91 92 93 |
# File 'lib/cucumber/core/test/runner.rb', line 85 def to_test_case_finished_envelope(result) Cucumber::Messages::Envelope.new( test_case_finished: Cucumber::Messages::TestCaseFinished.new( test_case_started_id: @current_test_case_started_id, timestamp: (Time.now), will_be_retried: result.failed? && (@attempt < @max_attempts) ) ) end |
#to_test_case_started_envelope(test_case) ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/cucumber/core/test/runner.rb', line 74 def to_test_case_started_envelope(test_case) Cucumber::Messages::Envelope.new( test_case_started: Cucumber::Messages::TestCaseStarted.new( id: @current_test_case_started_id, test_case_id: test_case.id, timestamp: (Time.now), attempt: @attempt ) ) end |
#to_test_step_finished_envelope(test_step, step_result) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/cucumber/core/test/runner.rb', line 105 def to_test_step_finished_envelope(test_step, step_result) result = @backtrace_filter.nil? ? step_result : step_result.with_filtered_backtrace(@backtrace_filter) = result. if result.failed? || result.pending? = result.failed? ? result.exception : result = Cucumber::Messages::TestStepResult.new( status: .status, duration: .duration, message: (), exception: to_exception_object(result, ) ) end Cucumber::Messages::Envelope.new( test_step_finished: Cucumber::Messages::TestStepFinished.new( test_step_id: test_step.id, test_case_started_id: @current_test_case_started_id, test_step_result: , timestamp: (Time.now) ) ) end |
#to_test_step_started_envelope(test_step) ⇒ Object
95 96 97 98 99 100 101 102 103 |
# File 'lib/cucumber/core/test/runner.rb', line 95 def to_test_step_started_envelope(test_step) Cucumber::Messages::Envelope.new( test_step_started: Cucumber::Messages::TestStepStarted.new( test_step_id: test_step.id, test_case_started_id: @current_test_case_started_id, timestamp: (Time.now) ) ) end |