summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2024-07-18 13:16:20 +0900
committergit <svn-admin@ruby-lang.org>2024-07-19 00:50:37 +0000
commit082335494b59557c322617ff4329c5102cf404da (patch)
treeeab0adabf13a892bc6e80623119b73146c6cf4bd
parent2a56c1841dcecc793ae9cbd0935643639eec1066 (diff)
[ruby/uri] Added test for constant definition and remove URI::REGEXP when using RFC3986_PARSER
https://github.com/ruby/uri/commit/6f616d97fc
-rw-r--r--lib/uri/common.rb3
-rw-r--r--test/uri/test_common.rb17
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/uri/common.rb b/lib/uri/common.rb
index 4515a77af6..a4ed70f9a3 100644
--- a/lib/uri/common.rb
+++ b/lib/uri/common.rb
@@ -26,8 +26,8 @@ module URI
remove_const(:Parser) if defined?(Parser)
const_set("Parser", parser.class)
+ remove_const(:REGEXP) if defined?(REGEXP)
if Parser == RFC2396_Parser
- remove_const(:REGEXP) if defined?(REGEXP)
const_set("REGEXP", URI::RFC2396_REGEXP)
Parser.new.pattern.each_pair do |sym, str|
unless REGEXP::PATTERN.const_defined?(sym)
@@ -35,6 +35,7 @@ module URI
end
end
end
+
Parser.new.regexp.each_pair do |sym, str|
remove_const(sym) if const_defined?(sym)
const_set(sym, str)
diff --git a/test/uri/test_common.rb b/test/uri/test_common.rb
index 1df19e6968..8d0a206c86 100644
--- a/test/uri/test_common.rb
+++ b/test/uri/test_common.rb
@@ -10,6 +10,23 @@ class URI::TestCommon < Test::Unit::TestCase
def teardown
end
+ def test_parser_switch
+ assert_equal(URI::Parser, URI::RFC3986_Parser)
+ refute defined?(::URI::REGEXP)
+
+ URI.parser = URI::RFC2396_PARSER
+
+ assert_equal(URI::Parser, URI::RFC2396_Parser)
+ assert defined?(URI::REGEXP)
+
+ URI.parser = URI::RFC3986_PARSER
+
+ assert_equal(URI::Parser, URI::RFC3986_Parser)
+ refute defined?(URI::REGEXP)
+ ensure
+ URI.parser = URI::RFC3986_PARSER
+ end
+
def test_extract
EnvUtil.suppress_warning do
assert_equal(['http://example.com'],