diff options
| author | lolwut <hsbt@ruby-lang.org> | 2026-03-12 10:24:30 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2026-03-12 03:51:01 +0000 |
| commit | aab7a55cd362540e7d67a2cf12c2f270d0d6bb59 (patch) | |
| tree | ce632444b9d954c32b5a9b5ff037846fd497013e /test | |
| parent | 93a516dd8bb0e9bd4e5654d44fb83d7ce81a10d6 (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.rb | 55 |
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 |
