summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_namespace.rb72
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