addressable 2.4.0 → 2.8.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +54 -0
- data/Gemfile +13 -12
- data/README.md +31 -15
- data/Rakefile +5 -3
- data/addressable.gemspec +23 -20
- data/lib/addressable/idna/native.rb +11 -5
- data/lib/addressable/idna/pure.rb +61 -55
- data/lib/addressable/idna.rb +3 -1
- data/lib/addressable/template.rb +64 -84
- data/lib/addressable/uri.rb +228 -96
- data/lib/addressable/version.rb +4 -2
- data/lib/addressable.rb +2 -0
- data/spec/addressable/idna_spec.rb +35 -3
- data/spec/addressable/net_http_compat_spec.rb +3 -1
- data/spec/addressable/security_spec.rb +3 -1
- data/spec/addressable/template_spec.rb +77 -3
- data/spec/addressable/uri_spec.rb +663 -203
- data/spec/spec_helper.rb +12 -0
- data/tasks/clobber.rake +2 -0
- data/tasks/gem.rake +9 -14
- data/tasks/git.rake +2 -0
- data/tasks/metrics.rake +2 -0
- data/tasks/profile.rake +72 -0
- data/tasks/rspec.rake +3 -1
- data/tasks/yard.rake +2 -0
- metadata +36 -11
- data/spec/addressable/rack_mount_compat_spec.rb +0 -104
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# coding: utf-8
|
2
|
-
# Copyright (C)
|
4
|
+
# Copyright (C) Bob Aman
|
3
5
|
#
|
4
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
7
|
# you may not use this file except in compliance with the License.
|
@@ -63,124 +65,116 @@ end
|
|
63
65
|
|
64
66
|
describe Addressable::URI, "when created with a non-numeric port number" do
|
65
67
|
it "should raise an error" do
|
66
|
-
expect
|
68
|
+
expect do
|
67
69
|
Addressable::URI.new(:port => "bogus")
|
68
|
-
end
|
70
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
72
74
|
describe Addressable::URI, "when created with a invalid encoded port number" do
|
73
75
|
it "should raise an error" do
|
74
|
-
expect
|
76
|
+
expect do
|
75
77
|
Addressable::URI.new(:port => "%eb")
|
76
|
-
end
|
78
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
80
82
|
describe Addressable::URI, "when created with a non-string scheme" do
|
81
83
|
it "should raise an error" do
|
82
|
-
expect
|
84
|
+
expect do
|
83
85
|
Addressable::URI.new(:scheme => :bogus)
|
84
|
-
end
|
86
|
+
end.to raise_error(TypeError)
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
88
90
|
describe Addressable::URI, "when created with a non-string user" do
|
89
91
|
it "should raise an error" do
|
90
|
-
expect
|
92
|
+
expect do
|
91
93
|
Addressable::URI.new(:user => :bogus)
|
92
|
-
end
|
94
|
+
end.to raise_error(TypeError)
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
96
98
|
describe Addressable::URI, "when created with a non-string password" do
|
97
99
|
it "should raise an error" do
|
98
|
-
expect
|
100
|
+
expect do
|
99
101
|
Addressable::URI.new(:password => :bogus)
|
100
|
-
end
|
102
|
+
end.to raise_error(TypeError)
|
101
103
|
end
|
102
104
|
end
|
103
105
|
|
104
106
|
describe Addressable::URI, "when created with a non-string userinfo" do
|
105
107
|
it "should raise an error" do
|
106
|
-
expect
|
108
|
+
expect do
|
107
109
|
Addressable::URI.new(:userinfo => :bogus)
|
108
|
-
end
|
110
|
+
end.to raise_error(TypeError)
|
109
111
|
end
|
110
112
|
end
|
111
113
|
|
112
114
|
describe Addressable::URI, "when created with a non-string host" do
|
113
115
|
it "should raise an error" do
|
114
|
-
expect
|
116
|
+
expect do
|
115
117
|
Addressable::URI.new(:host => :bogus)
|
116
|
-
end
|
118
|
+
end.to raise_error(TypeError)
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
120
122
|
describe Addressable::URI, "when created with a non-string authority" do
|
121
123
|
it "should raise an error" do
|
122
|
-
expect
|
124
|
+
expect do
|
123
125
|
Addressable::URI.new(:authority => :bogus)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe Addressable::URI, "when created with a non-string authority" do
|
129
|
-
it "should raise an error" do
|
130
|
-
expect(lambda do
|
131
|
-
Addressable::URI.new(:authority => :bogus)
|
132
|
-
end).to raise_error(TypeError)
|
126
|
+
end.to raise_error(TypeError)
|
133
127
|
end
|
134
128
|
end
|
135
129
|
|
136
130
|
describe Addressable::URI, "when created with a non-string path" do
|
137
131
|
it "should raise an error" do
|
138
|
-
expect
|
132
|
+
expect do
|
139
133
|
Addressable::URI.new(:path => :bogus)
|
140
|
-
end
|
134
|
+
end.to raise_error(TypeError)
|
141
135
|
end
|
142
136
|
end
|
143
137
|
|
144
138
|
describe Addressable::URI, "when created with a non-string query" do
|
145
139
|
it "should raise an error" do
|
146
|
-
expect
|
140
|
+
expect do
|
147
141
|
Addressable::URI.new(:query => :bogus)
|
148
|
-
end
|
142
|
+
end.to raise_error(TypeError)
|
149
143
|
end
|
150
144
|
end
|
151
145
|
|
152
146
|
describe Addressable::URI, "when created with a non-string fragment" do
|
153
147
|
it "should raise an error" do
|
154
|
-
expect
|
148
|
+
expect do
|
155
149
|
Addressable::URI.new(:fragment => :bogus)
|
156
|
-
end
|
150
|
+
end.to raise_error(TypeError)
|
157
151
|
end
|
158
152
|
end
|
159
153
|
|
160
154
|
describe Addressable::URI, "when created with a scheme but no hierarchical " +
|
161
155
|
"segment" do
|
162
156
|
it "should raise an error" do
|
163
|
-
expect
|
157
|
+
expect do
|
164
158
|
Addressable::URI.parse("http:")
|
165
|
-
end
|
159
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
166
160
|
end
|
167
161
|
end
|
168
162
|
|
169
163
|
describe Addressable::URI, "quote handling" do
|
170
164
|
describe 'in host name' do
|
171
165
|
it "should raise an error for single quote" do
|
172
|
-
expect
|
166
|
+
expect do
|
173
167
|
Addressable::URI.parse("http://local\"host/")
|
174
|
-
end
|
168
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
175
169
|
end
|
176
170
|
end
|
177
171
|
end
|
178
172
|
|
179
173
|
describe Addressable::URI, "newline normalization" do
|
180
174
|
it "should not accept newlines in scheme" do
|
181
|
-
expect
|
175
|
+
expect do
|
182
176
|
Addressable::URI.parse("ht%0atp://localhost/")
|
183
|
-
end
|
177
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
184
178
|
end
|
185
179
|
|
186
180
|
it "should not unescape newline in path" do
|
@@ -205,47 +199,47 @@ describe Addressable::URI, "newline normalization" do
|
|
205
199
|
|
206
200
|
it "should not accept newline in hostname" do
|
207
201
|
uri = Addressable::URI.parse("http://localhost/")
|
208
|
-
expect
|
202
|
+
expect do
|
209
203
|
uri.host = "local\nhost"
|
210
|
-
end
|
204
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
211
205
|
end
|
212
206
|
end
|
213
207
|
|
214
208
|
describe Addressable::URI, "when created with ambiguous path" do
|
215
209
|
it "should raise an error" do
|
216
|
-
expect
|
210
|
+
expect do
|
217
211
|
Addressable::URI.parse("::http")
|
218
|
-
end
|
212
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
219
213
|
end
|
220
214
|
end
|
221
215
|
|
222
216
|
describe Addressable::URI, "when created with an invalid host" do
|
223
217
|
it "should raise an error" do
|
224
|
-
expect
|
218
|
+
expect do
|
225
219
|
Addressable::URI.new(:host => "<invalid>")
|
226
|
-
end
|
220
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
227
221
|
end
|
228
222
|
end
|
229
223
|
|
230
224
|
describe Addressable::URI, "when created with a host consisting of " +
|
231
225
|
"sub-delims characters" do
|
232
226
|
it "should not raise an error" do
|
233
|
-
expect
|
227
|
+
expect do
|
234
228
|
Addressable::URI.new(
|
235
229
|
:host => Addressable::URI::CharacterClasses::SUB_DELIMS.gsub(/\\/, '')
|
236
230
|
)
|
237
|
-
end
|
231
|
+
end.not_to raise_error
|
238
232
|
end
|
239
233
|
end
|
240
234
|
|
241
235
|
describe Addressable::URI, "when created with a host consisting of " +
|
242
236
|
"unreserved characters" do
|
243
237
|
it "should not raise an error" do
|
244
|
-
expect
|
238
|
+
expect do
|
245
239
|
Addressable::URI.new(
|
246
240
|
:host => Addressable::URI::CharacterClasses::UNRESERVED.gsub(/\\/, '')
|
247
241
|
)
|
248
|
-
end
|
242
|
+
end.not_to raise_error
|
249
243
|
end
|
250
244
|
end
|
251
245
|
|
@@ -275,83 +269,83 @@ describe Addressable::URI, "when created from nil components" do
|
|
275
269
|
end
|
276
270
|
|
277
271
|
it "should raise an error if the scheme is set to whitespace" do
|
278
|
-
expect
|
272
|
+
expect do
|
279
273
|
@uri.scheme = "\t \n"
|
280
|
-
end
|
274
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'\t \n'/)
|
281
275
|
end
|
282
276
|
|
283
277
|
it "should raise an error if the scheme is set to all digits" do
|
284
|
-
expect
|
278
|
+
expect do
|
285
279
|
@uri.scheme = "123"
|
286
|
-
end
|
280
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'123'/)
|
287
281
|
end
|
288
282
|
|
289
283
|
it "should raise an error if the scheme begins with a digit" do
|
290
|
-
expect
|
284
|
+
expect do
|
291
285
|
@uri.scheme = "1scheme"
|
292
|
-
end
|
286
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'1scheme'/)
|
293
287
|
end
|
294
288
|
|
295
289
|
it "should raise an error if the scheme begins with a plus" do
|
296
|
-
expect
|
290
|
+
expect do
|
297
291
|
@uri.scheme = "+scheme"
|
298
|
-
end
|
292
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'\+scheme'/)
|
299
293
|
end
|
300
294
|
|
301
295
|
it "should raise an error if the scheme begins with a dot" do
|
302
|
-
expect
|
296
|
+
expect do
|
303
297
|
@uri.scheme = ".scheme"
|
304
|
-
end
|
298
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'\.scheme'/)
|
305
299
|
end
|
306
300
|
|
307
301
|
it "should raise an error if the scheme begins with a dash" do
|
308
|
-
expect
|
302
|
+
expect do
|
309
303
|
@uri.scheme = "-scheme"
|
310
|
-
end
|
304
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'-scheme'/)
|
311
305
|
end
|
312
306
|
|
313
307
|
it "should raise an error if the scheme contains an illegal character" do
|
314
|
-
expect
|
308
|
+
expect do
|
315
309
|
@uri.scheme = "scheme!"
|
316
|
-
end
|
310
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'scheme!'/)
|
317
311
|
end
|
318
312
|
|
319
313
|
it "should raise an error if the scheme contains whitespace" do
|
320
|
-
expect
|
314
|
+
expect do
|
321
315
|
@uri.scheme = "sch eme"
|
322
|
-
end
|
316
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /'sch eme'/)
|
323
317
|
end
|
324
318
|
|
325
319
|
it "should raise an error if the scheme contains a newline" do
|
326
|
-
expect
|
320
|
+
expect do
|
327
321
|
@uri.scheme = "sch\neme"
|
328
|
-
end
|
322
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
329
323
|
end
|
330
324
|
|
331
325
|
it "should raise an error if set into an invalid state" do
|
332
|
-
expect
|
326
|
+
expect do
|
333
327
|
@uri.user = "user"
|
334
|
-
end
|
328
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
335
329
|
end
|
336
330
|
|
337
331
|
it "should raise an error if set into an invalid state" do
|
338
|
-
expect
|
332
|
+
expect do
|
339
333
|
@uri.password = "pass"
|
340
|
-
end
|
334
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
341
335
|
end
|
342
336
|
|
343
337
|
it "should raise an error if set into an invalid state" do
|
344
|
-
expect
|
338
|
+
expect do
|
345
339
|
@uri.scheme = "http"
|
346
340
|
@uri.fragment = "fragment"
|
347
|
-
end
|
341
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
348
342
|
end
|
349
343
|
|
350
344
|
it "should raise an error if set into an invalid state" do
|
351
|
-
expect
|
345
|
+
expect do
|
352
346
|
@uri.fragment = "fragment"
|
353
347
|
@uri.scheme = "http"
|
354
|
-
end
|
348
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
355
349
|
end
|
356
350
|
end
|
357
351
|
|
@@ -409,6 +403,10 @@ describe Addressable::URI, "when initialized from individual components" do
|
|
409
403
|
expect(@uri.normalized_host).to eq("example.com")
|
410
404
|
end
|
411
405
|
|
406
|
+
it "returns 'com' for #tld" do
|
407
|
+
expect(@uri.tld).to eq("com")
|
408
|
+
end
|
409
|
+
|
412
410
|
it "returns 'user:password@example.com:8080' for #authority" do
|
413
411
|
expect(@uri.authority).to eq("user:password@example.com:8080")
|
414
412
|
end
|
@@ -959,6 +957,10 @@ describe Addressable::URI, "when frozen" do
|
|
959
957
|
expect(@uri.normalize.query).to eq("a=1")
|
960
958
|
end
|
961
959
|
|
960
|
+
it "returns '/%70a%74%68?a=%31' for #request_uri" do
|
961
|
+
expect(@uri.request_uri).to eq("/%70a%74%68?a=%31")
|
962
|
+
end
|
963
|
+
|
962
964
|
it "returns '1%323' for #fragment" do
|
963
965
|
expect(@uri.fragment).to eq("1%323")
|
964
966
|
end
|
@@ -1013,31 +1015,31 @@ describe Addressable::URI, "when created from string components" do
|
|
1013
1015
|
end
|
1014
1016
|
|
1015
1017
|
it "should raise an error if invalid components omitted" do
|
1016
|
-
expect
|
1018
|
+
expect do
|
1017
1019
|
@uri.omit(:bogus)
|
1018
|
-
end
|
1019
|
-
expect
|
1020
|
+
end.to raise_error(ArgumentError)
|
1021
|
+
expect do
|
1020
1022
|
@uri.omit(:scheme, :bogus, :path)
|
1021
|
-
end
|
1023
|
+
end.to raise_error(ArgumentError)
|
1022
1024
|
end
|
1023
1025
|
end
|
1024
1026
|
|
1025
1027
|
describe Addressable::URI, "when created with a nil host but " +
|
1026
1028
|
"non-nil authority components" do
|
1027
1029
|
it "should raise an error" do
|
1028
|
-
expect
|
1030
|
+
expect do
|
1029
1031
|
Addressable::URI.new(:user => "user", :password => "pass", :port => 80)
|
1030
|
-
end
|
1032
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1031
1033
|
end
|
1032
1034
|
end
|
1033
1035
|
|
1034
1036
|
describe Addressable::URI, "when created with both an authority and a user" do
|
1035
1037
|
it "should raise an error" do
|
1036
|
-
expect
|
1038
|
+
expect do
|
1037
1039
|
Addressable::URI.new(
|
1038
1040
|
:user => "user", :authority => "user@example.com:80"
|
1039
1041
|
)
|
1040
|
-
end
|
1042
|
+
end.to raise_error(ArgumentError)
|
1041
1043
|
end
|
1042
1044
|
end
|
1043
1045
|
|
@@ -1073,11 +1075,35 @@ describe Addressable::URI, "when created with a host with trailing dots" do
|
|
1073
1075
|
end
|
1074
1076
|
end
|
1075
1077
|
|
1078
|
+
describe Addressable::URI, "when created with a host with a backslash" do
|
1079
|
+
it "should raise an error" do
|
1080
|
+
expect do
|
1081
|
+
Addressable::URI.new(:authority => "example\\example")
|
1082
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1083
|
+
end
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
describe Addressable::URI, "when created with a host with a slash" do
|
1087
|
+
it "should raise an error" do
|
1088
|
+
expect do
|
1089
|
+
Addressable::URI.new(:authority => "example/example")
|
1090
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1091
|
+
end
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
describe Addressable::URI, "when created with a host with a space" do
|
1095
|
+
it "should raise an error" do
|
1096
|
+
expect do
|
1097
|
+
Addressable::URI.new(:authority => "example example")
|
1098
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1099
|
+
end
|
1100
|
+
end
|
1101
|
+
|
1076
1102
|
describe Addressable::URI, "when created with both a userinfo and a user" do
|
1077
1103
|
it "should raise an error" do
|
1078
|
-
expect
|
1104
|
+
expect do
|
1079
1105
|
Addressable::URI.new(:user => "user", :userinfo => "user:pass")
|
1080
|
-
end
|
1106
|
+
end.to raise_error(ArgumentError)
|
1081
1107
|
end
|
1082
1108
|
end
|
1083
1109
|
|
@@ -1169,18 +1195,18 @@ describe Addressable::URI, "when parsed from something that looks " +
|
|
1169
1195
|
"like a URI object" do
|
1170
1196
|
it "should parse without error" do
|
1171
1197
|
uri = Addressable::URI.parse(Fake::URI::HTTP.new("http://example.com/"))
|
1172
|
-
expect
|
1198
|
+
expect do
|
1173
1199
|
Addressable::URI.parse(uri)
|
1174
|
-
end
|
1200
|
+
end.not_to raise_error
|
1175
1201
|
end
|
1176
1202
|
end
|
1177
1203
|
|
1178
1204
|
describe Addressable::URI, "when parsed from a standard library URI object" do
|
1179
1205
|
it "should parse without error" do
|
1180
1206
|
uri = Addressable::URI.parse(URI.parse("http://example.com/"))
|
1181
|
-
expect
|
1207
|
+
expect do
|
1182
1208
|
Addressable::URI.parse(uri)
|
1183
|
-
end
|
1209
|
+
end.not_to raise_error
|
1184
1210
|
end
|
1185
1211
|
end
|
1186
1212
|
|
@@ -1340,9 +1366,9 @@ describe Addressable::URI, "when parsed from " +
|
|
1340
1366
|
end
|
1341
1367
|
|
1342
1368
|
it "should not allow request URI assignment" do
|
1343
|
-
expect
|
1369
|
+
expect do
|
1344
1370
|
@uri.request_uri = "/"
|
1345
|
-
end
|
1371
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1346
1372
|
end
|
1347
1373
|
|
1348
1374
|
it "should have a query of 'objectClass?one'" do
|
@@ -1364,9 +1390,9 @@ describe Addressable::URI, "when parsed from " +
|
|
1364
1390
|
end
|
1365
1391
|
|
1366
1392
|
it "should raise an error if omission would create an invalid URI" do
|
1367
|
-
expect
|
1393
|
+
expect do
|
1368
1394
|
@uri.omit(:authority, :path)
|
1369
|
-
end
|
1395
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1370
1396
|
end
|
1371
1397
|
|
1372
1398
|
it "should have an origin of 'ldap://[2001:db8::7]'" do
|
@@ -1752,9 +1778,9 @@ describe Addressable::URI, "when parsed from " +
|
|
1752
1778
|
|
1753
1779
|
it "should not be roughly equal to the string " +
|
1754
1780
|
"'http://example.com:bogus/'" do
|
1755
|
-
expect
|
1781
|
+
expect do
|
1756
1782
|
expect(@uri === "http://example.com:bogus/").to eq(false)
|
1757
|
-
end
|
1783
|
+
end.not_to raise_error
|
1758
1784
|
end
|
1759
1785
|
|
1760
1786
|
it "should result in itself when joined with itself" do
|
@@ -1775,7 +1801,7 @@ describe Addressable::URI, "when parsed from " +
|
|
1775
1801
|
end
|
1776
1802
|
|
1777
1803
|
it "should have the same hash as http://EXAMPLE.com after assignment" do
|
1778
|
-
@uri.
|
1804
|
+
@uri.origin = "http://EXAMPLE.com"
|
1779
1805
|
expect(@uri.hash).to eq(Addressable::URI.parse("http://EXAMPLE.com").hash)
|
1780
1806
|
end
|
1781
1807
|
|
@@ -1783,6 +1809,24 @@ describe Addressable::URI, "when parsed from " +
|
|
1783
1809
|
expect(@uri.hash).not_to eq(Addressable::URI.parse("http://EXAMPLE.com").hash)
|
1784
1810
|
end
|
1785
1811
|
|
1812
|
+
it "should not allow origin assignment without scheme" do
|
1813
|
+
expect do
|
1814
|
+
@uri.origin = "example.com"
|
1815
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1816
|
+
end
|
1817
|
+
|
1818
|
+
it "should not allow origin assignment without host" do
|
1819
|
+
expect do
|
1820
|
+
@uri.origin = "http://"
|
1821
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
1822
|
+
end
|
1823
|
+
|
1824
|
+
it "should not allow origin assignment with bogus type" do
|
1825
|
+
expect do
|
1826
|
+
@uri.origin = :bogus
|
1827
|
+
end.to raise_error(TypeError)
|
1828
|
+
end
|
1829
|
+
|
1786
1830
|
# Section 6.2.3 of RFC 3986
|
1787
1831
|
it "should be equivalent to http://example.com/" do
|
1788
1832
|
expect(@uri).to eq(Addressable::URI.parse("http://example.com/"))
|
@@ -1836,9 +1880,9 @@ describe Addressable::URI, "when parsed from " +
|
|
1836
1880
|
end
|
1837
1881
|
|
1838
1882
|
it "when joined with a bogus object a TypeError should be raised" do
|
1839
|
-
expect
|
1883
|
+
expect do
|
1840
1884
|
@uri.join(42)
|
1841
|
-
end
|
1885
|
+
end.to raise_error(TypeError)
|
1842
1886
|
end
|
1843
1887
|
|
1844
1888
|
it "should have the correct username after assignment" do
|
@@ -1933,15 +1977,29 @@ end
|
|
1933
1977
|
|
1934
1978
|
# Section 5.1.2 of RFC 2616
|
1935
1979
|
describe Addressable::URI, "when parsed from " +
|
1936
|
-
"'
|
1980
|
+
"'HTTP://www.w3.org/pub/WWW/TheProject.html'" do
|
1937
1981
|
before do
|
1938
|
-
@uri = Addressable::URI.parse("
|
1982
|
+
@uri = Addressable::URI.parse("HTTP://www.w3.org/pub/WWW/TheProject.html")
|
1939
1983
|
end
|
1940
1984
|
|
1941
1985
|
it "should have the correct request URI" do
|
1942
1986
|
expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html")
|
1943
1987
|
end
|
1944
1988
|
|
1989
|
+
it "should have the correct request URI after assignment" do
|
1990
|
+
@uri.request_uri = "/pub/WWW/TheProject.html?"
|
1991
|
+
expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html?")
|
1992
|
+
expect(@uri.path).to eq("/pub/WWW/TheProject.html")
|
1993
|
+
expect(@uri.query).to eq("")
|
1994
|
+
end
|
1995
|
+
|
1996
|
+
it "should have the correct request URI after assignment" do
|
1997
|
+
@uri.request_uri = "/some/where/else.html"
|
1998
|
+
expect(@uri.request_uri).to eq("/some/where/else.html")
|
1999
|
+
expect(@uri.path).to eq("/some/where/else.html")
|
2000
|
+
expect(@uri.query).to eq(nil)
|
2001
|
+
end
|
2002
|
+
|
1945
2003
|
it "should have the correct request URI after assignment" do
|
1946
2004
|
@uri.request_uri = "/some/where/else.html?query?string"
|
1947
2005
|
expect(@uri.request_uri).to eq("/some/where/else.html?query?string")
|
@@ -1957,20 +2015,20 @@ describe Addressable::URI, "when parsed from " +
|
|
1957
2015
|
end
|
1958
2016
|
|
1959
2017
|
it "should raise an error if the site value is set to something bogus" do
|
1960
|
-
expect
|
2018
|
+
expect do
|
1961
2019
|
@uri.site = 42
|
1962
|
-
end
|
2020
|
+
end.to raise_error(TypeError)
|
1963
2021
|
end
|
1964
2022
|
|
1965
2023
|
it "should raise an error if the request URI is set to something bogus" do
|
1966
|
-
expect
|
2024
|
+
expect do
|
1967
2025
|
@uri.request_uri = 42
|
1968
|
-
end
|
2026
|
+
end.to raise_error(TypeError)
|
1969
2027
|
end
|
1970
2028
|
|
1971
2029
|
it "should correctly convert to a hash" do
|
1972
2030
|
expect(@uri.to_hash).to eq({
|
1973
|
-
:scheme => "
|
2031
|
+
:scheme => "HTTP",
|
1974
2032
|
:user => nil,
|
1975
2033
|
:password => nil,
|
1976
2034
|
:host => "www.w3.org",
|
@@ -2014,9 +2072,9 @@ describe Addressable::URI, "when parsing IPv6 addresses" do
|
|
2014
2072
|
|
2015
2073
|
it "should raise an error for " +
|
2016
2074
|
"'http://[<invalid>]/'" do
|
2017
|
-
expect
|
2075
|
+
expect do
|
2018
2076
|
Addressable::URI.parse("http://[<invalid>]/")
|
2019
|
-
end
|
2077
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
2020
2078
|
end
|
2021
2079
|
end
|
2022
2080
|
|
@@ -2042,9 +2100,9 @@ describe Addressable::URI, "when assigning IPv6 address" do
|
|
2042
2100
|
it "should not allow to set bare IPv6 address as host" do
|
2043
2101
|
uri = Addressable::URI.parse("http://[::1]/")
|
2044
2102
|
skip "not checked"
|
2045
|
-
expect
|
2103
|
+
expect do
|
2046
2104
|
uri.host = '3ffe:1900:4545:3:200:f8ff:fe21:67cf'
|
2047
|
-
end
|
2105
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
2048
2106
|
end
|
2049
2107
|
end
|
2050
2108
|
|
@@ -2076,9 +2134,9 @@ describe Addressable::URI, "when parsing IPvFuture addresses" do
|
|
2076
2134
|
|
2077
2135
|
it "should raise an error for " +
|
2078
2136
|
"'http://[v0.<invalid>]/'" do
|
2079
|
-
expect
|
2137
|
+
expect do
|
2080
2138
|
Addressable::URI.parse("http://[v0.<invalid>]/")
|
2081
|
-
end
|
2139
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
2082
2140
|
end
|
2083
2141
|
end
|
2084
2142
|
|
@@ -2320,6 +2378,80 @@ describe Addressable::URI, "when parsed from " +
|
|
2320
2378
|
end
|
2321
2379
|
end
|
2322
2380
|
|
2381
|
+
describe Addressable::URI, "when parsed from " +
|
2382
|
+
"'HTTP://EXAMPLE.COM/'" do
|
2383
|
+
before do
|
2384
|
+
@uri = Addressable::URI.parse("HTTP://EXAMPLE.COM/")
|
2385
|
+
end
|
2386
|
+
|
2387
|
+
it "should be equivalent to http://example.com" do
|
2388
|
+
expect(@uri).to eq(Addressable::URI.parse("http://example.com"))
|
2389
|
+
end
|
2390
|
+
|
2391
|
+
it "should correctly convert to a hash" do
|
2392
|
+
expect(@uri.to_hash).to eq({
|
2393
|
+
:scheme => "HTTP",
|
2394
|
+
:user => nil,
|
2395
|
+
:password => nil,
|
2396
|
+
:host => "EXAMPLE.COM",
|
2397
|
+
:port => nil,
|
2398
|
+
:path => "/",
|
2399
|
+
:query => nil,
|
2400
|
+
:fragment => nil
|
2401
|
+
})
|
2402
|
+
end
|
2403
|
+
|
2404
|
+
it "should be identical to its duplicate" do
|
2405
|
+
expect(@uri).to eq(@uri.dup)
|
2406
|
+
end
|
2407
|
+
|
2408
|
+
it "should have an origin of 'http://example.com'" do
|
2409
|
+
expect(@uri.origin).to eq('http://example.com')
|
2410
|
+
end
|
2411
|
+
|
2412
|
+
it "should have a tld of 'com'" do
|
2413
|
+
expect(@uri.tld).to eq('com')
|
2414
|
+
end
|
2415
|
+
end
|
2416
|
+
|
2417
|
+
describe Addressable::URI, "when parsed from " +
|
2418
|
+
"'http://www.example.co.uk/'" do
|
2419
|
+
before do
|
2420
|
+
@uri = Addressable::URI.parse("http://www.example.co.uk/")
|
2421
|
+
end
|
2422
|
+
|
2423
|
+
it "should have an origin of 'http://www.example.co.uk'" do
|
2424
|
+
expect(@uri.origin).to eq('http://www.example.co.uk')
|
2425
|
+
end
|
2426
|
+
|
2427
|
+
it "should have a tld of 'co.uk'" do
|
2428
|
+
expect(@uri.tld).to eq('co.uk')
|
2429
|
+
end
|
2430
|
+
|
2431
|
+
it "should have a domain of 'example.co.uk'" do
|
2432
|
+
expect(@uri.domain).to eq('example.co.uk')
|
2433
|
+
end
|
2434
|
+
end
|
2435
|
+
|
2436
|
+
describe Addressable::URI, "when parsed from " +
|
2437
|
+
"'http://sub_domain.blogspot.com/'" do
|
2438
|
+
before do
|
2439
|
+
@uri = Addressable::URI.parse("http://sub_domain.blogspot.com/")
|
2440
|
+
end
|
2441
|
+
|
2442
|
+
it "should have an origin of 'http://sub_domain.blogspot.com'" do
|
2443
|
+
expect(@uri.origin).to eq('http://sub_domain.blogspot.com')
|
2444
|
+
end
|
2445
|
+
|
2446
|
+
it "should have a tld of 'com'" do
|
2447
|
+
expect(@uri.tld).to eq('com')
|
2448
|
+
end
|
2449
|
+
|
2450
|
+
it "should have a domain of 'blogspot.com'" do
|
2451
|
+
expect(@uri.domain).to eq('blogspot.com')
|
2452
|
+
end
|
2453
|
+
end
|
2454
|
+
|
2323
2455
|
describe Addressable::URI, "when parsed from " +
|
2324
2456
|
"'http://example.com/~smith/'" do
|
2325
2457
|
before do
|
@@ -2348,9 +2480,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2348
2480
|
end
|
2349
2481
|
|
2350
2482
|
it "should not raise an exception when normalized" do
|
2351
|
-
expect
|
2483
|
+
expect do
|
2352
2484
|
@uri.normalize
|
2353
|
-
end
|
2485
|
+
end.not_to raise_error
|
2354
2486
|
end
|
2355
2487
|
|
2356
2488
|
it "should be considered to be in normal form" do
|
@@ -2402,9 +2534,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2402
2534
|
end
|
2403
2535
|
|
2404
2536
|
it "should not raise an exception when normalized" do
|
2405
|
-
expect
|
2537
|
+
expect do
|
2406
2538
|
@uri.normalize
|
2407
|
-
end
|
2539
|
+
end.not_to raise_error
|
2408
2540
|
end
|
2409
2541
|
|
2410
2542
|
it "should be considered to be in normal form" do
|
@@ -2427,9 +2559,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2427
2559
|
end
|
2428
2560
|
|
2429
2561
|
it "should not raise an exception when normalized" do
|
2430
|
-
expect
|
2562
|
+
expect do
|
2431
2563
|
@uri.normalize
|
2432
|
-
end
|
2564
|
+
end.not_to raise_error
|
2433
2565
|
end
|
2434
2566
|
|
2435
2567
|
it "should be considered to be in normal form" do
|
@@ -2465,9 +2597,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2465
2597
|
end
|
2466
2598
|
|
2467
2599
|
it "should raise an error if encoding with an unexpected return type" do
|
2468
|
-
expect
|
2600
|
+
expect do
|
2469
2601
|
Addressable::URI.normalized_encode(@uri, Integer)
|
2470
|
-
end
|
2602
|
+
end.to raise_error(TypeError)
|
2471
2603
|
end
|
2472
2604
|
|
2473
2605
|
it "if percent encoded should be 'http://example.com/C%25CC%25A7'" do
|
@@ -2483,9 +2615,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2483
2615
|
end
|
2484
2616
|
|
2485
2617
|
it "should raise an error if encoding with an unexpected return type" do
|
2486
|
-
expect
|
2618
|
+
expect do
|
2487
2619
|
Addressable::URI.encode(@uri, Integer)
|
2488
|
-
end
|
2620
|
+
end.to raise_error(TypeError)
|
2489
2621
|
end
|
2490
2622
|
|
2491
2623
|
it "should be identical to its duplicate" do
|
@@ -2620,9 +2752,9 @@ describe Addressable::URI, "when parsed from " +
|
|
2620
2752
|
|
2621
2753
|
it "should not be roughly equal to the string " +
|
2622
2754
|
"'http://example.com:bogus/'" do
|
2623
|
-
expect
|
2755
|
+
expect do
|
2624
2756
|
expect(@uri === "http://example.com:bogus/").to eq(false)
|
2625
|
-
end
|
2757
|
+
end.not_to raise_error
|
2626
2758
|
end
|
2627
2759
|
|
2628
2760
|
it "should result in itself when joined with itself" do
|
@@ -2961,6 +3093,23 @@ describe Addressable::URI, "when parsed from " +
|
|
2961
3093
|
end
|
2962
3094
|
end
|
2963
3095
|
|
3096
|
+
describe Addressable::URI, "when parsed from " +
|
3097
|
+
"'/..//example.com'" do
|
3098
|
+
before do
|
3099
|
+
@uri = Addressable::URI.parse("/..//example.com")
|
3100
|
+
end
|
3101
|
+
|
3102
|
+
it "should become invalid when normalized" do
|
3103
|
+
expect do
|
3104
|
+
@uri.normalize
|
3105
|
+
end.to raise_error(Addressable::URI::InvalidURIError, /authority/)
|
3106
|
+
end
|
3107
|
+
|
3108
|
+
it "should have a path of '/..//example.com'" do
|
3109
|
+
expect(@uri.path).to eq("/..//example.com")
|
3110
|
+
end
|
3111
|
+
end
|
3112
|
+
|
2964
3113
|
describe Addressable::URI, "when parsed from '/a/b/c/./../../g'" do
|
2965
3114
|
before do
|
2966
3115
|
@uri = Addressable::URI.parse("/a/b/c/./../../g")
|
@@ -3191,12 +3340,12 @@ describe Addressable::URI, "when parsed from " +
|
|
3191
3340
|
end
|
3192
3341
|
|
3193
3342
|
it "should raise an error if routing is attempted" do
|
3194
|
-
expect
|
3343
|
+
expect do
|
3195
3344
|
@uri.route_to("http://example.com/")
|
3196
|
-
end
|
3197
|
-
expect
|
3345
|
+
end.to raise_error(ArgumentError, /relative\/path\/to\/resource/)
|
3346
|
+
expect do
|
3198
3347
|
@uri.route_from("http://example.com/")
|
3199
|
-
end
|
3348
|
+
end.to raise_error(ArgumentError, /relative\/path\/to\/resource/)
|
3200
3349
|
end
|
3201
3350
|
|
3202
3351
|
it "when joined with 'another/relative/path' should be " +
|
@@ -3793,9 +3942,9 @@ describe Addressable::URI, "when parsed from " +
|
|
3793
3942
|
end
|
3794
3943
|
|
3795
3944
|
it "should raise an error if assigning a bogus object to the hostname" do
|
3796
|
-
expect
|
3945
|
+
expect do
|
3797
3946
|
@uri.hostname = Object.new
|
3798
|
-
end
|
3947
|
+
end.to raise_error(TypeError)
|
3799
3948
|
end
|
3800
3949
|
|
3801
3950
|
it "should have the correct port after assignment" do
|
@@ -3874,9 +4023,9 @@ describe Addressable::URI, "when parsed from " +
|
|
3874
4023
|
end
|
3875
4024
|
|
3876
4025
|
it "should raise an error if query values are set to a bogus type" do
|
3877
|
-
expect
|
4026
|
+
expect do
|
3878
4027
|
@uri.query_values = "bogus"
|
3879
|
-
end
|
4028
|
+
end.to raise_error(TypeError)
|
3880
4029
|
end
|
3881
4030
|
|
3882
4031
|
it "should have the correct fragment after assignment" do
|
@@ -3948,39 +4097,39 @@ describe Addressable::URI, "when parsed from " +
|
|
3948
4097
|
end
|
3949
4098
|
|
3950
4099
|
it "should fail to merge with bogus values" do
|
3951
|
-
expect
|
4100
|
+
expect do
|
3952
4101
|
@uri.merge(:port => "bogus")
|
3953
|
-
end
|
4102
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
3954
4103
|
end
|
3955
4104
|
|
3956
4105
|
it "should fail to merge with bogus values" do
|
3957
|
-
expect
|
4106
|
+
expect do
|
3958
4107
|
@uri.merge(:authority => "bar@baz:bogus")
|
3959
|
-
end
|
4108
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
3960
4109
|
end
|
3961
4110
|
|
3962
4111
|
it "should fail to merge with bogus parameters" do
|
3963
|
-
expect
|
4112
|
+
expect do
|
3964
4113
|
@uri.merge(42)
|
3965
|
-
end
|
4114
|
+
end.to raise_error(TypeError)
|
3966
4115
|
end
|
3967
4116
|
|
3968
4117
|
it "should fail to merge with bogus parameters" do
|
3969
|
-
expect
|
4118
|
+
expect do
|
3970
4119
|
@uri.merge("http://example.com/")
|
3971
|
-
end
|
4120
|
+
end.to raise_error(TypeError)
|
3972
4121
|
end
|
3973
4122
|
|
3974
4123
|
it "should fail to merge with both authority and subcomponents" do
|
3975
|
-
expect
|
4124
|
+
expect do
|
3976
4125
|
@uri.merge(:authority => "foo:bar@baz:42", :port => "42")
|
3977
|
-
end
|
4126
|
+
end.to raise_error(ArgumentError)
|
3978
4127
|
end
|
3979
4128
|
|
3980
4129
|
it "should fail to merge with both userinfo and subcomponents" do
|
3981
|
-
expect
|
4130
|
+
expect do
|
3982
4131
|
@uri.merge(:userinfo => "foo:bar", :user => "foo")
|
3983
|
-
end
|
4132
|
+
end.to raise_error(ArgumentError)
|
3984
4133
|
end
|
3985
4134
|
|
3986
4135
|
it "should be identical to its duplicate" do
|
@@ -4113,6 +4262,36 @@ describe Addressable::URI, "when parsed from " +
|
|
4113
4262
|
end
|
4114
4263
|
end
|
4115
4264
|
|
4265
|
+
describe Addressable::URI, "when parsed from 'https://example.com/?q=a+b'" do
|
4266
|
+
before do
|
4267
|
+
@uri = Addressable::URI.parse("https://example.com/?q=a+b")
|
4268
|
+
end
|
4269
|
+
|
4270
|
+
it "should have query_values of {'q' => 'a b'}" do
|
4271
|
+
expect(@uri.query_values).to eq("q" => "a b")
|
4272
|
+
end
|
4273
|
+
end
|
4274
|
+
|
4275
|
+
describe Addressable::URI, "when parsed from 'example.com?q=a+b'" do
|
4276
|
+
before do
|
4277
|
+
@uri = Addressable::URI.parse("example.com?q=a+b")
|
4278
|
+
end
|
4279
|
+
|
4280
|
+
it "should have query_values of {'q' => 'a b'}" do
|
4281
|
+
expect(@uri.query_values).to eq("q" => "a b")
|
4282
|
+
end
|
4283
|
+
end
|
4284
|
+
|
4285
|
+
describe Addressable::URI, "when parsed from 'mailto:?q=a+b'" do
|
4286
|
+
before do
|
4287
|
+
@uri = Addressable::URI.parse("mailto:?q=a+b")
|
4288
|
+
end
|
4289
|
+
|
4290
|
+
it "should have query_values of {'q' => 'a+b'}" do
|
4291
|
+
expect(@uri.query_values).to eq("q" => "a+b")
|
4292
|
+
end
|
4293
|
+
end
|
4294
|
+
|
4116
4295
|
describe Addressable::URI, "when parsed from " +
|
4117
4296
|
"'http://example.com/?q=a%2bb'" do
|
4118
4297
|
before do
|
@@ -4154,6 +4333,46 @@ describe Addressable::URI, "when parsed from " +
|
|
4154
4333
|
end
|
4155
4334
|
end
|
4156
4335
|
|
4336
|
+
describe Addressable::URI, "when parsed from 'http://example/?b=1&a=2&c=3'" do
|
4337
|
+
before do
|
4338
|
+
@uri = Addressable::URI.parse("http://example/?b=1&a=2&c=3")
|
4339
|
+
end
|
4340
|
+
|
4341
|
+
it "should have a sorted normalized query of 'a=2&b=1&c=3'" do
|
4342
|
+
expect(@uri.normalized_query(:sorted)).to eq("a=2&b=1&c=3")
|
4343
|
+
end
|
4344
|
+
end
|
4345
|
+
|
4346
|
+
describe Addressable::URI, "when parsed from 'http://example/?&a&&c&'" do
|
4347
|
+
before do
|
4348
|
+
@uri = Addressable::URI.parse("http://example/?&a&&c&")
|
4349
|
+
end
|
4350
|
+
|
4351
|
+
it "should have a compacted normalized query of 'a&c'" do
|
4352
|
+
expect(@uri.normalized_query(:compacted)).to eq("a&c")
|
4353
|
+
end
|
4354
|
+
end
|
4355
|
+
|
4356
|
+
describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=1'" do
|
4357
|
+
before do
|
4358
|
+
@uri = Addressable::URI.parse("http://example.com/?a=1&a=1")
|
4359
|
+
end
|
4360
|
+
|
4361
|
+
it "should have a compacted normalized query of 'a=1'" do
|
4362
|
+
expect(@uri.normalized_query(:compacted)).to eq("a=1")
|
4363
|
+
end
|
4364
|
+
end
|
4365
|
+
|
4366
|
+
describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=2'" do
|
4367
|
+
before do
|
4368
|
+
@uri = Addressable::URI.parse("http://example.com/?a=1&a=2")
|
4369
|
+
end
|
4370
|
+
|
4371
|
+
it "should have a compacted normalized query of 'a=1&a=2'" do
|
4372
|
+
expect(@uri.normalized_query(:compacted)).to eq("a=1&a=2")
|
4373
|
+
end
|
4374
|
+
end
|
4375
|
+
|
4157
4376
|
describe Addressable::URI, "when parsed from " +
|
4158
4377
|
"'http://example.com/sound%2bvision'" do
|
4159
4378
|
before do
|
@@ -4265,10 +4484,10 @@ describe Addressable::URI, "when parsed from " +
|
|
4265
4484
|
end
|
4266
4485
|
|
4267
4486
|
it "should raise an error after nil assignment of authority segment" do
|
4268
|
-
expect
|
4487
|
+
expect do
|
4269
4488
|
# This would create an invalid URI
|
4270
4489
|
@uri.authority = nil
|
4271
|
-
end
|
4490
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
4272
4491
|
end
|
4273
4492
|
end
|
4274
4493
|
|
@@ -4497,12 +4716,12 @@ describe Addressable::URI, "when parsed from " +
|
|
4497
4716
|
end
|
4498
4717
|
|
4499
4718
|
it "should raise an error if routing is attempted" do
|
4500
|
-
expect
|
4719
|
+
expect do
|
4501
4720
|
@uri.route_to("http://example.com/")
|
4502
|
-
end
|
4503
|
-
expect
|
4721
|
+
end.to raise_error(ArgumentError, /\/\/example.com\//)
|
4722
|
+
expect do
|
4504
4723
|
@uri.route_from("http://example.com/")
|
4505
|
-
end
|
4724
|
+
end.to raise_error(ArgumentError, /\/\/example.com\//)
|
4506
4725
|
end
|
4507
4726
|
|
4508
4727
|
it "should have a 'null' origin" do
|
@@ -4596,9 +4815,9 @@ end
|
|
4596
4815
|
describe Addressable::URI, "when parsed from " +
|
4597
4816
|
"'http://under_score.example.com/'" do
|
4598
4817
|
it "should not cause an error" do
|
4599
|
-
expect
|
4818
|
+
expect do
|
4600
4819
|
Addressable::URI.parse("http://under_score.example.com/")
|
4601
|
-
end
|
4820
|
+
end.not_to raise_error
|
4602
4821
|
end
|
4603
4822
|
end
|
4604
4823
|
|
@@ -4670,9 +4889,9 @@ describe Addressable::URI, "when parsed from '?one=1&two=2&three=3'" do
|
|
4670
4889
|
end
|
4671
4890
|
|
4672
4891
|
it "should raise an error for invalid return type values" do
|
4673
|
-
expect
|
4674
|
-
@uri.query_values(
|
4675
|
-
end
|
4892
|
+
expect do
|
4893
|
+
@uri.query_values(Integer)
|
4894
|
+
end.to raise_error(ArgumentError)
|
4676
4895
|
end
|
4677
4896
|
|
4678
4897
|
it "should have the correct array query values" do
|
@@ -5273,9 +5492,9 @@ describe Addressable::URI, "with a base uri of 'http://a/b/c/d;p?q'" do
|
|
5273
5492
|
end
|
5274
5493
|
|
5275
5494
|
it "when joined with a bogus object a TypeError should be raised" do
|
5276
|
-
expect
|
5495
|
+
expect do
|
5277
5496
|
Addressable::URI.join(@uri, 42)
|
5278
|
-
end
|
5497
|
+
end.to raise_error(TypeError)
|
5279
5498
|
end
|
5280
5499
|
end
|
5281
5500
|
|
@@ -5302,9 +5521,9 @@ end
|
|
5302
5521
|
|
5303
5522
|
describe Addressable::URI, "when converting a bogus path" do
|
5304
5523
|
it "should raise a TypeError" do
|
5305
|
-
expect
|
5524
|
+
expect do
|
5306
5525
|
Addressable::URI.convert_path(42)
|
5307
|
-
end
|
5526
|
+
end.to raise_error(TypeError)
|
5308
5527
|
end
|
5309
5528
|
end
|
5310
5529
|
|
@@ -5357,6 +5576,31 @@ describe Addressable::URI, "when given the path '/one/two/'" do
|
|
5357
5576
|
end
|
5358
5577
|
end
|
5359
5578
|
|
5579
|
+
describe Addressable::URI, "when given the tld " do
|
5580
|
+
it "'uk' should have a tld of 'uk'" do
|
5581
|
+
uri = Addressable::URI.parse("http://example.com")
|
5582
|
+
uri.tld = "uk"
|
5583
|
+
|
5584
|
+
expect(uri.tld).to eq("uk")
|
5585
|
+
end
|
5586
|
+
|
5587
|
+
context "which " do
|
5588
|
+
let (:uri) { Addressable::URI.parse("http://www.comrade.net/path/to/source/") }
|
5589
|
+
|
5590
|
+
it "contains a subdomain" do
|
5591
|
+
uri.tld = "co.uk"
|
5592
|
+
|
5593
|
+
expect(uri.to_s).to eq("http://www.comrade.co.uk/path/to/source/")
|
5594
|
+
end
|
5595
|
+
|
5596
|
+
it "is part of the domain" do
|
5597
|
+
uri.tld = "com"
|
5598
|
+
|
5599
|
+
expect(uri.to_s).to eq("http://www.comrade.com/path/to/source/")
|
5600
|
+
end
|
5601
|
+
end
|
5602
|
+
end
|
5603
|
+
|
5360
5604
|
describe Addressable::URI, "when given the path " +
|
5361
5605
|
"'c:\\windows\\My Documents 100%20\\foo.txt'" do
|
5362
5606
|
before do
|
@@ -5474,9 +5718,9 @@ describe Addressable::URI, "when parsing a non-String object" do
|
|
5474
5718
|
end
|
5475
5719
|
|
5476
5720
|
it "should raise a TypeError for objects than cannot be converted" do
|
5477
|
-
expect
|
5721
|
+
expect do
|
5478
5722
|
Addressable::URI.parse(42)
|
5479
|
-
end
|
5723
|
+
end.to raise_error(TypeError)
|
5480
5724
|
end
|
5481
5725
|
|
5482
5726
|
it "should correctly parse heuristically anything with a 'to_str' method" do
|
@@ -5484,9 +5728,9 @@ describe Addressable::URI, "when parsing a non-String object" do
|
|
5484
5728
|
end
|
5485
5729
|
|
5486
5730
|
it "should raise a TypeError for objects than cannot be converted" do
|
5487
|
-
expect
|
5731
|
+
expect do
|
5488
5732
|
Addressable::URI.heuristic_parse(42)
|
5489
|
-
end
|
5733
|
+
end.to raise_error(TypeError)
|
5490
5734
|
end
|
5491
5735
|
end
|
5492
5736
|
|
@@ -5530,9 +5774,9 @@ end
|
|
5530
5774
|
|
5531
5775
|
describe Addressable::URI, "when form encoding a non-Array object" do
|
5532
5776
|
it "should raise a TypeError for objects than cannot be converted" do
|
5533
|
-
expect
|
5777
|
+
expect do
|
5534
5778
|
Addressable::URI.form_encode(42)
|
5535
|
-
end
|
5779
|
+
end.to raise_error(TypeError)
|
5536
5780
|
end
|
5537
5781
|
end
|
5538
5782
|
|
@@ -5598,9 +5842,9 @@ describe Addressable::URI, "when form unencoding a non-String object" do
|
|
5598
5842
|
end
|
5599
5843
|
|
5600
5844
|
it "should raise a TypeError for objects than cannot be converted" do
|
5601
|
-
expect
|
5845
|
+
expect do
|
5602
5846
|
Addressable::URI.form_unencode(42)
|
5603
|
-
end
|
5847
|
+
end.to raise_error(TypeError)
|
5604
5848
|
end
|
5605
5849
|
end
|
5606
5850
|
|
@@ -5610,15 +5854,15 @@ describe Addressable::URI, "when normalizing a non-String object" do
|
|
5610
5854
|
end
|
5611
5855
|
|
5612
5856
|
it "should raise a TypeError for objects than cannot be converted" do
|
5613
|
-
expect
|
5857
|
+
expect do
|
5614
5858
|
Addressable::URI.normalize_component(42)
|
5615
|
-
end
|
5859
|
+
end.to raise_error(TypeError)
|
5616
5860
|
end
|
5617
5861
|
|
5618
5862
|
it "should raise a TypeError for objects than cannot be converted" do
|
5619
|
-
expect
|
5863
|
+
expect do
|
5620
5864
|
Addressable::URI.normalize_component("component", 42)
|
5621
|
-
end
|
5865
|
+
end.to raise_error(TypeError)
|
5622
5866
|
end
|
5623
5867
|
end
|
5624
5868
|
|
@@ -5690,6 +5934,18 @@ describe Addressable::URI, "when normalizing a string but leaving some character
|
|
5690
5934
|
end
|
5691
5935
|
end
|
5692
5936
|
|
5937
|
+
describe Addressable::URI, "when encoding IP literals" do
|
5938
|
+
it "should work for IPv4" do
|
5939
|
+
input = "http://127.0.0.1/"
|
5940
|
+
expect(Addressable::URI.encode(input)).to eq(input)
|
5941
|
+
end
|
5942
|
+
|
5943
|
+
it "should work for IPv6" do
|
5944
|
+
input = "http://[fe80::200:f8ff:fe21:67cf]/"
|
5945
|
+
expect(Addressable::URI.encode(input)).to eq(input)
|
5946
|
+
end
|
5947
|
+
end
|
5948
|
+
|
5693
5949
|
describe Addressable::URI, "when encoding a string with existing encodings to upcase" do
|
5694
5950
|
it "should result in correct percent encoded sequence" do
|
5695
5951
|
expect(Addressable::URI.encode_component("JK%4c", "0-9A-IKM-Za-z%", "L")).to eq("%4AK%4C")
|
@@ -5762,41 +6018,41 @@ end
|
|
5762
6018
|
|
5763
6019
|
describe Addressable::URI, "when unencoding a bogus object" do
|
5764
6020
|
it "should raise a TypeError" do
|
5765
|
-
expect
|
6021
|
+
expect do
|
5766
6022
|
Addressable::URI.unencode_component(42)
|
5767
|
-
end
|
6023
|
+
end.to raise_error(TypeError)
|
5768
6024
|
end
|
5769
6025
|
|
5770
6026
|
it "should raise a TypeError" do
|
5771
|
-
expect
|
6027
|
+
expect do
|
5772
6028
|
Addressable::URI.unencode("/path?g%C3%BCnther", Integer)
|
5773
|
-
end
|
6029
|
+
end.to raise_error(TypeError)
|
5774
6030
|
end
|
5775
6031
|
end
|
5776
6032
|
|
5777
6033
|
describe Addressable::URI, "when encoding a bogus object" do
|
5778
6034
|
it "should raise a TypeError" do
|
5779
|
-
expect
|
6035
|
+
expect do
|
5780
6036
|
Addressable::URI.encode(Object.new)
|
5781
|
-
end
|
6037
|
+
end.to raise_error(TypeError)
|
5782
6038
|
end
|
5783
6039
|
|
5784
6040
|
it "should raise a TypeError" do
|
5785
|
-
expect
|
6041
|
+
expect do
|
5786
6042
|
Addressable::URI.normalized_encode(Object.new)
|
5787
|
-
end
|
6043
|
+
end.to raise_error(TypeError)
|
5788
6044
|
end
|
5789
6045
|
|
5790
6046
|
it "should raise a TypeError" do
|
5791
|
-
expect
|
6047
|
+
expect do
|
5792
6048
|
Addressable::URI.encode_component("günther", Object.new)
|
5793
|
-
end
|
6049
|
+
end.to raise_error(TypeError)
|
5794
6050
|
end
|
5795
6051
|
|
5796
6052
|
it "should raise a TypeError" do
|
5797
|
-
expect
|
6053
|
+
expect do
|
5798
6054
|
Addressable::URI.encode_component(Object.new)
|
5799
|
-
end
|
6055
|
+
end.to raise_error(TypeError)
|
5800
6056
|
end
|
5801
6057
|
end
|
5802
6058
|
|
@@ -5812,9 +6068,9 @@ describe Addressable::URI, "when given the input " +
|
|
5812
6068
|
end
|
5813
6069
|
|
5814
6070
|
it "should not raise error when frozen" do
|
5815
|
-
expect
|
6071
|
+
expect do
|
5816
6072
|
Addressable::URI.heuristic_parse(@input).freeze.to_s
|
5817
|
-
end
|
6073
|
+
end.not_to raise_error
|
5818
6074
|
end
|
5819
6075
|
end
|
5820
6076
|
|
@@ -5878,6 +6134,136 @@ describe Addressable::URI, "when given the input " +
|
|
5878
6134
|
end
|
5879
6135
|
end
|
5880
6136
|
|
6137
|
+
describe Addressable::URI, "when given the input " +
|
6138
|
+
"'http://prefix\\.example.com/'" do
|
6139
|
+
before do
|
6140
|
+
@input = "http://prefix\\.example.com/"
|
6141
|
+
end
|
6142
|
+
|
6143
|
+
it "should heuristically parse to 'http://prefix/.example.com/'" do
|
6144
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6145
|
+
expect(@uri.authority).to eq("prefix")
|
6146
|
+
expect(@uri.to_s).to eq("http://prefix/.example.com/")
|
6147
|
+
end
|
6148
|
+
|
6149
|
+
it "should heuristically parse to 'http://prefix/.example.com/' " +
|
6150
|
+
"even with a scheme hint of 'ftp'" do
|
6151
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6152
|
+
expect(@uri.to_s).to eq("http://prefix/.example.com/")
|
6153
|
+
end
|
6154
|
+
end
|
6155
|
+
|
6156
|
+
describe Addressable::URI, "when given the input " +
|
6157
|
+
"'http://p:\\/'" do
|
6158
|
+
before do
|
6159
|
+
@input = "http://p:\\/"
|
6160
|
+
end
|
6161
|
+
|
6162
|
+
it "should heuristically parse to 'http://p//'" do
|
6163
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6164
|
+
expect(@uri.authority).to eq("p")
|
6165
|
+
expect(@uri.to_s).to eq("http://p//")
|
6166
|
+
end
|
6167
|
+
|
6168
|
+
it "should heuristically parse to 'http://p//' " +
|
6169
|
+
"even with a scheme hint of 'ftp'" do
|
6170
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6171
|
+
expect(@uri.to_s).to eq("http://p//")
|
6172
|
+
end
|
6173
|
+
end
|
6174
|
+
|
6175
|
+
describe Addressable::URI, "when given the input " +
|
6176
|
+
"'http://p://'" do
|
6177
|
+
before do
|
6178
|
+
@input = "http://p://"
|
6179
|
+
end
|
6180
|
+
|
6181
|
+
it "should heuristically parse to 'http://p//'" do
|
6182
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6183
|
+
expect(@uri.authority).to eq("p")
|
6184
|
+
expect(@uri.to_s).to eq("http://p//")
|
6185
|
+
end
|
6186
|
+
|
6187
|
+
it "should heuristically parse to 'http://p//' " +
|
6188
|
+
"even with a scheme hint of 'ftp'" do
|
6189
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6190
|
+
expect(@uri.to_s).to eq("http://p//")
|
6191
|
+
end
|
6192
|
+
end
|
6193
|
+
|
6194
|
+
describe Addressable::URI, "when given the input " +
|
6195
|
+
"'http://p://p'" do
|
6196
|
+
before do
|
6197
|
+
@input = "http://p://p"
|
6198
|
+
end
|
6199
|
+
|
6200
|
+
it "should heuristically parse to 'http://p//p'" do
|
6201
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6202
|
+
expect(@uri.authority).to eq("p")
|
6203
|
+
expect(@uri.to_s).to eq("http://p//p")
|
6204
|
+
end
|
6205
|
+
|
6206
|
+
it "should heuristically parse to 'http://p//p' " +
|
6207
|
+
"even with a scheme hint of 'ftp'" do
|
6208
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6209
|
+
expect(@uri.to_s).to eq("http://p//p")
|
6210
|
+
end
|
6211
|
+
end
|
6212
|
+
|
6213
|
+
describe Addressable::URI, "when given the input " +
|
6214
|
+
"'http://prefix .example.com/'" do
|
6215
|
+
before do
|
6216
|
+
@input = "http://prefix .example.com/"
|
6217
|
+
end
|
6218
|
+
|
6219
|
+
# Justification here being that no browser actually tries to resolve this.
|
6220
|
+
# They all treat this as a web search.
|
6221
|
+
it "should heuristically parse to 'http://prefix%20.example.com/'" do
|
6222
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6223
|
+
expect(@uri.authority).to eq("prefix%20.example.com")
|
6224
|
+
expect(@uri.to_s).to eq("http://prefix%20.example.com/")
|
6225
|
+
end
|
6226
|
+
|
6227
|
+
it "should heuristically parse to 'http://prefix%20.example.com/' " +
|
6228
|
+
"even with a scheme hint of 'ftp'" do
|
6229
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6230
|
+
expect(@uri.to_s).to eq("http://prefix%20.example.com/")
|
6231
|
+
end
|
6232
|
+
end
|
6233
|
+
|
6234
|
+
describe Addressable::URI, "when given the input " +
|
6235
|
+
"' http://www.example.com/ '" do
|
6236
|
+
before do
|
6237
|
+
@input = " http://www.example.com/ "
|
6238
|
+
end
|
6239
|
+
|
6240
|
+
it "should heuristically parse to 'http://prefix%20.example.com/'" do
|
6241
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6242
|
+
expect(@uri.scheme).to eq("http")
|
6243
|
+
expect(@uri.path).to eq("/")
|
6244
|
+
expect(@uri.to_s).to eq("http://www.example.com/")
|
6245
|
+
end
|
6246
|
+
end
|
6247
|
+
|
6248
|
+
describe Addressable::URI, "when given the input " +
|
6249
|
+
"'http://prefix%2F.example.com/'" do
|
6250
|
+
before do
|
6251
|
+
@input = "http://prefix%2F.example.com/"
|
6252
|
+
end
|
6253
|
+
|
6254
|
+
it "should heuristically parse to 'http://prefix%2F.example.com/'" do
|
6255
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6256
|
+
expect(@uri.authority).to eq("prefix%2F.example.com")
|
6257
|
+
expect(@uri.to_s).to eq("http://prefix%2F.example.com/")
|
6258
|
+
end
|
6259
|
+
|
6260
|
+
it "should heuristically parse to 'http://prefix%2F.example.com/' " +
|
6261
|
+
"even with a scheme hint of 'ftp'" do
|
6262
|
+
@uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'})
|
6263
|
+
expect(@uri.to_s).to eq("http://prefix%2F.example.com/")
|
6264
|
+
end
|
6265
|
+
end
|
6266
|
+
|
5881
6267
|
describe Addressable::URI, "when given the input " +
|
5882
6268
|
"'/path/to/resource'" do
|
5883
6269
|
before do
|
@@ -5964,6 +6350,18 @@ describe Addressable::URI, "when given the input " +
|
|
5964
6350
|
end
|
5965
6351
|
end
|
5966
6352
|
|
6353
|
+
describe Addressable::URI, "when given the input which "\
|
6354
|
+
"start with digits and has specified port" do
|
6355
|
+
before do
|
6356
|
+
@input = "7777.example.org:8089"
|
6357
|
+
end
|
6358
|
+
|
6359
|
+
it "should heuristically parse to 'http://7777.example.org:8089'" do
|
6360
|
+
uri = Addressable::URI.heuristic_parse(@input)
|
6361
|
+
expect(uri.to_s).to eq("http://7777.example.org:8089")
|
6362
|
+
end
|
6363
|
+
end
|
6364
|
+
|
5967
6365
|
describe Addressable::URI, "when given the input " +
|
5968
6366
|
"'feed:///example.com'" do
|
5969
6367
|
before do
|
@@ -5976,6 +6374,18 @@ describe Addressable::URI, "when given the input " +
|
|
5976
6374
|
end
|
5977
6375
|
end
|
5978
6376
|
|
6377
|
+
describe Addressable::URI, "when given the input " +
|
6378
|
+
"'file://localhost/path/to/resource/'" do
|
6379
|
+
before do
|
6380
|
+
@input = "file://localhost/path/to/resource/"
|
6381
|
+
end
|
6382
|
+
|
6383
|
+
it "should heuristically parse to 'file:///path/to/resource/'" do
|
6384
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6385
|
+
expect(@uri.to_s).to eq("file:///path/to/resource/")
|
6386
|
+
end
|
6387
|
+
end
|
6388
|
+
|
5979
6389
|
describe Addressable::URI, "when given the input " +
|
5980
6390
|
"'file://path/to/resource/'" do
|
5981
6391
|
before do
|
@@ -5988,6 +6398,18 @@ describe Addressable::URI, "when given the input " +
|
|
5988
6398
|
end
|
5989
6399
|
end
|
5990
6400
|
|
6401
|
+
describe Addressable::URI, "when given the input " +
|
6402
|
+
"'file://///path/to/resource/'" do
|
6403
|
+
before do
|
6404
|
+
@input = "file:///////path/to/resource/"
|
6405
|
+
end
|
6406
|
+
|
6407
|
+
it "should heuristically parse to 'file:////path/to/resource/'" do
|
6408
|
+
@uri = Addressable::URI.heuristic_parse(@input)
|
6409
|
+
expect(@uri.to_s).to eq("file:////path/to/resource/")
|
6410
|
+
end
|
6411
|
+
end
|
6412
|
+
|
5991
6413
|
describe Addressable::URI, "when given the input " +
|
5992
6414
|
"'feed://http://example.com'" do
|
5993
6415
|
before do
|
@@ -6012,6 +6434,44 @@ describe Addressable::URI, "when given the input " +
|
|
6012
6434
|
end
|
6013
6435
|
end
|
6014
6436
|
|
6437
|
+
describe Addressable::URI, "when given the input: 'user@domain.com'" do
|
6438
|
+
before do
|
6439
|
+
@input = "user@domain.com"
|
6440
|
+
end
|
6441
|
+
|
6442
|
+
context "for heuristic parse" do
|
6443
|
+
it "should remain 'mailto:user@domain.com'" do
|
6444
|
+
uri = Addressable::URI.heuristic_parse("mailto:#{@input}")
|
6445
|
+
expect(uri.to_s).to eq("mailto:user@domain.com")
|
6446
|
+
end
|
6447
|
+
|
6448
|
+
it "should have a scheme of 'mailto'" do
|
6449
|
+
uri = Addressable::URI.heuristic_parse(@input)
|
6450
|
+
expect(uri.to_s).to eq("mailto:user@domain.com")
|
6451
|
+
expect(uri.scheme).to eq("mailto")
|
6452
|
+
end
|
6453
|
+
|
6454
|
+
it "should remain 'acct:user@domain.com'" do
|
6455
|
+
uri = Addressable::URI.heuristic_parse("acct:#{@input}")
|
6456
|
+
expect(uri.to_s).to eq("acct:user@domain.com")
|
6457
|
+
end
|
6458
|
+
|
6459
|
+
context "HTTP" do
|
6460
|
+
before do
|
6461
|
+
@uri = Addressable::URI.heuristic_parse("http://#{@input}/")
|
6462
|
+
end
|
6463
|
+
|
6464
|
+
it "should remain 'http://user@domain.com/'" do
|
6465
|
+
expect(@uri.to_s).to eq("http://user@domain.com/")
|
6466
|
+
end
|
6467
|
+
|
6468
|
+
it "should have the username 'user' for HTTP basic authentication" do
|
6469
|
+
expect(@uri.user).to eq("user")
|
6470
|
+
end
|
6471
|
+
end
|
6472
|
+
end
|
6473
|
+
end
|
6474
|
+
|
6015
6475
|
describe Addressable::URI, "when assigning query values" do
|
6016
6476
|
before do
|
6017
6477
|
@uri = Addressable::URI.new
|
@@ -6023,54 +6483,54 @@ describe Addressable::URI, "when assigning query values" do
|
|
6023
6483
|
end
|
6024
6484
|
|
6025
6485
|
it "should raise an error attempting to assign {'a' => {'b' => ['c']}}" do
|
6026
|
-
expect
|
6486
|
+
expect do
|
6027
6487
|
@uri.query_values = { 'a' => {'b' => ['c'] } }
|
6028
|
-
end
|
6488
|
+
end.to raise_error(TypeError)
|
6029
6489
|
end
|
6030
6490
|
|
6031
6491
|
it "should raise an error attempting to assign " +
|
6032
6492
|
"{:b => '2', :a => {:c => '1'}}" do
|
6033
|
-
expect
|
6493
|
+
expect do
|
6034
6494
|
@uri.query_values = {:b => '2', :a => {:c => '1'}}
|
6035
|
-
end
|
6495
|
+
end.to raise_error(TypeError)
|
6036
6496
|
end
|
6037
6497
|
|
6038
6498
|
it "should raise an error attempting to assign " +
|
6039
6499
|
"{:a => 'a', :b => [{:c => 'c', :d => 'd'}, " +
|
6040
6500
|
"{:e => 'e', :f => 'f'}]}" do
|
6041
|
-
expect
|
6501
|
+
expect do
|
6042
6502
|
@uri.query_values = {
|
6043
6503
|
:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]
|
6044
6504
|
}
|
6045
|
-
end
|
6505
|
+
end.to raise_error(TypeError)
|
6046
6506
|
end
|
6047
6507
|
|
6048
6508
|
it "should raise an error attempting to assign " +
|
6049
6509
|
"{:a => 'a', :b => [{:c => true, :d => 'd'}, " +
|
6050
6510
|
"{:e => 'e', :f => 'f'}]}" do
|
6051
|
-
expect
|
6511
|
+
expect do
|
6052
6512
|
@uri.query_values = {
|
6053
6513
|
:a => 'a', :b => [{:c => true, :d => 'd'}, {:e => 'e', :f => 'f'}]
|
6054
6514
|
}
|
6055
|
-
end
|
6515
|
+
end.to raise_error(TypeError)
|
6056
6516
|
end
|
6057
6517
|
|
6058
6518
|
it "should raise an error attempting to assign " +
|
6059
6519
|
"{:a => 'a', :b => {:c => true, :d => 'd'}}" do
|
6060
|
-
expect
|
6520
|
+
expect do
|
6061
6521
|
@uri.query_values = {
|
6062
6522
|
:a => 'a', :b => {:c => true, :d => 'd'}
|
6063
6523
|
}
|
6064
|
-
end
|
6524
|
+
end.to raise_error(TypeError)
|
6065
6525
|
end
|
6066
6526
|
|
6067
6527
|
it "should raise an error attempting to assign " +
|
6068
6528
|
"{:a => 'a', :b => {:c => true, :d => 'd'}}" do
|
6069
|
-
expect
|
6529
|
+
expect do
|
6070
6530
|
@uri.query_values = {
|
6071
6531
|
:a => 'a', :b => {:c => true, :d => 'd'}
|
6072
6532
|
}
|
6073
|
-
end
|
6533
|
+
end.to raise_error(TypeError)
|
6074
6534
|
end
|
6075
6535
|
|
6076
6536
|
it "should correctly assign {:a => 1, :b => 1.5}" do
|
@@ -6081,13 +6541,13 @@ describe Addressable::URI, "when assigning query values" do
|
|
6081
6541
|
it "should raise an error attempting to assign " +
|
6082
6542
|
"{:z => 1, :f => [2, {999.1 => [3,'4']}, ['h', 'i']], " +
|
6083
6543
|
":a => {:b => ['c', 'd'], :e => true, :y => 0.5}}" do
|
6084
|
-
expect
|
6544
|
+
expect do
|
6085
6545
|
@uri.query_values = {
|
6086
6546
|
:z => 1,
|
6087
6547
|
:f => [ 2, {999.1 => [3,'4']}, ['h', 'i'] ],
|
6088
6548
|
:a => { :b => ['c', 'd'], :e => true, :y => 0.5 }
|
6089
6549
|
}
|
6090
|
-
end
|
6550
|
+
end.to raise_error(TypeError)
|
6091
6551
|
end
|
6092
6552
|
|
6093
6553
|
it "should correctly assign {}" do
|
@@ -6137,7 +6597,7 @@ describe Addressable::URI, "when assigning path values" do
|
|
6137
6597
|
@uri.path = "acct:bob@sporkmonger.com"
|
6138
6598
|
expect(@uri.path).to eq("acct:bob@sporkmonger.com")
|
6139
6599
|
expect(@uri.normalize.to_str).to eq("acct%2Fbob@sporkmonger.com")
|
6140
|
-
expect
|
6600
|
+
expect { @uri.to_s }.to raise_error(
|
6141
6601
|
Addressable::URI::InvalidURIError
|
6142
6602
|
)
|
6143
6603
|
end
|
@@ -6155,26 +6615,26 @@ describe Addressable::URI, "when assigning path values" do
|
|
6155
6615
|
end
|
6156
6616
|
|
6157
6617
|
it "should not allow relative paths to be assigned on absolute URIs" do
|
6158
|
-
expect
|
6618
|
+
expect do
|
6159
6619
|
@uri.scheme = "http"
|
6160
6620
|
@uri.host = "example.com"
|
6161
6621
|
@uri.path = "acct:bob@sporkmonger.com"
|
6162
|
-
end
|
6622
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
6163
6623
|
end
|
6164
6624
|
|
6165
6625
|
it "should not allow relative paths to be assigned on absolute URIs" do
|
6166
|
-
expect
|
6626
|
+
expect do
|
6167
6627
|
@uri.path = "acct:bob@sporkmonger.com"
|
6168
6628
|
@uri.scheme = "http"
|
6169
6629
|
@uri.host = "example.com"
|
6170
|
-
end
|
6630
|
+
end.to raise_error(Addressable::URI::InvalidURIError)
|
6171
6631
|
end
|
6172
6632
|
|
6173
6633
|
it "should not allow relative paths to be assigned on absolute URIs" do
|
6174
|
-
expect
|
6634
|
+
expect do
|
6175
6635
|
@uri.path = "uuid:0b3ecf60-3f93-11df-a9c3-001f5bfffe12"
|
6176
6636
|
@uri.scheme = "urn"
|
6177
|
-
end
|
6637
|
+
end.not_to raise_error
|
6178
6638
|
end
|
6179
6639
|
end
|
6180
6640
|
|