1require 'test/unit' 2require 'uri' 3 4class URI::TestParser < Test::Unit::TestCase 5 def uri_to_ary(uri) 6 uri.class.component.collect {|c| uri.send(c)} 7 end 8 9 def test_compare 10 url = 'http://a/b/c/d;p?q' 11 u0 = URI.parse(url) 12 u1 = URI.parse(url) 13 p = URI::Parser.new 14 u2 = p.parse(url) 15 u3 = p.parse(url) 16 17 assert(u0 == u1) 18 assert(u0.eql?(u1)) 19 assert(!u0.equal?(u1)) 20 21 assert(u1 == u2) 22 assert(!u1.eql?(u2)) 23 assert(!u1.equal?(u2)) 24 25 assert(u2 == u3) 26 assert(u2.eql?(u3)) 27 assert(!u2.equal?(u3)) 28 end 29 30 def test_parse 31 escaped = URI::REGEXP::PATTERN::ESCAPED 32 hex = URI::REGEXP::PATTERN::HEX 33 p1 = URI::Parser.new(:ESCAPED => "(?:#{escaped}|%u[#{hex}]{4})") 34 u1 = p1.parse('http://a/b/%uABCD') 35 assert_equal(['http', nil, 'a', URI::HTTP.default_port, '/b/%uABCD', nil, nil], 36 uri_to_ary(u1)) 37 u1.path = '/%uDCBA' 38 assert_equal(['http', nil, 'a', URI::HTTP.default_port, '/%uDCBA', nil, nil], 39 uri_to_ary(u1)) 40 end 41end 42