2 require "webrick/httputils"
4 class TestWEBrickHTTPUtils < Test::Unit::TestCase
5 include WEBrick::HTTPUtils
7 def test_normilize_path
8 assert_equal("/foo", normalize_path("/foo"))
9 assert_equal("/foo/bar/", normalize_path("/foo/bar/"))
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/../.../"))
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/."))
30 assert_equal("/foo/bar/", normalize_path("//foo///.//bar/.///.//"))
31 assert_equal("/", normalize_path("//foo///..///bar/.///..//.//"))
33 assert_raises(RuntimeError){ normalize_path("foo/bar") }
34 assert_raises(RuntimeError){ normalize_path("..") }
35 assert_raises(RuntimeError){ normalize_path("/..") }
36 assert_raises(RuntimeError){ normalize_path("/./..") }
37 assert_raises(RuntimeError){ normalize_path("/./../") }
38 assert_raises(RuntimeError){ normalize_path("/./../..") }
39 assert_raises(RuntimeError){ normalize_path("/./../../") }
40 assert_raises(RuntimeError){ normalize_path("/./../") }
41 assert_raises(RuntimeError){ normalize_path("/../..") }
42 assert_raises(RuntimeError){ normalize_path("/../../") }
43 assert_raises(RuntimeError){ normalize_path("/../../..") }
44 assert_raises(RuntimeError){ normalize_path("/../../../") }
45 assert_raises(RuntimeError){ normalize_path("/../foo/../") }
46 assert_raises(RuntimeError){ normalize_path("/../foo/../../") }
47 assert_raises(RuntimeError){ normalize_path("/foo/bar/../../../../") }
48 assert_raises(RuntimeError){ normalize_path("/foo/../bar/../../") }
49 assert_raises(RuntimeError){ normalize_path("/./../bar/") }
50 assert_raises(RuntimeError){ normalize_path("/./../") }
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"'))
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"))
72 assert_equal("%2Ffoo%2Fbar", escape_form("/foo/bar"))
73 assert_equal("%2F~foo%2Fbar", escape_form("/~foo/bar"))
74 assert_equal("%2F~foo+bar", escape_form("/~foo bar"))
75 assert_equal("%2F~foo+%2B+bar", escape_form("/~foo + bar"))
79 assert_equal("/foo/bar", unescape("%2ffoo%2fbar"))
80 assert_equal("/~foo/bar", unescape("/%7efoo/bar"))
81 assert_equal("/~foo/bar", unescape("%2f%7efoo%2fbar"))
82 assert_equal("/~foo+bar", unescape("/%7efoo+bar"))
85 def test_unescape_form
86 assert_equal("//foo/bar", unescape_form("/%2Ffoo/bar"))
87 assert_equal("//foo/bar baz", unescape_form("/%2Ffoo/bar+baz"))
88 assert_equal("/~foo/bar baz", unescape_form("/%7Efoo/bar+baz"))
92 assert_equal("/foo/bar", escape_path("/foo/bar"))
93 assert_equal("/foo/bar/", escape_path("/foo/bar/"))
94 assert_equal("/%25foo/bar/", escape_path("/%foo/bar/"))