From 1e760c0be3ed35874204114e7454509f740c0fe2 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 22 Aug 2007 01:53:51 +0000 Subject: add tag v1_8_6_71 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@13189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_6/test/uri/test_generic.rb | 698 ++++++++++++++++++++++++++++++++++++ 1 file changed, 698 insertions(+) create mode 100644 ruby_1_8_6/test/uri/test_generic.rb (limited to 'ruby_1_8_6/test/uri/test_generic.rb') diff --git a/ruby_1_8_6/test/uri/test_generic.rb b/ruby_1_8_6/test/uri/test_generic.rb new file mode 100644 index 0000000000..8a7feb4982 --- /dev/null +++ b/ruby_1_8_6/test/uri/test_generic.rb @@ -0,0 +1,698 @@ +require 'test/unit' +require 'uri' + +module URI + + +class TestGeneric < Test::Unit::TestCase + def setup + @url = 'http://a/b/c/d;p?q' + @base_url = URI.parse(@url) + end + + def teardown + end + + def uri_to_ary(uri) + uri.class.component.collect {|c| uri.send(c)} + end + + def test_parse + # 0 + assert_kind_of(URI::HTTP, @base_url) + + exp = [ + 'http', + nil, 'a', URI::HTTP.default_port, + '/b/c/d;p', + 'q', + nil + ] + ary = uri_to_ary(@base_url) + assert_equal(exp, ary) + + # 1 + url = URI.parse('ftp://ftp.is.co.za/rfc/rfc1808.txt') + assert_kind_of(URI::FTP, url) + + exp = [ + 'ftp', + nil, 'ftp.is.co.za', URI::FTP.default_port, + '/rfc/rfc1808.txt', nil, + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 2 + url = URI.parse('gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles') + assert_kind_of(URI::Generic, url) + + exp = [ + 'gopher', + nil, 'spinaltap.micro.umn.edu', nil, nil, + '/00/Weather/California/Los%20Angeles', nil, + nil, + nil + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 3 + url = URI.parse('http://www.math.uio.no/faq/compression-faq/part1.html') + assert_kind_of(URI::HTTP, url) + + exp = [ + 'http', + nil, 'www.math.uio.no', URI::HTTP.default_port, + '/faq/compression-faq/part1.html', + nil, + nil + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 4 + url = URI.parse('mailto:mduerst@ifi.unizh.ch') + assert_kind_of(URI::Generic, url) + + exp = [ + 'mailto', + 'mduerst@ifi.unizh.ch', + [] + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 5 + url = URI.parse('news:comp.infosystems.www.servers.unix') + assert_kind_of(URI::Generic, url) + + exp = [ + 'news', + nil, nil, nil, nil, + nil, 'comp.infosystems.www.servers.unix', + nil, + nil + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 6 + url = URI.parse('telnet://melvyl.ucop.edu/') + assert_kind_of(URI::Generic, url) + + exp = [ + 'telnet', + nil, 'melvyl.ucop.edu', nil, nil, + '/', nil, + nil, + nil + ] + ary = uri_to_ary(url) + assert_equal(exp, ary) + + # 7 + # reported by Mr. Kubota + assert_raises(URI::InvalidURIError) { URI.parse('http://a_b:80/') } + assert_raises(URI::InvalidURIError) { URI.parse('http://a_b/') } + + # 8 + # reported by m_seki + uri = URI.parse('file:///foo/bar.txt') + assert_kind_of(URI::Generic, url) + uri = URI.parse('file:/foo/bar.txt') + assert_kind_of(URI::Generic, url) + + # 9 + # [ruby-dev:25667] + url = URI.parse('ftp://:pass@localhost/') + assert_equal('', url.user) + assert_equal('pass', url.password) + assert_equal(':pass', url.userinfo) + url = URI.parse('ftp://user@localhost/') + assert_equal('user', url.user) + assert_equal(nil, url.password) + assert_equal('user', url.userinfo) + url = URI.parse('ftp://localhost/') + assert_equal(nil, url.user) + assert_equal(nil, url.password) + assert_equal(nil, url.userinfo) + end + + def test_merge + u1 = URI.parse('http://foo') + u2 = URI.parse('http://foo/') + u3 = URI.parse('http://foo/bar') + u4 = URI.parse('http://foo/bar/') + + assert_equal(URI.parse('http://foo/baz'), u1 + 'baz') + assert_equal(URI.parse('http://foo/baz'), u2 + 'baz') + assert_equal(URI.parse('http://foo/baz'), u3 + 'baz') + assert_equal(URI.parse('http://foo/bar/baz'), u4 + 'baz') + + assert_equal(URI.parse('http://foo/baz'), u1 + '/baz') + assert_equal(URI.parse('http://foo/baz'), u2 + '/baz') + assert_equal(URI.parse('http://foo/baz'), u3 + '/baz') + assert_equal(URI.parse('http://foo/baz'), u4 + '/baz') + + # from [ruby-dev:11508] Re: uri + url = URI.parse('http://hoge/a.html') + 'b.html' + assert_equal('http://hoge/b.html', url.to_s) + + # reported by Mr. Kubota + url = URI.parse('http://a/b') + 'http://x/y' + assert_equal('http://x/y', url.to_s) + assert_equal(url, URI.parse('') + 'http://x/y') + assert_equal(url, URI.parse('').normalize + 'http://x/y') + assert_equal(url, URI.parse('http://a/b').normalize + 'http://x/y') + + u = URI.parse('http://foo/bar/baz') + assert_equal(nil, u.merge!("")) + assert_equal(nil, u.merge!(u)) + assert(nil != u.merge!(".")) + assert_equal('http://foo/bar/', u.to_s) + assert(nil != u.merge!("../baz")) + assert_equal('http://foo/baz', u.to_s) + + # [ruby-dev:23628] + u0 = URI.parse('mailto:foo@example.com') + u1 = URI.parse('mailto:foo@example.com#bar') + assert_equal(uri_to_ary(u0 + '#bar'), uri_to_ary(u1)) + + # [ruby-list:39838] + u0 = URI.parse('http://www.example.com/') + u1 = URI.parse('http://www.example.com/foo/..') + './' + assert_equal(u0, u1) + u0 = URI.parse('http://www.example.com/foo/') + u1 = URI.parse('http://www.example.com/foo/bar/..') + './' + assert_equal(u0, u1) + u0 = URI.parse('http://www.example.com/foo/bar/') + u1 = URI.parse('http://www.example.com/foo/bar/baz/..') + './' + assert_equal(u0, u1) + u0 = URI.parse('http://www.example.com/') + u1 = URI.parse('http://www.example.com/foo/bar/../..') + './' + assert_equal(u0, u1) + u0 = URI.parse('http://www.example.com/foo/') + u1 = URI.parse('http://www.example.com/foo/bar/baz/../..') + './' + assert_equal(u0, u1) + + # [ruby-list:39844] + u = URI.parse('http://www.example.com/') + u0 = u + './foo/' + u1 = u + './foo/bar/..' + assert_equal(u0, u1) + u = URI.parse('http://www.example.com/') + u0 = u + './' + u1 = u + './foo/bar/../..' + assert_equal(u0, u1) + end + + def test_route + url = URI.parse('http://hoge/a.html').route_to('http://hoge/b.html') + assert_equal('b.html', url.to_s) + + url = URI.parse('http://hoge/a/').route_to('http://hoge/b/') + assert_equal('../b/', url.to_s) + url = URI.parse('http://hoge/a/b').route_to('http://hoge/b/') + assert_equal('../b/', url.to_s) + + url = URI.parse('http://hoge/a/b/').route_to('http://hoge/b/') + assert_equal('../../b/', url.to_s) + + url = URI.parse('http://hoge/a/b/').route_to('http://HOGE/b/') + assert_equal('../../b/', url.to_s) + + url = URI.parse('http://hoge/a/b/').route_to('http://MOGE/b/') + assert_equal('//MOGE/b/', url.to_s) + + url = URI.parse('file:///a/b/').route_to('file:///a/b/') + assert_equal('', url.to_s) + + url = URI.parse('mailto:foo@example.com').route_to('mailto:foo@example.com#bar') + assert_equal('#bar', url.to_s) + + url = URI.parse('mailto:foo@example.com#bar').route_to('mailto:foo@example.com') + assert_equal('', url.to_s) + + url = URI.parse('mailto:foo@example.com').route_to('mailto:foo@example.com') + assert_equal('', url.to_s) + end + + def test_rfc2396_examples +# http://a/b/c/d;p?q +# g:h = g:h + url = @base_url.merge('g:h') + assert_kind_of(URI::Generic, url) + assert_equal('g:h', url.to_s) + url = @base_url.route_to('g:h') + assert_kind_of(URI::Generic, url) + assert_equal('g:h', url.to_s) + +# http://a/b/c/d;p?q +# g = http://a/b/c/g + url = @base_url.merge('g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g', url.to_s) + url = @base_url.route_to('http://a/b/c/g') + assert_kind_of(URI::Generic, url) + assert_equal('g', url.to_s) + +# http://a/b/c/d;p?q +# ./g = http://a/b/c/g + url = @base_url.merge('./g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g', url.to_s) + url = @base_url.route_to('http://a/b/c/g') + assert_kind_of(URI::Generic, url) + assert('./g' != url.to_s) # ok + assert_equal('g', url.to_s) + +# http://a/b/c/d;p?q +# g/ = http://a/b/c/g/ + url = @base_url.merge('g/') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g/', url.to_s) + url = @base_url.route_to('http://a/b/c/g/') + assert_kind_of(URI::Generic, url) + assert_equal('g/', url.to_s) + +# http://a/b/c/d;p?q +# /g = http://a/g + url = @base_url.merge('/g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/g', url.to_s) + url = @base_url.route_to('http://a/g') + assert_kind_of(URI::Generic, url) + assert('/g' != url.to_s) # ok + assert_equal('../../g', url.to_s) + +# http://a/b/c/d;p?q +# //g = http://g + url = @base_url.merge('//g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://g', url.to_s) + url = @base_url.route_to('http://g') + assert_kind_of(URI::Generic, url) + assert_equal('//g', url.to_s) + +# http://a/b/c/d;p?q +# ?y = http://a/b/c/?y + url = @base_url.merge('?y') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/?y', url.to_s) + url = @base_url.route_to('http://a/b/c/?y') + assert_kind_of(URI::Generic, url) + assert_equal('?y', url.to_s) + +# http://a/b/c/d;p?q +# g?y = http://a/b/c/g?y + url = @base_url.merge('g?y') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g?y', url.to_s) + url = @base_url.route_to('http://a/b/c/g?y') + assert_kind_of(URI::Generic, url) + assert_equal('g?y', url.to_s) + +# http://a/b/c/d;p?q +# #s = (current document)#s + url = @base_url.merge('#s') + assert_kind_of(URI::HTTP, url) + assert_equal(@base_url.to_s + '#s', url.to_s) + url = @base_url.route_to(@base_url.to_s + '#s') + assert_kind_of(URI::Generic, url) + assert_equal('#s', url.to_s) + +# http://a/b/c/d;p?q +# g#s = http://a/b/c/g#s + url = @base_url.merge('g#s') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g#s', url.to_s) + url = @base_url.route_to('http://a/b/c/g#s') + assert_kind_of(URI::Generic, url) + assert_equal('g#s', url.to_s) + +# http://a/b/c/d;p?q +# g?y#s = http://a/b/c/g?y#s + url = @base_url.merge('g?y#s') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g?y#s', url.to_s) + url = @base_url.route_to('http://a/b/c/g?y#s') + assert_kind_of(URI::Generic, url) + assert_equal('g?y#s', url.to_s) + +# http://a/b/c/d;p?q +# ;x = http://a/b/c/;x + url = @base_url.merge(';x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/;x', url.to_s) + url = @base_url.route_to('http://a/b/c/;x') + assert_kind_of(URI::Generic, url) + assert_equal(';x', url.to_s) + +# http://a/b/c/d;p?q +# g;x = http://a/b/c/g;x + url = @base_url.merge('g;x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g;x', url.to_s) + url = @base_url.route_to('http://a/b/c/g;x') + assert_kind_of(URI::Generic, url) + assert_equal('g;x', url.to_s) + +# http://a/b/c/d;p?q +# g;x?y#s = http://a/b/c/g;x?y#s + url = @base_url.merge('g;x?y#s') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g;x?y#s', url.to_s) + url = @base_url.route_to('http://a/b/c/g;x?y#s') + assert_kind_of(URI::Generic, url) + assert_equal('g;x?y#s', url.to_s) + +# http://a/b/c/d;p?q +# . = http://a/b/c/ + url = @base_url.merge('.') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/', url.to_s) + url = @base_url.route_to('http://a/b/c/') + assert_kind_of(URI::Generic, url) + assert('.' != url.to_s) # ok + assert_equal('./', url.to_s) + +# http://a/b/c/d;p?q +# ./ = http://a/b/c/ + url = @base_url.merge('./') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/', url.to_s) + url = @base_url.route_to('http://a/b/c/') + assert_kind_of(URI::Generic, url) + assert_equal('./', url.to_s) + +# http://a/b/c/d;p?q +# .. = http://a/b/ + url = @base_url.merge('..') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/', url.to_s) + url = @base_url.route_to('http://a/b/') + assert_kind_of(URI::Generic, url) + assert('..' != url.to_s) # ok + assert_equal('../', url.to_s) + +# http://a/b/c/d;p?q +# ../ = http://a/b/ + url = @base_url.merge('../') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/', url.to_s) + url = @base_url.route_to('http://a/b/') + assert_kind_of(URI::Generic, url) + assert_equal('../', url.to_s) + +# http://a/b/c/d;p?q +# ../g = http://a/b/g + url = @base_url.merge('../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/g', url.to_s) + url = @base_url.route_to('http://a/b/g') + assert_kind_of(URI::Generic, url) + assert_equal('../g', url.to_s) + +# http://a/b/c/d;p?q +# ../.. = http://a/ + url = @base_url.merge('../..') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/', url.to_s) + url = @base_url.route_to('http://a/') + assert_kind_of(URI::Generic, url) + assert('../..' != url.to_s) # ok + assert_equal('../../', url.to_s) + +# http://a/b/c/d;p?q +# ../../ = http://a/ + url = @base_url.merge('../../') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/', url.to_s) + url = @base_url.route_to('http://a/') + assert_kind_of(URI::Generic, url) + assert_equal('../../', url.to_s) + +# http://a/b/c/d;p?q +# ../../g = http://a/g + url = @base_url.merge('../../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/g', url.to_s) + url = @base_url.route_to('http://a/g') + assert_kind_of(URI::Generic, url) + assert_equal('../../g', url.to_s) + +# http://a/b/c/d;p?q +# <> = (current document) + url = @base_url.merge('') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/d;p?q', url.to_s) + url = @base_url.route_to('http://a/b/c/d;p?q') + assert_kind_of(URI::Generic, url) + assert_equal('', url.to_s) + +# http://a/b/c/d;p?q +# /./g = http://a/./g + url = @base_url.merge('/./g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/./g', url.to_s) + url = @base_url.route_to('http://a/./g') + assert_kind_of(URI::Generic, url) + assert_equal('/./g', url.to_s) + +# http://a/b/c/d;p?q +# /../g = http://a/../g + url = @base_url.merge('/../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/../g', url.to_s) + url = @base_url.route_to('http://a/../g') + assert_kind_of(URI::Generic, url) + assert_equal('/../g', url.to_s) + +# http://a/b/c/d;p?q +# g. = http://a/b/c/g. + url = @base_url.merge('g.') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g.', url.to_s) + url = @base_url.route_to('http://a/b/c/g.') + assert_kind_of(URI::Generic, url) + assert_equal('g.', url.to_s) + +# http://a/b/c/d;p?q +# .g = http://a/b/c/.g + url = @base_url.merge('.g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/.g', url.to_s) + url = @base_url.route_to('http://a/b/c/.g') + assert_kind_of(URI::Generic, url) + assert_equal('.g', url.to_s) + +# http://a/b/c/d;p?q +# g.. = http://a/b/c/g.. + url = @base_url.merge('g..') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g..', url.to_s) + url = @base_url.route_to('http://a/b/c/g..') + assert_kind_of(URI::Generic, url) + assert_equal('g..', url.to_s) + +# http://a/b/c/d;p?q +# ..g = http://a/b/c/..g + url = @base_url.merge('..g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/..g', url.to_s) + url = @base_url.route_to('http://a/b/c/..g') + assert_kind_of(URI::Generic, url) + assert_equal('..g', url.to_s) + +# http://a/b/c/d;p?q +# ../../../g = http://a/../g + url = @base_url.merge('../../../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/../g', url.to_s) + url = @base_url.route_to('http://a/../g') + assert_kind_of(URI::Generic, url) + assert('../../../g' != url.to_s) # ok? yes, it confuses you + assert_equal('/../g', url.to_s) # and it is clearly + +# http://a/b/c/d;p?q +# ../../../../g = http://a/../../g + url = @base_url.merge('../../../../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/../../g', url.to_s) + url = @base_url.route_to('http://a/../../g') + assert_kind_of(URI::Generic, url) + assert('../../../../g' != url.to_s) # ok? yes, it confuses you + assert_equal('/../../g', url.to_s) # and it is clearly + +# http://a/b/c/d;p?q +# ./../g = http://a/b/g + url = @base_url.merge('./../g') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/g', url.to_s) + url = @base_url.route_to('http://a/b/g') + assert_kind_of(URI::Generic, url) + assert('./../g' != url.to_s) # ok + assert_equal('../g', url.to_s) + +# http://a/b/c/d;p?q +# ./g/. = http://a/b/c/g/ + url = @base_url.merge('./g/.') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g/', url.to_s) + url = @base_url.route_to('http://a/b/c/g/') + assert_kind_of(URI::Generic, url) + assert('./g/.' != url.to_s) # ok + assert_equal('g/', url.to_s) + +# http://a/b/c/d;p?q +# g/./h = http://a/b/c/g/h + url = @base_url.merge('g/./h') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g/h', url.to_s) + url = @base_url.route_to('http://a/b/c/g/h') + assert_kind_of(URI::Generic, url) + assert('g/./h' != url.to_s) # ok + assert_equal('g/h', url.to_s) + +# http://a/b/c/d;p?q +# g/../h = http://a/b/c/h + url = @base_url.merge('g/../h') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/h', url.to_s) + url = @base_url.route_to('http://a/b/c/h') + assert_kind_of(URI::Generic, url) + assert('g/../h' != url.to_s) # ok + assert_equal('h', url.to_s) + +# http://a/b/c/d;p?q +# g;x=1/./y = http://a/b/c/g;x=1/y + url = @base_url.merge('g;x=1/./y') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g;x=1/y', url.to_s) + url = @base_url.route_to('http://a/b/c/g;x=1/y') + assert_kind_of(URI::Generic, url) + assert('g;x=1/./y' != url.to_s) # ok + assert_equal('g;x=1/y', url.to_s) + +# http://a/b/c/d;p?q +# g;x=1/../y = http://a/b/c/y + url = @base_url.merge('g;x=1/../y') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/y', url.to_s) + url = @base_url.route_to('http://a/b/c/y') + assert_kind_of(URI::Generic, url) + assert('g;x=1/../y' != url.to_s) # ok + assert_equal('y', url.to_s) + +# http://a/b/c/d;p?q +# g?y/./x = http://a/b/c/g?y/./x + url = @base_url.merge('g?y/./x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g?y/./x', url.to_s) + url = @base_url.route_to('http://a/b/c/g?y/./x') + assert_kind_of(URI::Generic, url) + assert_equal('g?y/./x', url.to_s) + +# http://a/b/c/d;p?q +# g?y/../x = http://a/b/c/g?y/../x + url = @base_url.merge('g?y/../x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g?y/../x', url.to_s) + url = @base_url.route_to('http://a/b/c/g?y/../x') + assert_kind_of(URI::Generic, url) + assert_equal('g?y/../x', url.to_s) + +# http://a/b/c/d;p?q +# g#s/./x = http://a/b/c/g#s/./x + url = @base_url.merge('g#s/./x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g#s/./x', url.to_s) + url = @base_url.route_to('http://a/b/c/g#s/./x') + assert_kind_of(URI::Generic, url) + assert_equal('g#s/./x', url.to_s) + +# http://a/b/c/d;p?q +# g#s/../x = http://a/b/c/g#s/../x + url = @base_url.merge('g#s/../x') + assert_kind_of(URI::HTTP, url) + assert_equal('http://a/b/c/g#s/../x', url.to_s) + url = @base_url.route_to('http://a/b/c/g#s/../x') + assert_kind_of(URI::Generic, url) + assert_equal('g#s/../x', url.to_s) + +# http://a/b/c/d;p?q +# http:g = http:g ; for validating parsers +# | http://a/b/c/g ; for backwards compatibility + url = @base_url.merge('http:g') + assert_kind_of(URI::HTTP, url) + assert_equal('http:g', url.to_s) + url = @base_url.route_to('http:g') + assert_kind_of(URI::Generic, url) + assert_equal('http:g', url.to_s) + end + + def test_join + assert_equal(URI.parse('http://foo/bar'), URI.join('http://foo/bar')) + assert_equal(URI.parse('http://foo/bar'), URI.join('http://foo', 'bar')) + assert_equal(URI.parse('http://foo/bar/'), URI.join('http://foo', 'bar/')) + + assert_equal(URI.parse('http://foo/baz'), URI.join('http://foo', 'bar', 'baz')) + assert_equal(URI.parse('http://foo/baz'), URI.join('http://foo', 'bar', '/baz')) + assert_equal(URI.parse('http://foo/baz/'), URI.join('http://foo', 'bar', '/baz/')) + assert_equal(URI.parse('http://foo/bar/baz'), URI.join('http://foo', 'bar/', 'baz')) + assert_equal(URI.parse('http://foo/hoge'), URI.join('http://foo', 'bar', 'baz', 'hoge')) + + assert_equal(URI.parse('http://foo/bar/baz'), URI.join('http://foo', 'bar/baz')) + assert_equal(URI.parse('http://foo/bar/hoge'), URI.join('http://foo', 'bar/baz', 'hoge')) + assert_equal(URI.parse('http://foo/bar/baz/hoge'), URI.join('http://foo', 'bar/baz/', 'hoge')) + assert_equal(URI.parse('http://foo/hoge'), URI.join('http://foo', 'bar/baz', '/hoge')) + assert_equal(URI.parse('http://foo/bar/hoge'), URI.join('http://foo', 'bar/baz', 'hoge')) + assert_equal(URI.parse('http://foo/bar/baz/hoge'), URI.join('http://foo', 'bar/baz/', 'hoge')) + assert_equal(URI.parse('http://foo/hoge'), URI.join('http://foo', 'bar/baz', '/hoge')) + end + + # ruby-dev:16728 + def test_set_component + uri = URI.parse('http://foo:bar@baz') + assert_equal('oof', uri.user = 'oof') + assert_equal('http://oof:bar@baz', uri.to_s) + assert_equal('rab', uri.password = 'rab') + assert_equal('http://oof:rab@baz', uri.to_s) + assert_equal('foo', uri.userinfo = 'foo') + assert_equal('http://foo:rab@baz', uri.to_s) + assert_equal(['foo', 'bar'], uri.userinfo = ['foo', 'bar']) + assert_equal('http://foo:bar@baz', uri.to_s) + assert_equal(['foo'], uri.userinfo = ['foo']) + assert_equal('http://foo:bar@baz', uri.to_s) + assert_equal('zab', uri.host = 'zab') + assert_equal('http://foo:bar@zab', uri.to_s) + assert_equal(8080, uri.port = 8080) + assert_equal('http://foo:bar@zab:8080', uri.to_s) + assert_equal('/', uri.path = '/') + assert_equal('http://foo:bar@zab:8080/', uri.to_s) + assert_equal('a=1', uri.query = 'a=1') + assert_equal('http://foo:bar@zab:8080/?a=1', uri.to_s) + assert_equal('b123', uri.fragment = 'b123') + assert_equal('http://foo:bar@zab:8080/?a=1#b123', uri.to_s) + + uri = URI.parse('http://example.com') + assert_raises(URI::InvalidURIError) { uri.password = 'bar' } + uri.userinfo = 'foo:bar' + assert_equal('http://foo:bar@example.com', uri.to_s) + assert_raises(URI::InvalidURIError) { uri.registry = 'bar' } + assert_raises(URI::InvalidURIError) { uri.opaque = 'bar' } + + uri = URI.parse('mailto:foo@example.com') + assert_raises(URI::InvalidURIError) { uri.user = 'bar' } + assert_raises(URI::InvalidURIError) { uri.password = 'bar' } + assert_raises(URI::InvalidURIError) { uri.userinfo = ['bar', 'baz'] } + assert_raises(URI::InvalidURIError) { uri.host = 'bar' } + assert_raises(URI::InvalidURIError) { uri.port = 'bar' } + assert_raises(URI::InvalidURIError) { uri.path = 'bar' } + assert_raises(URI::InvalidURIError) { uri.query = 'bar' } + end +end + + +end -- cgit v1.2.3