diff options
| -rw-r--r-- | test/ruby/test_namespace.rb | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ruby/test_namespace.rb b/test/ruby/test_namespace.rb index 5a014ad714..af0d6173f2 100644 --- a/test/ruby/test_namespace.rb +++ b/test/ruby/test_namespace.rb @@ -695,4 +695,76 @@ class TestNamespace < Test::Unit::TestCase pat = "_ruby_ns_*."+RbConfig::CONFIG["DLEXT"] File.unlink(*Dir.glob(pat, base: tmp).map {|so| "#{tmp}/#{so}"}) end + + def test_basic_namespace_detections + assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + begin; + ns = Namespace.new + code = <<~EOC + NS1 = Namespace.current + class Foo + NS2 = Namespace.current + NS2_proc = ->(){ NS2 } + NS3_proc = ->(){ Namespace.current } + + def ns4 = Namespace.current + def self.ns5 = NS2 + def self.ns6 = Namespace.current + def self.ns6_proc = ->(){ Namespace.current } + + def self.yield_block = yield + def self.call_block(&b) = b.call + end + NS9 = Foo.new.ns4 + EOC + ns.eval(code) + outer = Namespace.current + assert_equal ns, ns::NS1 # on TOP frame + assert_equal ns, ns::Foo::NS2 # on CLASS frame + assert_equal ns, ns::Foo::NS2_proc.call # proc -> a const on CLASS + assert_equal ns, ns::Foo::NS3_proc.call # proc -> the current + assert_equal ns, ns::Foo.new.ns4 # instance method -> the current + assert_equal ns, ns::Foo.ns5 # singleton method -> a const on CLASS + assert_equal ns, ns::Foo.ns6 # singleton method -> the current + assert_equal ns, ns::Foo.ns6_proc.call # method returns a proc -> the current + + assert_equal outer, ns::Foo.yield_block{ Namespace.current } # method yields + assert_equal outer, ns::Foo.call_block{ Namespace.current } # method calls a block + assert_equal ns, ns::NS9 # on TOP frame, referring a class in the current + end; + end + + def test_loading_extension_libs_in_main_namespace + assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + begin; + require "prism" + require "optparse" + require "date" + require "time" + require "delegate" + require "singleton" + require "pp" + require "fileutils" + require "tempfile" + require "tmpdir" + require "json" + require "psych" + require "yaml" + require "zlib" + require "open3" + require "ipaddr" + require "net/http" + require "openssl" + require "socket" + require "uri" + require "digest" + require "erb" + require "stringio" + require "monitor" + require "timeout" + require "securerandom" + expected = 1 + assert_equal expected, 1 + end; + end end |
