File: test-urigen.rb

package info (click to toggle)
libwebapp-ruby 0.4-2.1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 240 kB
  • sloc: ruby: 2,245; makefile: 79
file content (120 lines) | stat: -rw-r--r-- 4,403 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
require 'test/unit'
require 'webapp'

class URIGenTest < Test::Unit::TestCase
  def check_reluri_1(expected, hash)
    requri = WebApp::URIGen.new('http', "host", 80, "/foo/bar.cgi", "/baz/qux")
    assert_equal(expected, requri.make_relative_uri(hash).to_s)
  end

  def test_path_info
    check_reluri_1("../hoge"              , :path_info=>"/hoge")
    check_reluri_1("fuga"                 , :path_info=>"/baz/fuga")
    check_reluri_1("./"                   , :path_info=>"/baz/")
    check_reluri_1("../"                  , :path_info=>"/")
    check_reluri_1("../../bar.cgi"        , {})
    check_reluri_1("../../funyo.cgi"      , :script=>"funyo.cgi")
    check_reluri_1("../../punyo/gunyo.cgi", :script=>"punyo/gunyo.cgi")
    check_reluri_1("../../../genyo.cgi"   , :script=>"../genyo.cgi")
    check_reluri_1("../../bar.cgi#sec1"   , :fragment=>"sec1")
    check_reluri_1("../h%3F%23o/x%20y"    , :path_info=>"/h?#o/x y")
    check_reluri_1("../../ho%25o.cgi"     , :script=>"ho%o.cgi")
    check_reluri_1("../../bar.cgi#sp%20ce", :fragment=>"sp ce")
  end

  def check_reluri_2(expected, hash)
    requri = WebApp::URIGen.new('http', "host", 80, "/foo/bar.cgi", '')
    assert_equal(expected, requri.make_relative_uri(hash).to_s)
  end

  def test_query
    check_reluri_2("bar.cgi", :query=>{})
    check_reluri_2("bar.cgi?a=b", :query=>{'a'=>'b'})
    check_reluri_2("bar.cgi?a=b;a=c", :query=>{'a'=>['b','c']})
    check_reluri_2("bar.cgi?a+b=c+d", :query=>{'a b'=>'c d'})
    check_reluri_2("bar.cgi?a=:", :query=>{'a'=>':'})
    check_reluri_2("bar.cgi?a=%2B", :query=>{'a'=>'+'})
  end

  def test_reluri_unexpected
    requri = WebApp::URIGen.new('http', "host", 80, "/foo.cgi", '')
    assert_raise(ArgumentError) {
      requri.make_relative_uri({:script_name=>"bar.cgi"})
    }
  end

  def test_reluri_colon
    assert_equal("./a:b", 
      WebApp::URIGen.new('http', "host", 80, "/foo.cgi", '').make_relative_uri({:script=>"/a:b"}).to_s)
    assert_equal("./a:b", 
      WebApp::URIGen.new('http', "host", 80, "/foo.cgi", '/bar').make_relative_uri({:path_info=>"a:b"}).to_s)
  end

  def test_reluri_slash
    assert_equal(".//a", 
      WebApp::URIGen.new('http', "host", 80, "/foo.cgi", '/bar').make_relative_uri({:path_info=>"//a"}).to_s)
  end

  def check_absuri(expected, hash)
    requri = WebApp::URIGen.new('http', "host", 80, "/foo/bar.cgi", "/baz/qux")
    assert_equal(expected, requri.make_absolute_uri(hash).to_s)
  end

  def test_absuri
    check_absuri("http://host/foo/bar.cgi", {})
    check_absuri("http://host/foo/bar.cgi/hoge", :path_info=>"/hoge")
  end

  def fragment_escape(s)
    WebApp::URIGen.allocate.fragment_escape(s)
  end

  def form_key_value_escape(s)
    WebApp::URIGen.allocate.form_key_value_escape(s)
  end

  DEFTEST_COUNT = Hash.new(0)

  def self.deftest_fragment_escape(*srcs)
    srcs.each {|src|
      define_method("test_fragment_escape_#{DEFTEST_COUNT['fragment_escape'] += 1}") {
        assert_equal("%" + sprintf("%02X", src[0]), fragment_escape(src))
      }
    }
  end
  def self.deftest_fragment_no_escape(*srcs)
    srcs.each {|src|
      define_method("test_fragment_no_escape_#{DEFTEST_COUNT['fragment_no_escape'] += 1}") {
        assert_equal(src, fragment_escape(src))
      }
    }
  end

  deftest_fragment_escape(
    "\0", " ", "\"", "#", "%", "<", ">", "[", "\\", "]", "^", "`", "{", "|", "}", "\x7f", "\x80")
  deftest_fragment_no_escape(
    "!", "$", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", ":", ";", "=", "?", "@", "A", "_", "a", "~") 

  def self.deftest_form_key_value_escape(*srcs)
    srcs.each {|src|
      define_method("test_form_key_value_escape_#{DEFTEST_COUNT['form_key_value_escape'] += 1}") {
        assert_equal("%" + sprintf("%02X", src[0]), form_key_value_escape(src))
      }
    }
  end
  def self.deftest_form_no_escape(*srcs)
    srcs.each {|src|
      define_method("test_form_no_escape_#{DEFTEST_COUNT['form_no_escape'] += 1}") {
        assert_equal(src, form_key_value_escape(src))
      }
    }
  end

  def test_form_key_value_escape_space
    assert_equal("+", form_key_value_escape(" "))
  end
  deftest_form_key_value_escape(
    "&", "+", ";", "=", "\0", "\"", "#", "%", "<", ">", "[", "\\", "]", "^", "`", "{", "|", "}", "\x7f", "\x80")
  deftest_form_no_escape(
    "!", "$", "'", "(", ")", "*", ",", "-", ".", "/", "0", ":", "?", "@", "A", "_", "a", "~") 
end