summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-08-11 20:53:37 -0700
committerJeremy Evans <code@jeremyevans.net>2019-12-03 17:31:49 +0200
commit47c97e1e843159c3c4d57f8c5e22daea57c3ffe1 (patch)
tree43923a784e0d12eccee79adb4bd2f8f56461e3f1 /test
parentb96d559c696c5141bdb6717442818f1206ff9d2e (diff)
Do not lose existing constant visibility when autoloading
This copies the private/deprecate constant visibility across the autoload. It still is backwards compatible with setting the private/deprecate constant visibility in the autoloaded file. However, if you explicitly set public constant in the autoloaded file, that will be reset after the autoload. Fixes [Bug #11055]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/2716
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_autoload.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/ruby/test_autoload.rb b/test/ruby/test_autoload.rb
index 53510e8244..e9e13eef96 100644
--- a/test/ruby/test_autoload.rb
+++ b/test/ruby/test_autoload.rb
@@ -295,6 +295,66 @@ p Foo::Bar
end
end
+ def test_autoload_private_constant_before_autoload
+ Dir.mktmpdir('autoload') do |tmpdir|
+ File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ class AutoloadTest
+ ZZZ = :ZZZ
+ end
+ end;
+ assert_separately(%W[-I #{tmpdir}], "#{<<-"begin;"}\n#{<<-'end;'}")
+ bug = '[Bug #11055]'
+ begin;
+ class AutoloadTest
+ autoload :ZZZ, "zzz.rb"
+ private_constant :ZZZ
+ ZZZ
+ end
+ assert_raise(NameError, bug) {AutoloadTest::ZZZ}
+ end;
+ assert_separately(%W[-I #{tmpdir}], "#{<<-"begin;"}\n#{<<-'end;'}")
+ bug = '[Bug #11055]'
+ begin;
+ class AutoloadTest
+ autoload :ZZZ, "zzz.rb"
+ private_constant :ZZZ
+ end
+ assert_raise(NameError, bug) {AutoloadTest::ZZZ}
+ end;
+ end
+ end
+
+ def test_autoload_deprecate_constant_before_autoload
+ Dir.mktmpdir('autoload') do |tmpdir|
+ File.write(tmpdir+"/zzz.rb", "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ class AutoloadTest
+ ZZZ = :ZZZ
+ end
+ end;
+ assert_separately(%W[-I #{tmpdir}], "#{<<-"begin;"}\n#{<<-'end;'}")
+ bug = '[Bug #11055]'
+ begin;
+ class AutoloadTest
+ autoload :ZZZ, "zzz.rb"
+ deprecate_constant :ZZZ
+ end
+ assert_warning(/ZZZ is deprecated/, bug) {class AutoloadTest; ZZZ; end}
+ assert_warning(/ZZZ is deprecated/, bug) {AutoloadTest::ZZZ}
+ end;
+ assert_separately(%W[-I #{tmpdir}], "#{<<-"begin;"}\n#{<<-'end;'}")
+ bug = '[Bug #11055]'
+ begin;
+ class AutoloadTest
+ autoload :ZZZ, "zzz.rb"
+ deprecate_constant :ZZZ
+ end
+ assert_warning(/ZZZ is deprecated/, bug) {AutoloadTest::ZZZ}
+ end;
+ end
+ end
+
def test_autoload_fork
EnvUtil.default_warning do
Tempfile.create(['autoload', '.rb']) {|file|