Top Level Namespace

Defined Under Namespace

Modules: PlainColorizer, RSpec Classes: String, TrunkAnalyticsListener

Instance Method Summary collapse

Instance Method Details

#escape(str) ⇒ Object



57
58
59
# File 'lib/trunk_spec_helper.rb', line 57

def escape(str)
  str.dump[1..-2]
end

#exception_backtrace_lines(exception, example) ⇒ Object



238
239
240
241
242
243
# File 'lib/trunk_spec_helper.rb', line 238

def exception_backtrace_lines(exception, example)
  presenter = RSpec::Core::Formatters::ExceptionPresenter.new(exception, example)
  Array(presenter.formatted_backtrace)
rescue StandardError
  Array(exception.backtrace)
end

#format_exception_backtrace(exception, example) ⇒ Object

trunk-ignore(rubocop/Metrics/MethodLength)



213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/trunk_spec_helper.rb', line 213

def format_exception_backtrace(exception, example)
  return '' unless exception

  lines = exception_backtrace_lines(exception, example)

  cause = exception.cause
  depth = 0
  while cause && depth < 10
    lines << ''
    lines << "Caused by: #{cause.class}: #{cause.message}"
    lines.concat(exception_backtrace_lines(cause, example))
    cause = cause.cause
    depth += 1
  end

  result = lines.join("\n")
  # The exception presenter may choke on MultipleExceptionError, such as errors in before
  # and after hooks, so we fall back to the legacy formatter
  return legacy_format_exception_backtrace(exception) if result.strip.empty?

  result
rescue StandardError
  legacy_format_exception_backtrace(exception)
end

#format_exception_message(exception, example) ⇒ Object

Defer to RSpec’s own ExceptionPresenter so the failure_message field matches what users see in their RSpec console output (Failure/Error: <source line>, the exception class and message, and any “Caused by:” chain).



203
204
205
206
207
208
209
210
# File 'lib/trunk_spec_helper.rb', line 203

def format_exception_message(exception, example)
  return '' unless exception

  presenter = RSpec::Core::Formatters::ExceptionPresenter.new(exception, example)
  presenter.fully_formatted(nil, PlainColorizer)
rescue StandardError
  legacy_format_exception_message(exception)
end

#knapsack_detector_command?Boolean

Returns:

  • (Boolean)


68
69
70
71
72
# File 'lib/trunk_spec_helper.rb', line 68

def knapsack_detector_command?
  command_line = "#{$PROGRAM_NAME} #{ARGV.join(' ')}".strip
  command_line.include?('knapsack_pro:rspec_test_example_detector') ||
    command_line.include?('knapsack_pro:queue:rspec:initialize')
end

#knapsack_detector_mode?Boolean

Knapsack example detector instantiates all test cases in order to determine how to shard them These instantiations should not generate test bundles, so we disable the gem when running under knapsack_pro:rspec_test_example_detector

Returns:

  • (Boolean)


64
65
66
# File 'lib/trunk_spec_helper.rb', line 64

def knapsack_detector_mode?
  knapsack_detector_command?
end

#legacy_format_exception_backtrace(exception) ⇒ Object

trunk-ignore(rubocop/Metrics/MethodLength)



256
257
258
259
260
261
262
263
264
265
266
267
268
269
# File 'lib/trunk_spec_helper.rb', line 256

def legacy_format_exception_backtrace(exception)
  case exception
  when RSpec::Core::MultipleExceptionError
    exception.all_exceptions.map do |e|
      if e.backtrace && !e.backtrace.empty?
        "#{e.class}: #{e.message}\n#{e.backtrace.join("\n")}"
      else
        "#{e.class}: #{e.message}"
      end
    end.join("\n\n")
  else
    exception.backtrace&.join("\n") || ''
  end
end

#legacy_format_exception_message(exception) ⇒ Object



245
246
247
248
249
250
251
252
253
# File 'lib/trunk_spec_helper.rb', line 245

def legacy_format_exception_message(exception)
  case exception
  when RSpec::Core::MultipleExceptionError
    messages = exception.all_exceptions.map { |e| "#{e.class}: #{e.message}" }
    "#{exception.class}: #{messages.join(' | ')}"
  else
    exception.to_s
  end
end

#trunk_disabledObject



74
75
76
77
# File 'lib/trunk_spec_helper.rb', line 74

def trunk_disabled
  knapsack_detector_mode? || ENV['DISABLE_RSPEC_TRUNK_FLAKY_TESTS'] == 'true' ||
    ENV['TRUNK_ORG_URL_SLUG'].nil? || ENV['TRUNK_API_TOKEN'].nil?
end