From 09c647b1e2c21df6f0f0d07a29ad04b0b7301f53 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Mon, 11 Mar 2024 16:42:36 +0100 Subject: [PATCH] minitest: use class constant location as test suite source location --- lib/datadog/ci/contrib/minitest/helpers.rb | 16 +++++++++++++++- sig/datadog/ci/contrib/minitest/helpers.rbs | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/datadog/ci/contrib/minitest/helpers.rb b/lib/datadog/ci/contrib/minitest/helpers.rb index 3204552b3..69f5173d9 100644 --- a/lib/datadog/ci/contrib/minitest/helpers.rb +++ b/lib/datadog/ci/contrib/minitest/helpers.rb @@ -6,7 +6,12 @@ module Contrib module Minitest module Helpers def self.test_suite_name(klass, method_name) - source_location, = klass.instance_method(method_name).source_location + source_location = extract_source_location_from_class(klass) + # if we are in anonymous class, fallback to the method source location + if source_location.nil? + source_location, = klass.instance_method(method_name).source_location + end + source_file_path = Pathname.new(source_location.to_s).relative_path_from(Pathname.pwd).to_s "#{klass.name} at #{source_file_path}" @@ -16,6 +21,15 @@ def self.parallel?(klass) klass.ancestors.include?(::Minitest::Parallel::Test) || (defined?(::Minitest::Queue) && ::Minitest.singleton_class.ancestors.include?(::Minitest::Queue)) end + + def self.extract_source_location_from_class(klass) + return nil if klass.nil? || klass.name.nil? + + source_location = klass.const_source_location(klass.name) + source_location.first unless source_location.nil? + rescue + nil + end end end end diff --git a/sig/datadog/ci/contrib/minitest/helpers.rbs b/sig/datadog/ci/contrib/minitest/helpers.rbs index 4ceb76c50..768af46e7 100644 --- a/sig/datadog/ci/contrib/minitest/helpers.rbs +++ b/sig/datadog/ci/contrib/minitest/helpers.rbs @@ -6,6 +6,8 @@ module Datadog def self.test_suite_name: (untyped klass, String? method_name) -> ::String def self.parallel?: (untyped klass) -> bool + + def self.extract_source_location_from_class: (untyped klass) -> String? end end end