1require "test/unit" 2require "webrick/httputils" 3 4class TestWEBrickHTTPUtils < Test::Unit::TestCase 5 include WEBrick::HTTPUtils 6 7 def test_normilize_path 8 assert_equal("/foo", normalize_path("/foo")) 9 assert_equal("/foo/bar/", normalize_path("/foo/bar/")) 10 11 assert_equal("/", normalize_path("/foo/../")) 12 assert_equal("/", normalize_path("/foo/..")) 13 assert_equal("/", normalize_path("/foo/bar/../../")) 14 assert_equal("/", normalize_path("/foo/bar/../..")) 15 assert_equal("/", normalize_path("/foo/bar/../..")) 16 assert_equal("/baz", normalize_path("/foo/bar/../../baz")) 17 assert_equal("/baz", normalize_path("/foo/../bar/../baz")) 18 assert_equal("/baz/", normalize_path("/foo/../bar/../baz/")) 19 assert_equal("/...", normalize_path("/bar/../...")) 20 assert_equal("/.../", normalize_path("/bar/../.../")) 21 22 assert_equal("/foo/", normalize_path("/foo/./")) 23 assert_equal("/foo/", normalize_path("/foo/.")) 24 assert_equal("/foo/", normalize_path("/foo/././")) 25 assert_equal("/foo/", normalize_path("/foo/./.")) 26 assert_equal("/foo/bar", normalize_path("/foo/./bar")) 27 assert_equal("/foo/bar/", normalize_path("/foo/./bar/.")) 28 assert_equal("/foo/bar/", normalize_path("/./././foo/./bar/.")) 29 30 assert_equal("/foo/bar/", normalize_path("//foo///.//bar/.///.//")) 31 assert_equal("/", normalize_path("//foo///..///bar/.///..//.//")) 32 33 assert_raise(RuntimeError){ normalize_path("foo/bar") } 34 assert_raise(RuntimeError){ normalize_path("..") } 35 assert_raise(RuntimeError){ normalize_path("/..") } 36 assert_raise(RuntimeError){ normalize_path("/./..") } 37 assert_raise(RuntimeError){ normalize_path("/./../") } 38 assert_raise(RuntimeError){ normalize_path("/./../..") } 39 assert_raise(RuntimeError){ normalize_path("/./../../") } 40 assert_raise(RuntimeError){ normalize_path("/./../") } 41 assert_raise(RuntimeError){ normalize_path("/../..") } 42 assert_raise(RuntimeError){ normalize_path("/../../") } 43 assert_raise(RuntimeError){ normalize_path("/../../..") } 44 assert_raise(RuntimeError){ normalize_path("/../../../") } 45 assert_raise(RuntimeError){ normalize_path("/../foo/../") } 46 assert_raise(RuntimeError){ normalize_path("/../foo/../../") } 47 assert_raise(RuntimeError){ normalize_path("/foo/bar/../../../../") } 48 assert_raise(RuntimeError){ normalize_path("/foo/../bar/../../") } 49 assert_raise(RuntimeError){ normalize_path("/./../bar/") } 50 assert_raise(RuntimeError){ normalize_path("/./../") } 51 end 52 53 def test_split_header_value 54 assert_equal(['foo', 'bar'], split_header_value('foo, bar')) 55 assert_equal(['"foo"', 'bar'], split_header_value('"foo", bar')) 56 assert_equal(['foo', '"bar"'], split_header_value('foo, "bar"')) 57 assert_equal(['*'], split_header_value('*')) 58 assert_equal(['W/"xyzzy"', 'W/"r2d2xxxx"', 'W/"c3piozzzz"'], 59 split_header_value('W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"')) 60 end 61 62 def test_escape 63 assert_equal("/foo/bar", escape("/foo/bar")) 64 assert_equal("/~foo/bar", escape("/~foo/bar")) 65 assert_equal("/~foo%20bar", escape("/~foo bar")) 66 assert_equal("/~foo%20bar", escape("/~foo bar")) 67 assert_equal("/~foo%09bar", escape("/~foo\tbar")) 68 assert_equal("/~foo+bar", escape("/~foo+bar")) 69 bug8425 = '[Bug #8425] [ruby-core:55052]' 70 assert_nothing_raised(ArgumentError, Encoding::CompatibilityError, bug8425) { 71 assert_equal("%E3%83%AB%E3%83%93%E3%83%BC%E3%81%95%E3%82%93", escape("\u{30EB 30D3 30FC 3055 3093}")) 72 } 73 end 74 75 def test_escape_form 76 assert_equal("%2Ffoo%2Fbar", escape_form("/foo/bar")) 77 assert_equal("%2F~foo%2Fbar", escape_form("/~foo/bar")) 78 assert_equal("%2F~foo+bar", escape_form("/~foo bar")) 79 assert_equal("%2F~foo+%2B+bar", escape_form("/~foo + bar")) 80 end 81 82 def test_unescape 83 assert_equal("/foo/bar", unescape("%2ffoo%2fbar")) 84 assert_equal("/~foo/bar", unescape("/%7efoo/bar")) 85 assert_equal("/~foo/bar", unescape("%2f%7efoo%2fbar")) 86 assert_equal("/~foo+bar", unescape("/%7efoo+bar")) 87 end 88 89 def test_unescape_form 90 assert_equal("//foo/bar", unescape_form("/%2Ffoo/bar")) 91 assert_equal("//foo/bar baz", unescape_form("/%2Ffoo/bar+baz")) 92 assert_equal("/~foo/bar baz", unescape_form("/%7Efoo/bar+baz")) 93 end 94 95 def test_escape_path 96 assert_equal("/foo/bar", escape_path("/foo/bar")) 97 assert_equal("/foo/bar/", escape_path("/foo/bar/")) 98 assert_equal("/%25foo/bar/", escape_path("/%foo/bar/")) 99 end 100end 101