summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorlolwut <hsbt@ruby-lang.org>2026-03-12 10:24:30 +0900
committergit <svn-admin@ruby-lang.org>2026-03-12 03:51:01 +0000
commitaab7a55cd362540e7d67a2cf12c2f270d0d6bb59 (patch)
treece632444b9d954c32b5a9b5ff037846fd497013e /test
parent93a516dd8bb0e9bd4e5654d44fb83d7ce81a10d6 (diff)
[ruby/rubygems] Warn when require_relative is used to load compiled extensions during gem build
When a gem has native extensions and uses `require_relative` to load a path without a corresponding .rb file in the gem, warn that this will break in RubyGems 4.2, which will stop copying compiled extensions into the gem's lib directory. Recommend using `require` instead. https://github.com/ruby/rubygems/commit/1198c24a08 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'test')
-rw-r--r--test/rubygems/test_gem_specification.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index 7675ade415..cf01a40b8c 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -2887,6 +2887,61 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
end
end
+ def test_validate_extension_require_relative_warning
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.extensions = ["ext/a/extconf.rb"]
+ @a1.files = %w[lib/code.rb lib/a.rb ext/a/extconf.rb]
+
+ File.write File.join("lib", "a.rb"), 'require_relative "a/a"'
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ assert_match(%r{require_relative "a/a"}, @ui.error)
+ assert_match(/will break in RubyGems 4\.2/, @ui.error)
+ assert_match(/Use `require` instead of `require_relative`/, @ui.error)
+ end
+ end
+
+ def test_validate_extension_require_relative_no_warning_when_rb_exists
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.extensions = ["ext/a/extconf.rb"]
+ @a1.files = %w[lib/code.rb lib/a.rb lib/a/a.rb ext/a/extconf.rb]
+
+ FileUtils.mkdir_p File.join("lib", "a")
+ File.write File.join("lib", "a.rb"), 'require_relative "a/a"'
+ File.write File.join("lib", "a", "a.rb"), ""
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ refute_match(/require_relative/, @ui.error)
+ end
+ end
+
+ def test_validate_extension_require_relative_no_warning_without_extensions
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.extensions = []
+ @a1.files = %w[lib/code.rb lib/a.rb]
+
+ File.write File.join("lib", "a.rb"), 'require_relative "a/a"'
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ refute_match(/require_relative/, @ui.error)
+ end
+ end
+
def test_validate_description
util_setup_validate