# frozen_string_literal: true require 'cucumber/running_test_case' require 'cucumber/core' require 'cucumber/core/gherkin/writer' module Cucumber describe RunningTestCase do include Core include Core::Gherkin::Writer attr_accessor :wrapped_test_case, :core_test_case let(:result) { double(:result, to_sym: :status_symbol) } before do receiver = double.as_null_object allow(receiver).to receive(:test_case) { |core_test_case| self.core_test_case = core_test_case self.wrapped_test_case = RunningTestCase.new(core_test_case).with_result(result) } compile [gherkin_doc], receiver end context 'for a regular scenario' do let(:gherkin_doc) do gherkin do feature 'feature name' do scenario 'scenario name' do step 'passing' end end end end it 'sets the scenario name correctly' do expect(wrapped_test_case.name).to eq 'scenario name' end it 'exposes properties of the test_case' do expect(wrapped_test_case.location).to eq core_test_case.location expect(wrapped_test_case.language).to eq core_test_case.language end it 'exposes properties of the result' do expect(wrapped_test_case.status).to eq result.to_sym end end context 'for a failed scenario' do let(:gherkin_doc) do gherkin do feature 'feature name' do scenario 'scenario name' do step 'failed' end end end end let(:exception) { StandardError.new } before do self.wrapped_test_case = wrapped_test_case.with_result(Core::Test::Result::Failed.new(0, exception)) end it 'is failed?' do expect(wrapped_test_case.failed?).to be_truthy end it 'exposes the exception' do expect(wrapped_test_case.exception).to eq exception end end context 'for a passing scenario' do let(:gherkin_doc) do gherkin do feature 'feature name' do scenario 'scenario name' do step 'passing' end end end end before do self.wrapped_test_case = wrapped_test_case.with_result(Core::Test::Result::Passed.new(0)) end it 'is not failed?' do expect(wrapped_test_case.failed?).to be_falsey end it '#exception is nil' do expect(wrapped_test_case.exception).to be_nil end end context 'for a scenario outline' do let(:gherkin_doc) do gherkin do feature 'feature name' do scenario_outline 'scenario outline name' do step 'passing with ' examples 'examples name' do row 'arg1', 'arg2' row 'a', 'b' end end end end end it "sets the test case's name correctly" do expect(wrapped_test_case.name).to eq 'scenario outline name' end it 'exposes properties of the test_case' do expect(wrapped_test_case.location).to eq core_test_case.location expect(wrapped_test_case.language).to eq core_test_case.language end end end end