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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
# coding: ASCII-8BIT
require 'test/unit'
require "openid/util"
module OpenID
class UtilTestCase < Test::Unit::TestCase
def test_base64
cases = [
"",
"\000",
"\001",
"\000" * 100,
(0...256).collect{ |i| i.chr }.join('')
]
cases.each do |c|
encoded = Util.to_base64(c)
decoded = Util.from_base64(encoded)
assert(c == decoded)
end
end
def test_base64_valid
[["foos", "~\212,"],
["++++", "\373\357\276"],
["/+==", "\377"],
["", ""],
["FOOSBALL", "\024\343\222\004\002\313"],
["FoosBL==", "\026\212,\004"],
["Foos\nBall", "\026\212,\005\251e"],
["Foo\r\ns\nBall", "\026\212,\005\251e"]
].each do | input, expected |
assert_equal(expected, Util.from_base64(input))
end
end
def test_base64_invalid
['!',
'Foos!',
'Balls',
'B===',
'Foos Ball',
'=foo',
].each do |invalid_input|
assert_raises(ArgumentError) do
Util.from_base64(invalid_input)
end
end
end
def test_append_args()
simple = 'http://www.example.com/'
cases = [
['empty list',
[simple, []],
simple],
['empty dict',
[simple, {}],
simple],
['one list',
[simple, [['a', 'b']]],
simple + '?a=b'],
['one dict',
[simple, {'a' => 'b'}],
simple + '?a=b'],
['two list (same)',
[simple, [['a', 'b'], ['a', 'c']]],
simple + '?a=b&a=c'],
['two list',
[simple, [['a', 'b'], ['b', 'c']]],
simple + '?a=b&b=c'],
['two list (order)',
[simple, [['b', 'c'], ['a', 'b']]],
simple + '?b=c&a=b'],
['two dict [order]',
[simple, {'b' => 'c', 'a' => 'b'}],
simple + '?a=b&b=c'],
['args exist [empty]',
[simple + '?stuff=bother', []],
simple + '?stuff=bother'],
['escape',
[simple, [['=', '=']]],
simple + '?%3D=%3D'],
['escape [URL]',
[simple, [['this_url', simple]]],
simple + '?this_url=http%3A%2F%2Fwww.example.com%2F'],
['use dots',
[simple, [['openid.stuff', 'bother']]],
simple + '?openid.stuff=bother'],
['args exist',
[simple + '?stuff=bother', [['ack', 'ack']]],
simple + '?stuff=bother&ack=ack'],
['args exist',
[simple + '?stuff=bother', [['ack', 'ack']]],
simple + '?stuff=bother&ack=ack'],
['args exist [dict]',
[simple + '?stuff=bother', {'ack' => 'ack'}],
simple + '?stuff=bother&ack=ack'],
['args exist [dict 2]',
[simple + '?stuff=bother', {'ack' => 'ack', 'zebra' => 'lion'}],
simple + '?stuff=bother&ack=ack&zebra=lion'],
['three args [dict]',
[simple, {'stuff' => 'bother', 'ack' => 'ack', 'zebra' => 'lion'}],
simple + '?ack=ack&stuff=bother&zebra=lion'],
['three args [list]',
[simple, [['stuff', 'bother'], ['ack', 'ack'], ['zebra', 'lion']]],
simple + '?stuff=bother&ack=ack&zebra=lion'],
]
cases.each { |name, args, expected|
url, pairs = args
actual = Util.append_args(url, pairs)
msg = "[#{name}] Expected: #{expected}, actual: #{actual}"
assert_equal(expected, actual, msg)
}
end
def test_parse_query
assert_equal({'foo'=>'bar'}, Util.parse_query('foo=bar'))
end
end
end
|