146 lines
3.9 KiB
Ruby
146 lines
3.9 KiB
Ruby
# 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
|