ruby-openid 1.1.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. data/INSTALL +0 -9
  2. data/README +21 -22
  3. data/UPGRADE +117 -0
  4. data/admin/runtests.rb +36 -0
  5. data/examples/README +13 -21
  6. data/examples/active_record_openid_store/README +8 -3
  7. data/examples/active_record_openid_store/XXX_add_open_id_store_to_db.rb +4 -8
  8. data/examples/active_record_openid_store/XXX_upgrade_open_id_store.rb +26 -0
  9. data/examples/active_record_openid_store/lib/association.rb +2 -0
  10. data/examples/active_record_openid_store/lib/openid_ar_store.rb +22 -47
  11. data/examples/active_record_openid_store/test/store_test.rb +78 -48
  12. data/examples/discover +46 -0
  13. data/examples/{rails_server → rails_openid}/README +0 -0
  14. data/examples/{rails_server → rails_openid}/Rakefile +0 -0
  15. data/examples/{rails_server → rails_openid}/app/controllers/application.rb +0 -0
  16. data/examples/rails_openid/app/controllers/consumer_controller.rb +115 -0
  17. data/examples/{rails_server → rails_openid}/app/controllers/login_controller.rb +10 -2
  18. data/examples/rails_openid/app/controllers/server_controller.rb +265 -0
  19. data/examples/{rails_server → rails_openid}/app/helpers/application_helper.rb +0 -0
  20. data/examples/{rails_server → rails_openid}/app/helpers/login_helper.rb +0 -0
  21. data/examples/{rails_server → rails_openid}/app/helpers/server_helper.rb +0 -0
  22. data/examples/rails_openid/app/views/consumer/index.rhtml +81 -0
  23. data/examples/rails_openid/app/views/consumer/start.rhtml +8 -0
  24. data/examples/{rails_server → rails_openid}/app/views/layouts/server.rhtml +0 -0
  25. data/examples/{rails_server → rails_openid}/app/views/login/index.rhtml +1 -1
  26. data/examples/rails_openid/app/views/server/decide.rhtml +26 -0
  27. data/examples/{rails_server → rails_openid}/config/boot.rb +0 -0
  28. data/examples/{rails_server → rails_openid}/config/database.yml +0 -0
  29. data/examples/{rails_server → rails_openid}/config/environment.rb +0 -0
  30. data/examples/{rails_server → rails_openid}/config/environments/development.rb +0 -0
  31. data/examples/{rails_server → rails_openid}/config/environments/production.rb +0 -0
  32. data/examples/{rails_server → rails_openid}/config/environments/test.rb +0 -0
  33. data/examples/{rails_server → rails_openid}/config/routes.rb +2 -1
  34. data/examples/{rails_server → rails_openid}/doc/README_FOR_APP +0 -0
  35. data/examples/{rails_server → rails_openid}/public/404.html +0 -0
  36. data/examples/{rails_server → rails_openid}/public/500.html +0 -0
  37. data/examples/{rails_server → rails_openid}/public/dispatch.cgi +0 -0
  38. data/examples/{rails_server → rails_openid}/public/dispatch.fcgi +0 -0
  39. data/examples/{rails_server → rails_openid}/public/dispatch.rb +0 -0
  40. data/examples/{rails_server → rails_openid}/public/favicon.ico +0 -0
  41. data/examples/rails_openid/public/images/openid_login_bg.gif +0 -0
  42. data/examples/{rails_server → rails_openid}/public/javascripts/controls.js +0 -0
  43. data/examples/{rails_server → rails_openid}/public/javascripts/dragdrop.js +0 -0
  44. data/examples/{rails_server → rails_openid}/public/javascripts/effects.js +0 -0
  45. data/examples/{rails_server → rails_openid}/public/javascripts/prototype.js +0 -0
  46. data/examples/{rails_server → rails_openid}/public/robots.txt +0 -0
  47. data/examples/{rails_server → rails_openid}/script/about +0 -0
  48. data/examples/{rails_server → rails_openid}/script/breakpointer +0 -0
  49. data/examples/{rails_server → rails_openid}/script/console +0 -0
  50. data/examples/{rails_server → rails_openid}/script/destroy +0 -0
  51. data/examples/{rails_server → rails_openid}/script/generate +0 -0
  52. data/examples/{rails_server → rails_openid}/script/performance/benchmarker +0 -0
  53. data/examples/{rails_server → rails_openid}/script/performance/profiler +0 -0
  54. data/examples/{rails_server → rails_openid}/script/plugin +0 -0
  55. data/examples/{rails_server → rails_openid}/script/process/reaper +0 -0
  56. data/examples/{rails_server → rails_openid}/script/process/spawner +0 -0
  57. data/examples/{rails_server → rails_openid}/script/process/spinner +0 -0
  58. data/examples/{rails_server → rails_openid}/script/runner +0 -0
  59. data/examples/{rails_server → rails_openid}/script/server +0 -0
  60. data/examples/{rails_server → rails_openid}/test/functional/login_controller_test.rb +0 -0
  61. data/examples/{rails_server → rails_openid}/test/functional/server_controller_test.rb +0 -0
  62. data/examples/{rails_server → rails_openid}/test/test_helper.rb +0 -0
  63. data/lib/{hmac.rb → hmac/hmac.rb} +0 -0
  64. data/lib/{hmac-sha1.rb → hmac/sha1.rb} +1 -1
  65. data/lib/{hmac-sha2.rb → hmac/sha2.rb} +1 -1
  66. data/lib/openid/association.rb +213 -73
  67. data/lib/openid/consumer/associationmanager.rb +338 -0
  68. data/lib/openid/consumer/checkid_request.rb +175 -0
  69. data/lib/openid/consumer/discovery.rb +480 -0
  70. data/lib/openid/consumer/discovery_manager.rb +123 -0
  71. data/lib/openid/consumer/html_parse.rb +136 -0
  72. data/lib/openid/consumer/idres.rb +525 -0
  73. data/lib/openid/consumer/responses.rb +133 -0
  74. data/lib/openid/consumer.rb +280 -807
  75. data/lib/openid/cryptutil.rb +85 -0
  76. data/lib/openid/dh.rb +60 -23
  77. data/lib/openid/extension.rb +31 -0
  78. data/lib/openid/extensions/ax.rb +506 -0
  79. data/lib/openid/extensions/pape.rb +182 -0
  80. data/lib/openid/extensions/sreg.rb +275 -0
  81. data/lib/openid/extras.rb +11 -0
  82. data/lib/openid/fetchers.rb +132 -93
  83. data/lib/openid/kvform.rb +133 -0
  84. data/lib/openid/kvpost.rb +56 -0
  85. data/lib/openid/message.rb +534 -0
  86. data/lib/openid/protocolerror.rb +6 -0
  87. data/lib/openid/server.rb +1215 -666
  88. data/lib/openid/store/filesystem.rb +271 -0
  89. data/lib/openid/store/interface.rb +75 -0
  90. data/lib/openid/store/memory.rb +84 -0
  91. data/lib/openid/store/nonce.rb +68 -0
  92. data/lib/openid/trustroot.rb +314 -87
  93. data/lib/openid/urinorm.rb +37 -34
  94. data/lib/openid/util.rb +42 -220
  95. data/lib/openid/yadis/accept.rb +148 -0
  96. data/lib/openid/yadis/constants.rb +21 -0
  97. data/lib/openid/yadis/discovery.rb +153 -0
  98. data/lib/openid/yadis/filters.rb +205 -0
  99. data/lib/openid/{htmltokenizer.rb → yadis/htmltokenizer.rb} +1 -54
  100. data/lib/openid/yadis/parsehtml.rb +36 -0
  101. data/lib/openid/yadis/services.rb +42 -0
  102. data/lib/openid/yadis/xrds.rb +171 -0
  103. data/lib/openid/yadis/xri.rb +90 -0
  104. data/lib/openid/yadis/xrires.rb +106 -0
  105. data/lib/openid.rb +1 -4
  106. data/test/data/accept.txt +124 -0
  107. data/test/data/dh.txt +29 -0
  108. data/test/data/example-xrds.xml +14 -0
  109. data/test/data/linkparse.txt +587 -0
  110. data/test/data/n2b64 +650 -0
  111. data/test/data/test1-discover.txt +137 -0
  112. data/test/data/test1-parsehtml.txt +128 -0
  113. data/test/data/test_discover/openid.html +11 -0
  114. data/test/data/test_discover/openid2.html +11 -0
  115. data/test/data/test_discover/openid2_xrds.xml +12 -0
  116. data/test/data/test_discover/openid2_xrds_no_local_id.xml +11 -0
  117. data/test/data/test_discover/openid_1_and_2.html +11 -0
  118. data/test/data/test_discover/openid_1_and_2_xrds.xml +16 -0
  119. data/test/data/test_discover/openid_1_and_2_xrds_bad_delegate.xml +17 -0
  120. data/test/data/test_discover/openid_and_yadis.html +12 -0
  121. data/test/data/test_discover/openid_no_delegate.html +10 -0
  122. data/test/data/test_discover/yadis_0entries.xml +12 -0
  123. data/test/data/test_discover/yadis_2_bad_local_id.xml +15 -0
  124. data/test/data/test_discover/yadis_2entries_delegate.xml +22 -0
  125. data/test/data/test_discover/yadis_2entries_idp.xml +21 -0
  126. data/test/data/test_discover/yadis_another_delegate.xml +14 -0
  127. data/test/data/test_discover/yadis_idp.xml +12 -0
  128. data/test/data/test_discover/yadis_idp_delegate.xml +13 -0
  129. data/test/data/test_discover/yadis_no_delegate.xml +11 -0
  130. data/test/data/test_xrds/=j3h.2007.11.14.xrds +25 -0
  131. data/test/data/test_xrds/README +12 -0
  132. data/test/data/test_xrds/delegated-20060809-r1.xrds +34 -0
  133. data/test/data/test_xrds/delegated-20060809-r2.xrds +34 -0
  134. data/test/data/test_xrds/delegated-20060809.xrds +34 -0
  135. data/test/data/test_xrds/no-xrd.xml +7 -0
  136. data/test/data/test_xrds/not-xrds.xml +2 -0
  137. data/test/data/test_xrds/prefixsometimes.xrds +34 -0
  138. data/test/data/test_xrds/ref.xrds +109 -0
  139. data/test/data/test_xrds/sometimesprefix.xrds +34 -0
  140. data/test/data/test_xrds/spoof1.xrds +25 -0
  141. data/test/data/test_xrds/spoof2.xrds +25 -0
  142. data/test/data/test_xrds/spoof3.xrds +37 -0
  143. data/test/data/test_xrds/status222.xrds +9 -0
  144. data/test/data/test_xrds/valid-populated-xrds.xml +39 -0
  145. data/test/data/trustroot.txt +147 -0
  146. data/test/discoverdata.rb +131 -0
  147. data/test/test_accept.rb +170 -0
  148. data/test/test_association.rb +266 -0
  149. data/test/test_associationmanager.rb +899 -0
  150. data/test/test_ax.rb +587 -0
  151. data/test/test_checkid_request.rb +297 -0
  152. data/test/test_consumer.rb +257 -0
  153. data/test/test_cryptutil.rb +117 -0
  154. data/test/test_dh.rb +86 -0
  155. data/test/test_discover.rb +772 -0
  156. data/test/test_discovery_manager.rb +262 -0
  157. data/test/test_extras.rb +35 -0
  158. data/test/test_fetchers.rb +472 -0
  159. data/test/test_filters.rb +270 -0
  160. data/test/test_idres.rb +816 -0
  161. data/test/test_kvform.rb +165 -0
  162. data/test/test_kvpost.rb +65 -0
  163. data/test/test_linkparse.rb +101 -0
  164. data/test/test_message.rb +1058 -0
  165. data/test/test_nonce.rb +89 -0
  166. data/test/test_openid_yadis.rb +178 -0
  167. data/test/test_pape.rb +233 -0
  168. data/test/test_parsehtml.rb +80 -0
  169. data/test/test_responses.rb +63 -0
  170. data/test/test_server.rb +2270 -0
  171. data/test/test_sreg.rb +479 -0
  172. data/test/test_stores.rb +269 -0
  173. data/test/test_trustroot.rb +112 -0
  174. data/test/{urinorm.rb → test_urinorm.rb} +6 -3
  175. data/test/test_util.rb +144 -0
  176. data/test/test_xrds.rb +160 -0
  177. data/test/test_xri.rb +48 -0
  178. data/test/test_xrires.rb +63 -0
  179. data/test/test_yadis_discovery.rb +207 -0
  180. data/test/testutil.rb +116 -0
  181. data/test/util.rb +47 -50
  182. metadata +233 -143
  183. data/examples/consumer.rb +0 -290
  184. data/examples/rails_openid_login_generator/openid_login_generator-0.1.gem +0 -0
  185. data/examples/rails_server/app/controllers/server_controller.rb +0 -190
  186. data/examples/rails_server/app/views/server/decide.rhtml +0 -11
  187. data/examples/rails_server/public/images/rails.png +0 -0
  188. data/lib/hmac-md5.rb +0 -11
  189. data/lib/hmac-rmd160.rb +0 -11
  190. data/lib/openid/discovery.rb +0 -122
  191. data/lib/openid/filestore.rb +0 -315
  192. data/lib/openid/parse.rb +0 -23
  193. data/lib/openid/service.rb +0 -147
  194. data/lib/openid/stores.rb +0 -178
  195. data/test/assoc.rb +0 -38
  196. data/test/consumer.rb +0 -376
  197. data/test/data/brian.xrds +0 -16
  198. data/test/data/brianellin.mylid.xrds +0 -42
  199. data/test/dh.rb +0 -20
  200. data/test/extensions.rb +0 -30
  201. data/test/linkparse.rb +0 -305
  202. data/test/runtests.rb +0 -22
  203. data/test/server2.rb +0 -1053
  204. data/test/service.rb +0 -47
  205. data/test/storetestcase.rb +0 -172
  206. data/test/teststore.rb +0 -47
  207. data/test/trustroot.rb +0 -117
@@ -0,0 +1,1058 @@
1
+ # last synced with Python openid.test.test_message on 6/29/2007.
2
+
3
+ require 'test/unit'
4
+ require 'util'
5
+ require 'openid/message'
6
+
7
+ require 'rexml/document'
8
+
9
+ module OpenID
10
+ module GetArgsMixin
11
+
12
+ # Tests a standard set of behaviors of Message.get_arg with
13
+ # variations on handling defaults.
14
+ def get_arg_tests(ns, key, expected=nil)
15
+ assert_equal(expected, @m.get_arg(ns, key))
16
+
17
+ if expected.nil?
18
+ assert_equal(@m.get_arg(ns, key, :a_default), :a_default)
19
+ assert_raise(Message::KeyNotFound) { @m.get_arg(ns, key, NO_DEFAULT) }
20
+ else
21
+ assert_equal(@m.get_arg(ns, key, :a_default), expected)
22
+ assert_equal(@m.get_arg(ns, key, NO_DEFAULT), expected)
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ class EmptyMessageTestCase < Test::Unit::TestCase
30
+ include GetArgsMixin
31
+
32
+ def setup
33
+ @m = Message.new
34
+ end
35
+
36
+ def test_get_aliased_arg_no_default
37
+ assert_raises(Message::KeyNotFound) do
38
+ @m.get_aliased_arg('ns.pork', NO_DEFAULT)
39
+ end
40
+
41
+ ns_uri = "urn:pork"
42
+ @m.namespaces.add_alias(ns_uri, 'pork_alias')
43
+
44
+ # Should return ns_uri.
45
+ assert_equal(ns_uri, @m.get_aliased_arg('ns.pork_alias', NO_DEFAULT))
46
+ end
47
+
48
+ def test_to_post_args
49
+ assert_equal({}, @m.to_post_args)
50
+ end
51
+
52
+ def test_to_args
53
+ assert_equal({}, @m.to_args)
54
+ end
55
+
56
+ def test_to_kvform
57
+ assert_equal('', @m.to_kvform)
58
+ end
59
+
60
+ def test_from_kvform
61
+ kvform = "foo:bar\none:two\n"
62
+ args = {'foo' => 'bar', 'one' => 'two'}
63
+ expected_result = Message.from_openid_args(args)
64
+
65
+ assert_equal(expected_result, Message.from_kvform(kvform))
66
+ end
67
+
68
+ def test_to_url_encoded
69
+ assert_equal('', @m.to_url_encoded)
70
+ end
71
+
72
+ def test_to_url
73
+ base_url = 'http://base.url/'
74
+ assert_equal(base_url, @m.to_url(base_url))
75
+ end
76
+
77
+ def test_get_openid
78
+ assert_equal(nil, @m.get_openid_namespace)
79
+ end
80
+
81
+ def test_get_key_openid
82
+ assert_raise(UndefinedOpenIDNamespace) {
83
+ @m.get_key(OPENID_NS, nil)
84
+ }
85
+ end
86
+
87
+ def test_get_key_bare
88
+ assert_equal('foo', @m.get_key(BARE_NS, 'foo'))
89
+ end
90
+
91
+ def test_get_key_ns1
92
+ assert_equal(nil, @m.get_key(OPENID1_NS, 'foo'))
93
+ end
94
+
95
+ def test_get_key_ns2
96
+ assert_equal(nil, @m.get_key(OPENID2_NS, 'foo'))
97
+ end
98
+
99
+ def test_get_key_ns3
100
+ assert_equal(nil, @m.get_key('urn:something-special', 'foo'))
101
+ end
102
+
103
+ def test_has_key
104
+ assert_raise(UndefinedOpenIDNamespace) {
105
+ @m.has_key?(OPENID_NS, 'foo')
106
+ }
107
+ end
108
+
109
+ def test_has_key_bare
110
+ assert_equal(false, @m.has_key?(BARE_NS, 'foo'))
111
+ end
112
+
113
+ def test_has_key_ns1
114
+ assert_equal(false, @m.has_key?(OPENID1_NS, 'foo'))
115
+ end
116
+
117
+ def test_has_key_ns2
118
+ assert_equal(false, @m.has_key?(OPENID2_NS, 'foo'))
119
+ end
120
+
121
+ def test_has_key_ns3
122
+ assert_equal(false, @m.has_key?('urn:xxx', 'foo'))
123
+ end
124
+
125
+ def test_get_arg
126
+ assert_raise(UndefinedOpenIDNamespace) {
127
+ @m.get_args(OPENID_NS)
128
+ }
129
+ end
130
+
131
+ def test_get_arg_bare
132
+ get_arg_tests(ns=BARE_NS, key='foo')
133
+ end
134
+
135
+ def test_get_arg_ns1
136
+ get_arg_tests(ns=OPENID1_NS, key='foo')
137
+ end
138
+
139
+ def test_get_arg_ns2
140
+ get_arg_tests(ns=OPENID2_NS, key='foo')
141
+ end
142
+
143
+ def test_get_arg_ns3
144
+ get_arg_tests(ns='urn:nothing-significant', key='foo')
145
+ end
146
+
147
+ def test_get_args
148
+ assert_raise(UndefinedOpenIDNamespace) {
149
+ @m.get_args(OPENID_NS)
150
+ }
151
+ end
152
+
153
+ def test_get_args_bare
154
+ assert_equal({}, @m.get_args(BARE_NS))
155
+ end
156
+
157
+ def test_get_args_ns1
158
+ assert_equal({}, @m.get_args(OPENID1_NS))
159
+ end
160
+
161
+ def test_get_args_ns2
162
+ assert_equal({}, @m.get_args(OPENID2_NS))
163
+ end
164
+
165
+ def test_get_args_ns3
166
+ assert_equal({}, @m.get_args('urn:xxx'))
167
+ end
168
+
169
+ def test_update_args
170
+ assert_raise(UndefinedOpenIDNamespace) {
171
+ @m.update_args(OPENID_NS, {'does not'=>'matter'})
172
+ }
173
+ end
174
+
175
+ def _test_update_args_ns(ns)
176
+ updates = {
177
+ 'camper van beethoven' => 'david l',
178
+ 'magnolia electric, co' => 'jason m'
179
+ }
180
+ assert_equal({}, @m.get_args(ns))
181
+ @m.update_args(ns, updates)
182
+ assert_equal(updates, @m.get_args(ns))
183
+ end
184
+
185
+ def test_update_args_bare
186
+ _test_update_args_ns(BARE_NS)
187
+ end
188
+ def test_update_args_ns1
189
+ _test_update_args_ns(OPENID1_NS)
190
+ end
191
+ def test_update_args_ns2
192
+ _test_update_args_ns(OPENID2_NS)
193
+ end
194
+ def test_update_args_ns3
195
+ _test_update_args_ns('urn:xxx')
196
+ end
197
+
198
+ def test_set_arg
199
+ assert_raise(UndefinedOpenIDNamespace) {
200
+ @m.set_arg(OPENID_NS,'does not','matter')
201
+ }
202
+ end
203
+
204
+ def _test_set_arg_ns(ns)
205
+ key = 'Camper Van Beethoven'
206
+ value = 'David Lowery'
207
+ assert_equal(nil, @m.get_arg(ns, key))
208
+ @m.set_arg(ns, key, value)
209
+ assert_equal(value, @m.get_arg(ns, key))
210
+ end
211
+
212
+ def test_set_arg_bare
213
+ _test_set_arg_ns(BARE_NS)
214
+ end
215
+ def test_set_arg_ns1
216
+ _test_set_arg_ns(OPENID1_NS)
217
+ end
218
+ def test_set_arg_ns2
219
+ _test_set_arg_ns(OPENID2_NS)
220
+ end
221
+ def test_set_arg_ns3
222
+ _test_set_arg_ns('urn:xxx')
223
+ end
224
+
225
+ def test_del_arg
226
+ assert_raise(UndefinedOpenIDNamespace) {
227
+ @m.set_arg(OPENID_NS, 'does not', 'matter')
228
+ }
229
+ end
230
+
231
+ def _test_del_arg_ns(ns)
232
+ key = 'Fleeting Joys'
233
+ assert_equal(nil, @m.del_arg(ns, key))
234
+ end
235
+
236
+ def test_del_arg_bare
237
+ _test_del_arg_ns(BARE_NS)
238
+ end
239
+ def test_del_arg_ns1
240
+ _test_del_arg_ns(OPENID1_NS)
241
+ end
242
+ def test_del_arg_ns2
243
+ _test_del_arg_ns(OPENID2_NS)
244
+ end
245
+ def test_del_arg_ns3
246
+ _test_del_arg_ns('urn:xxx')
247
+ end
248
+
249
+ def test_isOpenID1
250
+ assert_equal(false, @m.is_openid1)
251
+ end
252
+
253
+ def test_isOpenID2
254
+ assert_equal(false, @m.is_openid2)
255
+ end
256
+
257
+ def test_set_openid_namespace
258
+ assert_raise(ArgumentError) {
259
+ @m.set_openid_namespace('http://invalid/')
260
+ }
261
+ end
262
+ end
263
+
264
+ class OpenID1MessageTest < Test::Unit::TestCase
265
+ include GetArgsMixin
266
+
267
+ def setup
268
+ @m = Message.from_post_args({'openid.mode' => 'error',
269
+ 'openid.error' => 'unit test'})
270
+ end
271
+
272
+ def test_has_openid_ns
273
+ assert_equal(OPENID1_NS, @m.get_openid_namespace)
274
+ assert_equal(OPENID1_NS,
275
+ @m.namespaces.get_namespace_uri(NULL_NAMESPACE))
276
+ end
277
+
278
+ def test_get_aliased_arg
279
+ assert_equal('error', @m.get_aliased_arg('mode'))
280
+ end
281
+
282
+ def test_get_aliased_arg_ns
283
+ assert_equal(OPENID1_NS, @m.get_aliased_arg('ns'))
284
+ end
285
+
286
+ def test_get_aliased_arg_with_ns
287
+ @m = Message.from_post_args(
288
+ {'openid.mode' => 'error',
289
+ 'openid.error' => 'unit test',
290
+ 'openid.ns.invalid' => 'http://invalid/',
291
+ 'openid.invalid.stuff' => 'things',
292
+ 'openid.invalid.stuff.blinky' => 'powerplant',
293
+ })
294
+ assert_equal('http://invalid/', @m.get_aliased_arg('ns.invalid'))
295
+ assert_equal('things', @m.get_aliased_arg('invalid.stuff'))
296
+ assert_equal('powerplant', @m.get_aliased_arg('invalid.stuff.blinky'))
297
+ end
298
+
299
+ def test_get_aliased_arg_with_ns_default
300
+ @m = Message.from_post_args({})
301
+ assert_equal('monkeys!', @m.get_aliased_arg('ns.invalid',
302
+ default="monkeys!"))
303
+ end
304
+
305
+ def test_to_post_args
306
+ assert_equal({'openid.mode' => 'error',
307
+ 'openid.error' => 'unit test'},
308
+ @m.to_post_args)
309
+ end
310
+
311
+ def test_to_post_args_ns
312
+ invalid_ns = 'http://invalid/'
313
+ @m.namespaces.add_alias(invalid_ns, 'foos')
314
+ @m.set_arg(invalid_ns, 'ball', 'awesome')
315
+ @m.set_arg(BARE_NS, 'xey', 'value')
316
+ assert_equal({'openid.mode' => 'error',
317
+ 'openid.error' => 'unit test',
318
+ 'openid.foos.ball' => 'awesome',
319
+ 'xey' => 'value',
320
+ }, @m.to_post_args)
321
+ end
322
+
323
+ def test_to_args
324
+ assert_equal({'mode' => 'error',
325
+ 'error' => 'unit test'},
326
+ @m.to_args)
327
+ end
328
+
329
+ def test_to_kvform
330
+ assert_equal("error:unit test\nmode:error\n",
331
+ @m.to_kvform)
332
+ end
333
+
334
+ def test_to_url_encoded
335
+ assert_equal('openid.error=unit+test&openid.mode=error',
336
+ @m.to_url_encoded)
337
+ end
338
+
339
+ def test_to_url
340
+ base_url = 'http://base.url/'
341
+ actual = @m.to_url(base_url)
342
+ actual_base = actual[0...base_url.length]
343
+ assert_equal(base_url, actual_base)
344
+ assert_equal('?', actual[base_url.length].chr)
345
+ query = actual[base_url.length+1..-1]
346
+ assert_equal({'openid.mode'=>['error'],'openid.error'=>['unit test']},
347
+ CGI.parse(query))
348
+ end
349
+
350
+ def test_get_openid
351
+ assert_equal(OPENID1_NS, @m.get_openid_namespace)
352
+ end
353
+
354
+ def test_get_key_openid
355
+ assert_equal('openid.mode', @m.get_key(OPENID_NS, 'mode'))
356
+ end
357
+
358
+ def test_get_key_bare
359
+ assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
360
+ end
361
+
362
+ def test_get_key_ns1
363
+ assert_equal('openid.mode', @m.get_key(OPENID1_NS, 'mode'))
364
+ end
365
+
366
+ def test_get_key_ns2
367
+ assert_equal(nil, @m.get_key(OPENID2_NS, 'mode'))
368
+ end
369
+
370
+ def test_get_key_ns3
371
+ assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
372
+ end
373
+
374
+ def test_has_key
375
+ assert_equal(true, @m.has_key?(OPENID_NS, 'mode'))
376
+ end
377
+ def test_has_key_bare
378
+ assert_equal(false, @m.has_key?(BARE_NS, 'mode'))
379
+ end
380
+ def test_has_key_ns1
381
+ assert_equal(true, @m.has_key?(OPENID1_NS, 'mode'))
382
+ end
383
+ def test_has_key_ns2
384
+ assert_equal(false, @m.has_key?(OPENID2_NS, 'mode'))
385
+ end
386
+ def test_has_key_ns3
387
+ assert_equal(false, @m.has_key?('urn:xxx', 'mode'))
388
+ end
389
+
390
+ def test_get_arg
391
+ assert_equal('error', @m.get_arg(OPENID_NS, 'mode'))
392
+ end
393
+
394
+ def test_get_arg_bare
395
+ get_arg_tests(ns=BARE_NS, key='mode')
396
+ end
397
+
398
+ def test_get_arg_ns
399
+ get_arg_tests(ns=OPENID_NS, key='mode', expected='error')
400
+ end
401
+
402
+ def test_get_arg_ns1
403
+ get_arg_tests(ns=OPENID1_NS, key='mode', expected='error')
404
+ end
405
+
406
+ def test_get_arg_ns2
407
+ get_arg_tests(ns=OPENID2_NS, key='mode')
408
+ end
409
+
410
+ def test_get_arg_ns3
411
+ get_arg_tests(ns='urn:nothing-significant', key='mode')
412
+ end
413
+
414
+ def test_get_args
415
+ assert_equal({'mode'=>'error','error'=>'unit test'},
416
+ @m.get_args(OPENID_NS))
417
+ end
418
+ def test_get_args_bare
419
+ assert_equal({}, @m.get_args(BARE_NS))
420
+ end
421
+ def test_get_args_ns1
422
+ assert_equal({'mode'=>'error','error'=>'unit test'},
423
+ @m.get_args(OPENID1_NS))
424
+ end
425
+ def test_get_args_ns2
426
+ assert_equal({}, @m.get_args(OPENID2_NS))
427
+ end
428
+ def test_get_args_ns3
429
+ assert_equal({}, @m.get_args('urn:xxx'))
430
+ end
431
+
432
+ def _test_update_args_ns(ns, before=nil)
433
+ if before.nil?
434
+ before = {}
435
+ end
436
+ update_args = {
437
+ 'Camper van Beethoven'=>'David Lowery',
438
+ 'Magnolia Electric Co.'=>'Jason Molina'
439
+ }
440
+ assert_equal(before, @m.get_args(ns))
441
+ @m.update_args(ns, update_args)
442
+ after = before.dup
443
+ after.update(update_args)
444
+ assert_equal(after, @m.get_args(ns))
445
+ end
446
+
447
+ def test_update_args
448
+ _test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
449
+ end
450
+ def test_update_args_bare
451
+ _test_update_args_ns(BARE_NS)
452
+ end
453
+ def test_update_args_ns1
454
+ _test_update_args_ns(OPENID1_NS, {'mode'=>'error','error'=>'unit test'})
455
+ end
456
+ def test_update_args_ns2
457
+ _test_update_args_ns(OPENID2_NS)
458
+ end
459
+ def test_update_args_ns3
460
+ _test_update_args_ns('urn:xxx')
461
+ end
462
+
463
+ def _test_set_arg_ns(ns)
464
+ key = 'awesometown'
465
+ value = 'funny'
466
+ assert_equal(nil, @m.get_arg(ns,key))
467
+ @m.set_arg(ns, key, value)
468
+ assert_equal(value, @m.get_arg(ns,key))
469
+ end
470
+
471
+ def test_set_arg; _test_set_arg_ns(OPENID_NS); end
472
+ def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
473
+ def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
474
+ def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
475
+ def test_set_arg_ns3; _test_set_arg_ns('urn:xxx'); end
476
+
477
+ def _test_del_arg_ns(ns)
478
+ key = 'marry an'
479
+ value = 'ice cream sandwich'
480
+ @m.set_arg(ns, key, value)
481
+ assert_equal(value, @m.get_arg(ns,key))
482
+ @m.del_arg(ns,key)
483
+ assert_equal(nil, @m.get_arg(ns,key))
484
+ end
485
+
486
+ def test_del_arg; _test_del_arg_ns(OPENID_NS); end
487
+ def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
488
+ def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
489
+ def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
490
+ def test_del_arg_ns3; _test_del_arg_ns('urn:yyy'); end
491
+
492
+ def test_isOpenID1
493
+ assert_equal(true, @m.is_openid1)
494
+ end
495
+
496
+ def test_isOpenID2
497
+ assert_equal(false, @m.is_openid2)
498
+ end
499
+
500
+ def test_equal
501
+ assert_equal(Message.new, Message.new)
502
+ assert_not_equal(Message.new, nil)
503
+ end
504
+
505
+ def test_from_openid_args_undefined_ns
506
+ expected = 'almost.complete'
507
+ msg = Message.from_openid_args({'coverage.is' => expected})
508
+ actual = msg.get_arg(OPENID1_NS, 'coverage.is')
509
+ assert_equal(expected, actual)
510
+ end
511
+
512
+ # XXX: we need to implement the KVForm module before we can fix this
513
+ def TODOtest_from_kvform
514
+ kv = 'foos:ball\n'
515
+ msg = Message.from_kvform(kv)
516
+ assert_equal(msg.get(OPENID1_NS, 'foos'), 'ball')
517
+ end
518
+
519
+ def test_initialize_sets_namespace
520
+ msg = Message.new(OPENID1_NS)
521
+ assert_equal(OPENID1_NS, msg.get_openid_namespace)
522
+ end
523
+ end
524
+
525
+ class OpenID1ExplicitMessageTest < OpenID1MessageTest
526
+ # XXX - check to make sure the test suite will get built the way this
527
+ # expects.
528
+ def setup
529
+ @m = Message.from_post_args({'openid.mode'=>'error',
530
+ 'openid.error'=>'unit test',
531
+ 'openid.ns'=>OPENID1_NS})
532
+ end
533
+ end
534
+
535
+ class OpenID2MessageTest < Test::Unit::TestCase
536
+ include TestUtil
537
+
538
+ def setup
539
+ @m = Message.from_post_args({'openid.mode'=>'error',
540
+ 'openid.error'=>'unit test',
541
+ 'openid.ns'=>OPENID2_NS})
542
+ @m.set_arg(BARE_NS, 'xey', 'value')
543
+ end
544
+
545
+ def test_to_args_fails
546
+ assert_raises(ArgumentError) {
547
+ @m.to_args
548
+ }
549
+ end
550
+
551
+ def test_fix_ns_non_string
552
+ # Using has_key to invoke _fix_ns since _fix_ns should be private
553
+ assert_raises(ArgumentError) {
554
+ @m.has_key?(:non_string_namespace, "key")
555
+ }
556
+ end
557
+
558
+ def test_fix_ns_non_uri
559
+ # Using has_key to invoke _fix_ns since _fix_ns should be private
560
+ assert_log_matches(/identifiers SHOULD be URIs/) {
561
+ @m.has_key?("foo", "key")
562
+ }
563
+ end
564
+
565
+ def test_fix_ns_sreg_literal
566
+ # Using has_key to invoke _fix_ns since _fix_ns should be private
567
+ assert_log_matches(/identifiers SHOULD be URIs/, /instead of "sreg"/) {
568
+ @m.has_key?("sreg", "key")
569
+ }
570
+ end
571
+
572
+ def test_copy
573
+ n = @m.copy
574
+ assert_equal(@m, n)
575
+ end
576
+
577
+ def test_to_post_args
578
+ assert_equal({'openid.mode' => 'error',
579
+ 'openid.error' => 'unit test',
580
+ 'openid.ns' => OPENID2_NS,
581
+ 'xey' => 'value',
582
+ }, @m.to_post_args)
583
+ end
584
+
585
+ def test_to_post_args_ns
586
+ invalid_ns = 'http://invalid/'
587
+ @m.namespaces.add_alias(invalid_ns, 'foos')
588
+ @m.set_arg(invalid_ns, 'ball', 'awesome')
589
+ assert_equal({'openid.mode' => 'error',
590
+ 'openid.error' => 'unit test',
591
+ 'openid.ns' => OPENID2_NS,
592
+ 'openid.ns.foos' => invalid_ns,
593
+ 'openid.foos.ball' => 'awesome',
594
+ 'xey' => 'value',
595
+ }, @m.to_post_args)
596
+ end
597
+
598
+ def test_to_args
599
+ @m.del_arg(BARE_NS, 'xey')
600
+ assert_equal({'mode' => 'error',
601
+ 'error' => 'unit test',
602
+ 'ns' => OPENID2_NS},
603
+ @m.to_args)
604
+ end
605
+
606
+ def test_to_kvform
607
+ @m.del_arg(BARE_NS, 'xey')
608
+ assert_equal("error:unit test\nmode:error\nns:#{OPENID2_NS}\n",
609
+ @m.to_kvform)
610
+ end
611
+
612
+ def _test_urlencoded(s)
613
+ expected_list = ["openid.error=unit+test",
614
+ "openid.mode=error",
615
+ "openid.ns=#{CGI.escape(OPENID2_NS)}",
616
+ "xey=value"]
617
+ # Hard to do this with string comparison since the mapping doesn't
618
+ # preserve order.
619
+ encoded_list = s.split('&')
620
+ encoded_list.sort!
621
+ assert_equal(expected_list, encoded_list)
622
+ end
623
+
624
+ def test_to_urlencoded
625
+ _test_urlencoded(@m.to_url_encoded)
626
+ end
627
+
628
+ def test_to_url
629
+ base_url = 'http://base.url/'
630
+ actual = @m.to_url(base_url)
631
+ actual_base = actual[0...base_url.length]
632
+ assert_equal(base_url, actual_base)
633
+ assert_equal('?', actual[base_url.length].chr)
634
+ query = actual[base_url.length+1..-1]
635
+ _test_urlencoded(query)
636
+ end
637
+
638
+ def test_get_openid
639
+ assert_equal(OPENID2_NS, @m.get_openid_namespace)
640
+ end
641
+
642
+ def test_get_key_openid
643
+ assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
644
+ end
645
+
646
+ def test_get_key_bare
647
+ assert_equal('mode', @m.get_key(BARE_NS, 'mode'))
648
+ end
649
+
650
+ def test_get_key_ns1
651
+ assert_equal(nil, @m.get_key(OPENID1_NS, 'mode'))
652
+ end
653
+
654
+ def test_get_key_ns2
655
+ assert_equal('openid.mode', @m.get_key(OPENID2_NS, 'mode'))
656
+ end
657
+
658
+ def test_get_key_ns3
659
+ assert_equal(nil, @m.get_key('urn:xxx', 'mode'))
660
+ end
661
+
662
+ def test_has_key_openid
663
+ assert_equal(true, @m.has_key?(OPENID_NS,'mode'))
664
+ end
665
+
666
+ def test_has_key_bare
667
+ assert_equal(false, @m.has_key?(BARE_NS,'mode'))
668
+ end
669
+
670
+ def test_has_key_ns1
671
+ assert_equal(false, @m.has_key?(OPENID1_NS,'mode'))
672
+ end
673
+
674
+ def test_has_key_ns2
675
+ assert_equal(true, @m.has_key?(OPENID2_NS,'mode'))
676
+ end
677
+
678
+ def test_has_key_ns3
679
+ assert_equal(false, @m.has_key?('urn:xxx','mode'))
680
+ end
681
+
682
+ # XXX - getArgTest
683
+ def test_get_arg_openid
684
+ assert_equal('error', @m.get_arg(OPENID_NS,'mode'))
685
+ end
686
+
687
+ def test_get_arg_bare
688
+ assert_equal(nil, @m.get_arg(BARE_NS,'mode'))
689
+ end
690
+
691
+ def test_get_arg_ns1
692
+ assert_equal(nil, @m.get_arg(OPENID1_NS,'mode'))
693
+ end
694
+
695
+ def test_get_arg_ns2
696
+ assert_equal('error', @m.get_arg(OPENID2_NS,'mode'))
697
+ end
698
+
699
+ def test_get_arg_ns3
700
+ assert_equal(nil, @m.get_arg('urn:bananastand','mode'))
701
+ end
702
+
703
+ def test_get_args_openid
704
+ assert_equal({'mode'=>'error','error'=>'unit test'},
705
+ @m.get_args(OPENID_NS))
706
+ end
707
+
708
+ def test_get_args_bare
709
+ assert_equal({'xey'=>'value'},
710
+ @m.get_args(BARE_NS))
711
+ end
712
+
713
+ def test_get_args_ns1
714
+ assert_equal({},
715
+ @m.get_args(OPENID1_NS))
716
+ end
717
+
718
+ def test_get_args_ns2
719
+ assert_equal({'mode'=>'error','error'=>'unit test'},
720
+ @m.get_args(OPENID2_NS))
721
+ end
722
+
723
+ def test_get_args_ns3
724
+ assert_equal({},
725
+ @m.get_args('urn:loose seal'))
726
+ end
727
+
728
+ def _test_update_args_ns(ns, before=nil)
729
+ before = {} unless before
730
+ update_args = {'aa'=>'bb','cc'=>'dd'}
731
+
732
+ assert_equal(before, @m.get_args(ns))
733
+ @m.update_args(ns, update_args)
734
+ after = before.dup
735
+ after.update(update_args)
736
+ assert_equal(after, @m.get_args(ns))
737
+ end
738
+
739
+ def test_update_args_openid
740
+ _test_update_args_ns(OPENID_NS, {'mode'=>'error','error'=>'unit test'})
741
+ end
742
+
743
+ def test_update_args_bare
744
+ _test_update_args_ns(BARE_NS, {'xey'=>'value'})
745
+ end
746
+
747
+ def test_update_args_ns1
748
+ _test_update_args_ns(OPENID1_NS)
749
+ end
750
+
751
+ def test_update_args_ns2
752
+ _test_update_args_ns(OPENID2_NS, {'mode'=>'error','error'=>'unit test'})
753
+ end
754
+
755
+ def test_update_args_ns3
756
+ _test_update_args_ns('urn:sven')
757
+ end
758
+
759
+ def _test_set_arg_ns(ns)
760
+ key = "logan's"
761
+ value = "run"
762
+ assert_equal(nil, @m.get_arg(ns,key))
763
+ @m.set_arg(ns, key, value)
764
+ assert_equal(value, @m.get_arg(ns,key))
765
+ end
766
+
767
+ def test_set_arg_openid; _test_set_arg_ns(OPENID_NS); end
768
+ def test_set_arg_bare; _test_set_arg_ns(BARE_NS); end
769
+ def test_set_arg_ns1; _test_set_arg_ns(OPENID1_NS); end
770
+ def test_set_arg_ns2; _test_set_arg_ns(OPENID2_NS); end
771
+ def test_set_arg_ns3; _test_set_arg_ns('urn:g'); end
772
+
773
+ def test_bad_alias
774
+ # Make sure dotted aliases and OpenID protocol fields are not allowed
775
+ # as namespace aliases.
776
+
777
+ fields = OPENID_PROTOCOL_FIELDS + ['dotted.alias']
778
+
779
+ fields.each { |f|
780
+ args = {"openid.ns.#{f}" => "blah#{f}",
781
+ "openid.#{f}.foo" => "test#{f}"}
782
+
783
+ # .fromPostArgs covers .fromPostArgs, .fromOpenIDArgs,
784
+ # ._fromOpenIDArgs, and .fromOpenIDArgs (since it calls
785
+ # .fromPostArgs).
786
+ assert_raise(AssertionError) {
787
+ Message.from_post_args(args)
788
+ }
789
+ }
790
+ end
791
+
792
+ def test_from_post_args
793
+ msg = Message.from_post_args({'foos' => 'ball'})
794
+ assert_equal('ball', msg.get_arg(BARE_NS, 'foos'))
795
+ end
796
+
797
+ def _test_del_arg_ns(ns)
798
+ key = 'no'
799
+ value = 'socks'
800
+ assert_equal(nil, @m.get_arg(ns, key))
801
+ @m.set_arg(ns, key, value)
802
+ assert_equal(value, @m.get_arg(ns, key))
803
+ @m.del_arg(ns, key)
804
+ assert_equal(nil, @m.get_arg(ns, key))
805
+ end
806
+
807
+ def test_del_arg_openid; _test_del_arg_ns(OPENID_NS); end
808
+ def test_del_arg_bare; _test_del_arg_ns(BARE_NS); end
809
+ def test_del_arg_ns1; _test_del_arg_ns(OPENID1_NS); end
810
+ def test_del_arg_ns2; _test_del_arg_ns(OPENID2_NS); end
811
+ def test_del_arg_ns3; _test_del_arg_ns('urn:tofu'); end
812
+
813
+ def test_overwrite_extension_arg
814
+ ns = 'urn:unittest_extension'
815
+ key = 'mykey'
816
+ value_1 = 'value_1'
817
+ value_2 = 'value_2'
818
+
819
+ @m.set_arg(ns, key, value_1)
820
+ assert_equal(value_1, @m.get_arg(ns, key))
821
+ @m.set_arg(ns, key, value_2)
822
+ assert_equal(value_2, @m.get_arg(ns, key))
823
+ end
824
+
825
+ def test_argList
826
+ assert_raise(ArgumentError) {
827
+ Message.from_post_args({'arg' => [1, 2, 3]})
828
+ }
829
+ end
830
+
831
+ def test_isOpenID1
832
+ assert_equal(false, @m.is_openid1)
833
+ end
834
+
835
+ def test_isOpenID2
836
+ assert_equal(true, @m.is_openid2)
837
+ end
838
+ end
839
+
840
+ class MessageTest < Test::Unit::TestCase
841
+ def setup
842
+ @postargs = {
843
+ 'openid.ns' => OPENID2_NS,
844
+ 'openid.mode' => 'checkid_setup',
845
+ 'openid.identity' => 'http://bogus.example.invalid:port/',
846
+ 'openid.assoc_handle' => 'FLUB',
847
+ 'openid.return_to' => 'Neverland',
848
+ }
849
+
850
+ @action_url = 'scheme://host:port/path?query'
851
+
852
+ @form_tag_attrs = {
853
+ 'company' => 'janrain',
854
+ 'class' => 'fancyCSS',
855
+ }
856
+
857
+ @submit_text = 'GO!'
858
+
859
+ ### Expected data regardless of input
860
+
861
+ @required_form_attrs = {
862
+ 'accept-charset' => 'UTF-8',
863
+ 'enctype' => 'application/x-www-form-urlencoded',
864
+ 'method' => 'post',
865
+ }
866
+ end
867
+
868
+ def _checkForm(html, message_, action_url,
869
+ form_tag_attrs, submit_text)
870
+ @xml = REXML::Document.new(html)
871
+
872
+ # Get root element
873
+ form = @xml.root
874
+
875
+ # Check required form attributes
876
+ @required_form_attrs.each { |k, v|
877
+ assert(form.attributes[k] == v,
878
+ "Expected '#{v}' for required form attribute '#{k}', got '#{form.attributes[k]}'")
879
+ }
880
+
881
+ # Check extra form attributes
882
+ @form_tag_attrs.each { |k, v|
883
+ # Skip attributes that already passed the required attribute
884
+ # check, since they should be ignored by the form generation
885
+ # code.
886
+ if @required_form_attrs.include?(k)
887
+ continue
888
+ end
889
+
890
+ assert(form.attributes[k] == v,
891
+ "Form attribute '#{k}' should be '#{v}', found '#{form.attributes[k]}'")
892
+
893
+ # Check hidden fields against post args
894
+ hiddens = []
895
+ form.each { |e|
896
+ if (e.is_a?(REXML::Element)) and
897
+ (e.name.upcase() == 'INPUT') and
898
+ (e.attributes['type'].upcase() == 'HIDDEN')
899
+ # For each post arg, make sure there is a hidden with that
900
+ # value. Make sure there are no other hiddens.
901
+ hiddens += [e]
902
+ end
903
+ }
904
+
905
+ message_.to_post_args().each { |name, value|
906
+ success = false
907
+
908
+ hiddens.each { |e|
909
+ if e.attributes['name'] == name
910
+ assert(e.attributes['value'] == value,
911
+ "Expected value of hidden input '#{e.attributes['name']}' " +
912
+ "to be '#{value}', got '#{e.attributes['value']}'")
913
+ success = true
914
+ break
915
+ end
916
+ }
917
+
918
+ if !success
919
+ flunk "Post arg '#{name}' not found in form"
920
+ end
921
+ }
922
+
923
+ hiddens.each { |e|
924
+ assert(message_.to_post_args().keys().include?(e.attributes['name']),
925
+ "Form element for '#{e.attributes['name']}' not in " +
926
+ "original message")
927
+ }
928
+
929
+ # Check action URL
930
+ assert(form.attributes['action'] == action_url,
931
+ "Expected form 'action' to be '#{action_url}', got '#{form.attributes['action']}'")
932
+
933
+ # Check submit text
934
+ submits = []
935
+ form.each { |e|
936
+ if (e.is_a?(REXML::Element)) and
937
+ (e.name.upcase() == 'INPUT') and
938
+ e.attributes['type'].upcase() == 'SUBMIT'
939
+ submits += [e]
940
+ end
941
+ }
942
+
943
+ assert(submits.length == 1,
944
+ "Expected only one 'input' with type = 'submit', got #{submits.length}")
945
+
946
+ assert(submits[0].attributes['value'] == submit_text,
947
+ "Expected submit value to be '#{submit_text}', " +
948
+ "got '#{submits[0].attributes['value']}'")
949
+ }
950
+
951
+ end
952
+
953
+ def test_toFormMarkup
954
+ m = Message.from_post_args(@postargs)
955
+ html = m.to_form_markup(@action_url, @form_tag_attrs,
956
+ @submit_text)
957
+ _checkForm(html, m, @action_url,
958
+ @form_tag_attrs, @submit_text)
959
+ end
960
+
961
+ def test_overrideMethod
962
+ # Be sure that caller cannot change form method to GET.
963
+ m = Message.from_post_args(@postargs)
964
+
965
+ tag_attrs = @form_tag_attrs.clone
966
+ tag_attrs['method'] = 'GET'
967
+
968
+ html = m.to_form_markup(@action_url, @form_tag_attrs,
969
+ @submit_text)
970
+ _checkForm(html, m, @action_url,
971
+ @form_tag_attrs, @submit_text)
972
+ end
973
+
974
+ def test_overrideRequired
975
+ # Be sure that caller CANNOT change the form charset for
976
+ # encoding type.
977
+ m = Message.from_post_args(@postargs)
978
+
979
+ tag_attrs = @form_tag_attrs.clone
980
+ tag_attrs['accept-charset'] = 'UCS4'
981
+ tag_attrs['enctype'] = 'invalid/x-broken'
982
+
983
+ html = m.to_form_markup(@action_url, tag_attrs,
984
+ @submit_text)
985
+ _checkForm(html, m, @action_url,
986
+ tag_attrs, @submit_text)
987
+ end
988
+ end
989
+
990
+ class NamespaceMapTestCase < Test::Unit::TestCase
991
+
992
+ def test_onealias
993
+ nsm = NamespaceMap.new
994
+ uri = 'http://example.com/foo'
995
+ _alias = 'foo'
996
+ nsm.add_alias(uri, _alias)
997
+ assert_equal(uri, nsm.get_namespace_uri(_alias))
998
+ assert_equal(_alias, nsm.get_alias(uri))
999
+ end
1000
+
1001
+
1002
+ def test_iteration
1003
+ nsm = NamespaceMap.new
1004
+ uripat = "http://example.com/foo%i"
1005
+ nsm.add(uripat % 0)
1006
+
1007
+ (1..23).each { |i|
1008
+ assert_equal(false, nsm.member?(uripat % i))
1009
+ nsm.add(uripat % i)
1010
+ }
1011
+ nsm.each { |uri, _alias|
1012
+ assert_equal(uri[22..-1], _alias[3..-1])
1013
+ }
1014
+
1015
+ nsm = NamespaceMap.new
1016
+ alias_ = 'bogus'
1017
+ uri = 'urn:bogus'
1018
+
1019
+ nsm.add_alias(uri, alias_)
1020
+
1021
+ assert_equal(nsm.aliases(), [alias_])
1022
+ assert_equal(nsm.namespace_uris(), [uri])
1023
+ end
1024
+
1025
+ def test_register_default_alias
1026
+ invalid_ns = 'http://invalid/'
1027
+ alias_ = 'invalid'
1028
+ Message.register_namespace_alias(invalid_ns, alias_)
1029
+ # Doing it again doesn't raise an exception
1030
+ Message.register_namespace_alias(invalid_ns, alias_)
1031
+
1032
+ # Once it's registered, you can't register it again
1033
+ assert_raises(NamespaceAliasRegistrationError) {
1034
+ Message.register_namespace_alias(invalid_ns, 'another_alias')
1035
+ }
1036
+
1037
+ # Once it's registered, you can't register another URL with that alias
1038
+ assert_raises(NamespaceAliasRegistrationError) {
1039
+ Message.register_namespace_alias('http://janrain.com/', alias_)
1040
+ }
1041
+
1042
+ # It gets used automatically by the Message class:
1043
+ msg = Message.from_openid_args({'invalid.stuff' => 'things'})
1044
+ assert_equal(alias_, msg.namespaces.get_alias(invalid_ns))
1045
+ assert_equal(invalid_ns, msg.namespaces.get_namespace_uri(alias_))
1046
+ end
1047
+
1048
+ def test_alias_defined_twice
1049
+ nsm = NamespaceMap.new
1050
+ uri = 'urn:bogus'
1051
+
1052
+ nsm.add_alias(uri, 'foos')
1053
+ assert_raises(IndexError) {
1054
+ nsm.add_alias(uri, 'ball')
1055
+ }
1056
+ end
1057
+ end
1058
+ end