forked from pelle/ruby-openid
-
Notifications
You must be signed in to change notification settings - Fork 1
/
testutil.rb
127 lines (112 loc) · 2.98 KB
/
testutil.rb
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
require "pathname"
module OpenID
module TestDataMixin
TESTS_DIR = Pathname.new(__FILE__).dirname
TEST_DATA_DIR = Pathname.new('data')
def read_data_file(filename, lines=true, data_dir=TEST_DATA_DIR)
fname = TESTS_DIR.join(data_dir, filename)
if lines
fname.readlines
else
fname.read
end
end
end
module FetcherMixin
def with_fetcher(fetcher)
original_fetcher = OpenID.fetcher
begin
OpenID.fetcher = fetcher
return yield
ensure
OpenID.fetcher = original_fetcher
end
end
end
module Const
def const(symbol, value)
(class << self;self;end).instance_eval do
define_method(symbol) { value }
end
end
end
class MockResponse
attr_reader :code, :body
def initialize(code, body)
@code = code.to_s
@body = body
end
end
module ProtocolErrorMixin
def assert_protocol_error(str_prefix)
begin
result = yield
rescue ProtocolError => why
message = "Expected prefix #{str_prefix.inspect}, got "\
"#{why.message.inspect}"
assert(why.message.starts_with?(str_prefix), message)
else
fail("Expected ProtocolError. Got #{result.inspect}")
end
end
end
module OverrideMethodMixin
def with_method_overridden(method_name, proc)
original = method(method_name)
begin
# TODO: find a combination of undef calls which prevent the warning
verbose, $VERBOSE = $VERBOSE, false
define_method(method_name, proc)
module_function(method_name)
$VERBOSE = verbose
yield
ensure
if original.respond_to? :owner
original.owner.send(:undef_method, method_name)
original.owner.send :define_method, method_name, original
else
define_method(method_name, original)
module_function(method_name)
end
end
end
end
# To use:
# > x = Object.new
# > x.extend(InstanceDefExtension)
# > x.instance_def(:monkeys) do
# > "bananas"
# > end
# > x.monkeys
#
module InstanceDefExtension
def instance_def(method_name, &proc)
(class << self;self;end).instance_eval do
# TODO: find a combination of undef calls which prevent the warning
verbose, $VERBOSE = $VERBOSE, false
define_method(method_name, proc)
$VERBOSE = verbose
end
end
end
GOODSIG = '[A Good Signature]'
class GoodAssoc
attr_accessor :handle, :expires_in
def initialize(handle='-blah-')
@handle = handle
@expires_in = 3600
end
def check_message_signature(msg)
msg.get_arg(OPENID_NS, 'sig') == GOODSIG
end
end
class HTTPResponse
def self._from_raw_data(status, body="", headers={}, final_url=nil)
resp = Net::HTTPResponse.new('1.1', status.to_s, 'NONE')
me = self._from_net_response(resp, final_url)
me.initialize_http_header headers
me.body = body
return me
end
end
end