Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/actions/test_ruby_gem_uploads/Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
source 'https://rubygems.org'

gem 'rspec'
gem 'coderay'
gem 'knapsack_pro'
gem 'rake'
gem 'rake-compiler'
Expand Down
52 changes: 52 additions & 0 deletions .github/actions/test_ruby_gem_uploads/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
PATH
remote: ../../../rspec-trunk-flaky-tests
specs:
rspec_trunk_flaky_tests (0.0.0)
rb_sys (= 0.9.124)
rspec-core (> 3.3)

GEM
remote: https://rubygems.org/
specs:
coderay (1.1.3)
diff-lcs (1.6.2)
knapsack_pro (10.0.0)
rake
thor (~> 1.4)
logger (1.7.0)
rake (13.4.2)
rake-compiler (1.3.1)
rake
rake-compiler-dock (1.11.0)
rb_sys (0.9.124)
rake-compiler-dock (= 1.11.0)
rspec (3.13.2)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.6)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.8)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-support (3.13.7)
thor (1.5.0)

PLATFORMS
ruby
x86_64-linux

DEPENDENCIES
coderay
knapsack_pro
logger
rake
rake-compiler
rspec
rspec_trunk_flaky_tests!

BUNDLED WITH
2.5.23
8 changes: 8 additions & 0 deletions .github/actions/test_ruby_gem_uploads/spec/test_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ def square(val)
end

describe 'simple_test' do
around do |example|
original_color_mode = RSpec.configuration.color_mode
RSpec.configuration.color_mode = :on
example.run
ensure
RSpec.configuration.color_mode = original_color_mode
end

[1, 2, 3].each do |i|
it do
expect(square(i)).to eq(i * i)
Expand Down
24 changes: 15 additions & 9 deletions rspec-trunk-flaky-tests/lib/trunk_spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,16 @@ def yellow
end
end

ANSI_ESCAPE_PATTERN = %r{(?:\e[@-Z\\-_]|\e\[[0-?]*[ -/]*[@-~])}

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

def strip_ansi_codes(text)
text.to_s.gsub(ANSI_ESCAPE_PATTERN, '')
end

# 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
Expand Down Expand Up @@ -204,12 +210,12 @@ def format_exception_message(exception, example)
return '' unless exception

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

# trunk-ignore(rubocop/Metrics/MethodLength)
# trunk-ignore(rubocop/Metrics/MethodLength,rubocop/Metrics/AbcSize)
def format_exception_backtrace(exception, example)
return '' unless exception

Expand All @@ -230,7 +236,7 @@ def format_exception_backtrace(exception, example)
# and after hooks, so we fall back to the legacy formatter
return legacy_format_exception_backtrace(exception) if result.strip.empty?

result
strip_ansi_codes(result)
rescue StandardError
legacy_format_exception_backtrace(exception)
end
Expand All @@ -246,25 +252,25 @@ 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(' | ')}"
strip_ansi_codes("#{exception.class}: #{messages.join(' | ')}")
else
exception.to_s
strip_ansi_codes(exception.to_s)
end
end

# trunk-ignore(rubocop/Metrics/MethodLength)
# trunk-ignore(rubocop/Metrics/MethodLength,rubocop/Metrics/AbcSize)
def legacy_format_exception_backtrace(exception)
case exception
when RSpec::Core::MultipleExceptionError
exception.all_exceptions.map do |e|
strip_ansi_codes(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")
end.join("\n\n"))
else
exception.backtrace&.join("\n") || ''
strip_ansi_codes(exception.backtrace&.join("\n") || '')
end
end

Expand Down
Loading