Class: Cucumber::Formatter::MessageBuilder

Inherits:
Object
  • Object
show all
Includes:
Messages::Helpers::TimeConversion
Defined in:
lib/cucumber/formatter/message_builder.rb

Direct Known Subclasses

HTML, Message

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ MessageBuilder

Returns a new instance of MessageBuilder.



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
# File 'lib/cucumber/formatter/message_builder.rb', line 19

def initialize(config)
  @config = config

  @hook_by_test_step = Query::HookByTestStep.new(config)
  @pickle_by_test = Query::PickleByTest.new(config)
  @pickle_step_by_test_step = Query::PickleStepByTestStep.new(config)
  @step_definitions_by_test_step = Query::StepDefinitionsByTestStep.new(config)
  @test_case_started_by_test_case = Query::TestCaseStartedByTestCase.new(config)
  @test_run_started = Query::TestRunStarted.new(config)

  config.on_event :envelope, &method(:on_envelope)
  config.on_event :gherkin_source_read, &method(:on_gherkin_source_read)
  config.on_event :test_case_ready, &method(:on_test_case_ready)
  config.on_event :test_run_started, &method(:on_test_run_started)
  config.on_event :test_case_started, &method(:on_test_case_started)
  config.on_event :test_step_started, &method(:on_test_step_started)
  config.on_event :test_step_finished, &method(:on_test_step_finished)
  config.on_event :test_case_finished, &method(:on_test_case_finished)
  config.on_event :test_run_finished, &method(:on_test_run_finished)
  config.on_event :undefined_parameter_type, &method(:on_undefined_parameter_type)

  @test_case_by_step_id = {}
  @current_test_run_started_id = nil
  @current_test_case_started_id = nil
  @current_test_step_id = nil

  @repository = Cucumber::Repository.new
  @query = Cucumber::Query.new(@repository)
end

Instance Method Details

#attach(src, media_type, filename) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cucumber/formatter/message_builder.rb', line 49

def attach(src, media_type, filename)
  attachment_data = {
    test_step_id: @current_test_step_id,
    test_case_started_id: @current_test_case_started_id,
    media_type: media_type,
    file_name: filename,
    timestamp: time_to_timestamp(Time.now)
  }

  if media_type&.start_with?('text/')
    attachment_data[:content_encoding] = Cucumber::Messages::AttachmentContentEncoding::IDENTITY
    attachment_data[:body] = src
  else
    body = src.respond_to?(:read) ? src.read : src
    attachment_data[:content_encoding] = Cucumber::Messages::AttachmentContentEncoding::BASE64
    attachment_data[:body] = Base64.strict_encode64(body)
  end

  message = Cucumber::Messages::Envelope.new(attachment: Cucumber::Messages::Attachment.new(**attachment_data))
  output_envelope(message)
end