diff --git a/test/cases/helper_sqlserver.rb b/test/cases/helper_sqlserver.rb index 4be7683b8..95edca121 100644 --- a/test/cases/helper_sqlserver.rb +++ b/test/cases/helper_sqlserver.rb @@ -5,6 +5,7 @@ Bundler.require :default, :development require "pry" require "support/core_ext/query_cache" +require "support/core_ext/backtrace_cleaner" require "support/minitest_sqlserver" require "support/test_in_memory_oltp" require "support/table_definition_sqlserver" diff --git a/test/support/core_ext/backtrace_cleaner.rb b/test/support/core_ext/backtrace_cleaner.rb new file mode 100644 index 000000000..54e2b3b8e --- /dev/null +++ b/test/support/core_ext/backtrace_cleaner.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# Need to handle `ActiveRecord` lines like they are in the source rather than in the Rails gem. +module SQLServer + module BacktraceCleaner + extend ActiveSupport::Concern + + private + + def add_gem_filter + gems_paths = (Gem.path | [Gem.default_dir]).map { |p| Regexp.escape(p) } + return if gems_paths.empty? + + gems_regexp = %r{\A(#{gems_paths.join("|")})/(bundler/)?gems/([^/]+)-([\w.]+)/(.*)} + gems_result = '\3 (\4) \5' + + add_filter do |line| + if line.match?(/activerecord/) + line + else + line.sub(gems_regexp, gems_result) + end + end + end + + def add_gem_silencer + add_silencer do |line| + ActiveSupport::BacktraceCleaner::FORMATTED_GEMS_PATTERN.match?(line) && !/activerecord/.match?(line) + end + end + end +end + +ActiveSupport.on_load(:active_record) do + ActiveSupport::BacktraceCleaner.prepend(SQLServer::BacktraceCleaner) +end