diff --git a/.github/actions/test_ruby_gem_uploads/Gemfile b/.github/actions/test_ruby_gem_uploads/Gemfile index 027aa6dc..16522d0e 100644 --- a/.github/actions/test_ruby_gem_uploads/Gemfile +++ b/.github/actions/test_ruby_gem_uploads/Gemfile @@ -3,6 +3,7 @@ source 'https://rubygems.org' gem 'rspec' +gem 'coderay' gem 'knapsack_pro' gem 'rake' gem 'rake-compiler' diff --git a/.github/actions/test_ruby_gem_uploads/Gemfile.lock b/.github/actions/test_ruby_gem_uploads/Gemfile.lock new file mode 100644 index 00000000..e33dc946 --- /dev/null +++ b/.github/actions/test_ruby_gem_uploads/Gemfile.lock @@ -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 diff --git a/.github/actions/test_ruby_gem_uploads/spec/test_spec.rb b/.github/actions/test_ruby_gem_uploads/spec/test_spec.rb index 529018e3..020fe192 100644 --- a/.github/actions/test_ruby_gem_uploads/spec/test_spec.rb +++ b/.github/actions/test_ruby_gem_uploads/spec/test_spec.rb @@ -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) diff --git a/rspec-trunk-flaky-tests/lib/trunk_spec_helper.rb b/rspec-trunk-flaky-tests/lib/trunk_spec_helper.rb index 896ee845..3f8d0573 100644 --- a/rspec-trunk-flaky-tests/lib/trunk_spec_helper.rb +++ b/rspec-trunk-flaky-tests/lib/trunk_spec_helper.rb @@ -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 @@ -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 @@ -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 @@ -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