fakeweb 1.2.4 → 1.2.5

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ fakeweb (1.2.5)
2
+
3
+ * fix handling of userinfo strings that contain percent-encoded unsafe
4
+ characters [Chris Kampmeier, Ken Mayer]
5
+
6
+ * fix that exact matches against strings/URIs with the :any method had a lower
7
+ precedence than regex matches using a real HTTP method (exact matches now
8
+ always take precedence) [Chris Kampmeier]
9
+
10
+ * change request handling to raise an exception when more than one registered
11
+ regex matches a request URI [Chris Kampmeier]
12
+
13
+
1
14
  fakeweb (1.2.4)
2
15
 
3
16
  * add experimental support for matching URIs via regular expressions
data/Rakefile CHANGED
@@ -1,7 +1,15 @@
1
+ puts "Using ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
2
+
1
3
  require 'rubygems'
2
4
  require 'rake/gempackagetask'
3
5
  require 'rake/testtask'
4
- require 'rake/rdoctask'
6
+ begin
7
+ require 'rdoc/task'
8
+ rescue LoadError
9
+ puts "\nIt looks like you're using an old version of RDoc, but FakeWeb requires a newer one."
10
+ puts "You can try upgrading with `sudo gem install rdoc`.\n\n"
11
+ raise
12
+ end
5
13
 
6
14
  task :default => :test
7
15
 
@@ -12,13 +20,12 @@ Rake::TestTask.new :test do |test|
12
20
  end
13
21
 
14
22
  desc "Generate Documentation"
15
- Rake::RDocTask.new do |rdoc|
23
+ RDoc::Task.new do |rdoc|
16
24
  rdoc.main = "README.rdoc"
17
25
  rdoc.rdoc_dir = "doc"
18
26
  rdoc.rdoc_files.include("README.rdoc", "CHANGELOG", "LICENSE.txt", "lib/*.rb")
19
27
  rdoc.title = "FakeWeb API Documentation"
20
- rdoc.options << '--line-numbers' << '--inline-source'
21
- rdoc.options << '--charset' << 'utf-8'
28
+ rdoc.options << '--line-numbers' << '--charset' << 'utf-8'
22
29
  end
23
30
 
24
31
  desc %{Update ".manifest" with the latest list of project filenames. Respect\
@@ -59,7 +66,6 @@ else
59
66
  t.test_files = FileList['test/**/test*.rb']
60
67
  t.rcov_opts << "--sort coverage"
61
68
  t.rcov_opts << "--exclude gems"
62
- t.rcov_opts << "--no-validator-links"
63
69
  end
64
70
  end
65
71
 
@@ -5,6 +5,7 @@ require 'fake_web/registry'
5
5
  require 'fake_web/response'
6
6
  require 'fake_web/responder'
7
7
  require 'fake_web/stub_socket'
8
+ require 'fake_web/utility'
8
9
 
9
10
  module FakeWeb
10
11
 
@@ -45,6 +46,11 @@ module FakeWeb
45
46
  # stubbed.
46
47
  class NetConnectNotAllowedError < StandardError; end;
47
48
 
49
+ # This exception is raised if a Net::HTTP request matches more than one of
50
+ # the regular expression-based stubs you've registered. To fix the problem,
51
+ # disambiguate the regular expressions by making them more specific.
52
+ class MultipleMatchingRegexpsError < StandardError; end;
53
+
48
54
  # call-seq:
49
55
  # FakeWeb.register_uri(method, uri, options)
50
56
  #
@@ -41,7 +41,8 @@ module Net #:nodoc: all
41
41
  path = URI.parse(request.path).request_uri if request.path =~ /^http/
42
42
 
43
43
  if request["authorization"] =~ /^Basic /
44
- userinfo = request["authorization"].sub(/^Basic /, "").unpack("m").first + "@"
44
+ userinfo = FakeWeb::Utility.decode_userinfo_from_header(request["authorization"])
45
+ userinfo = FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo) + "@"
45
46
  else
46
47
  userinfo = ""
47
48
  end
@@ -56,8 +57,7 @@ module Net #:nodoc: all
56
57
  connect_without_fakeweb
57
58
  request_without_fakeweb(request, body, &block)
58
59
  else
59
- uri.sub!(":80/", "/") if uri =~ %r|^http://|
60
- uri.sub!(":443/", "/") if uri =~ %r|^https://|
60
+ uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
61
61
  raise FakeWeb::NetConnectNotAllowedError,
62
62
  "Real HTTP connections are disabled. Unregistered request: #{request.method} #{uri}"
63
63
  end
@@ -2,60 +2,30 @@ module FakeWeb
2
2
  class Registry #:nodoc:
3
3
  include Singleton
4
4
 
5
- attr_accessor :uri_map, :pattern_map
5
+ attr_accessor :uri_map
6
6
 
7
7
  def initialize
8
8
  clean_registry
9
9
  end
10
10
 
11
11
  def clean_registry
12
- self.uri_map = Hash.new do |hash, key|
13
- hash[key] = Hash.new(&hash.default_proc)
14
- end
15
- self.pattern_map = []
12
+ self.uri_map = Hash.new { |hash, key| hash[key] = {} }
16
13
  end
17
14
 
18
15
  def register_uri(method, uri, options)
19
- case uri
20
- when URI, String
21
- uri_map[normalize_uri(uri)][method] = [*[options]].flatten.collect do |option|
22
- FakeWeb::Responder.new(method, uri, option, option[:times])
23
- end
24
- when Regexp
25
- responders = [*[options]].flatten.collect do |option|
26
- FakeWeb::Responder.new(method, uri, option, option[:times])
27
- end
28
- pattern_map << {:pattern => uri,
29
- :responders => responders,
30
- :method => method }
31
-
16
+ uri_map[normalize_uri(uri)][method] = [*[options]].flatten.collect do |option|
17
+ FakeWeb::Responder.new(method, uri, option, option[:times])
32
18
  end
33
19
  end
34
20
 
35
21
  def registered_uri?(method, uri)
36
22
  normalized_uri = normalize_uri(uri)
37
- uri_map[normalized_uri].has_key?(method) || uri_map[normalized_uri].has_key?(:any) || pattern_map_matches?(method, uri) || pattern_map_matches?(:any, uri)
38
- end
39
-
40
- def registered_uri(method, uri)
41
- uri = normalize_uri(uri)
42
- registered = registered_uri?(method, uri)
43
- if registered && uri_map[uri].has_key?(method)
44
- uri_map[uri][method]
45
- elsif registered && pattern_map_matches?(method, uri)
46
- pattern_map_matches(method, uri).map{|m| m[:responders]}.flatten
47
- elsif registered && uri_map[uri].has_key?(:any)
48
- uri_map[uri][:any]
49
- elsif registered && pattern_map_matches(:any, uri)
50
- pattern_map_matches(:any, uri).map{|m| m[:responders]}.flatten
51
- else
52
- nil
53
- end
23
+ !responses_for(method, uri).empty?
54
24
  end
55
25
 
56
26
  def response_for(method, uri, &block)
57
- responses = registered_uri(method, uri)
58
- return nil if responses.nil?
27
+ responses = responses_for(method, uri)
28
+ return nil if responses.empty?
59
29
 
60
30
  next_response = responses.last
61
31
  responses.each do |response|
@@ -69,24 +39,47 @@ module FakeWeb
69
39
  next_response.response(&block)
70
40
  end
71
41
 
72
- def pattern_map_matches?(method, uri)
73
- !pattern_map_matches(method, uri).empty?
74
- end
75
42
 
76
- def pattern_map_matches(method, uri)
77
- uri = uri.to_s
78
- uri.sub!(":80/", "/") if uri =~ %r|^http://|
79
- uri.sub!(":443/", "/") if uri =~ %r|^https://|
80
- pattern_map.select { |p| uri.match(p[:pattern]) && p[:method] == method }
43
+ private
44
+
45
+ def responses_for(method, uri)
46
+ uri = normalize_uri(uri)
47
+
48
+ if uri_map[uri].has_key?(method)
49
+ uri_map[uri][method]
50
+ elsif uri_map[uri].has_key?(:any)
51
+ uri_map[uri][:any]
52
+ elsif uri_map_matches?(method, uri)
53
+ uri_map_matches(method, uri)
54
+ elsif uri_map_matches(:any, uri)
55
+ uri_map_matches(:any, uri)
56
+ else
57
+ []
58
+ end
81
59
  end
82
60
 
83
- def pattern_map_match(method, uri)
84
- pattern_map_matches(method, uri).first
61
+ def uri_map_matches?(method, uri)
62
+ !uri_map_matches(method, uri).nil?
85
63
  end
86
64
 
87
- private
65
+ def uri_map_matches(method, uri)
66
+ uri = normalize_uri(uri.to_s).to_s
67
+ uri = Utility.strip_default_port_from_uri(uri)
68
+
69
+ matches = uri_map.select { |registered_uri, method_hash|
70
+ registered_uri.is_a?(Regexp) && uri.match(registered_uri) && method_hash.has_key?(method)
71
+ }
72
+
73
+ if matches.size > 1
74
+ raise MultipleMatchingRegexpsError,
75
+ "More than one regular expression matched this request: #{method.to_s.upcase} #{uri}"
76
+ end
77
+
78
+ matches.map { |_, method_hash| method_hash[method] }.first
79
+ end
88
80
 
89
81
  def normalize_uri(uri)
82
+ return uri if uri.is_a?(Regexp)
90
83
  normalized_uri =
91
84
  case uri
92
85
  when URI then uri
@@ -0,0 +1,22 @@
1
+ module FakeWeb
2
+ module Utility #:nodoc:
3
+
4
+ def self.decode_userinfo_from_header(header)
5
+ header.sub(/^Basic /, "").unpack("m").first
6
+ end
7
+
8
+ def self.encode_unsafe_chars_in_userinfo(userinfo)
9
+ unsafe_in_userinfo = /[^#{URI::REGEXP::PATTERN::UNRESERVED};&=+$,]|^(#{URI::REGEXP::PATTERN::ESCAPED})/
10
+ userinfo.split(":").map { |part| URI.escape(part, unsafe_in_userinfo) }.join(":")
11
+ end
12
+
13
+ def self.strip_default_port_from_uri(uri)
14
+ case uri
15
+ when %r{^http://} then uri.sub(%r{:80(/|$)}, '\1')
16
+ when %r{^https://} then uri.sub(%r{:443(/|$)}, '\1')
17
+ else uri
18
+ end
19
+ end
20
+
21
+ end
22
+ end
@@ -2,15 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeWebAllowNetConnect < Test::Unit::TestCase
4
4
 
5
- def setup
6
- @original_allow_net_connect = FakeWeb.allow_net_connect?
7
- end
8
-
9
- def teardown
10
- FakeWeb.allow_net_connect = @original_allow_net_connect
11
- end
12
-
13
-
14
5
  def test_unregistered_requests_are_passed_through_when_allow_net_connect_is_true
15
6
  FakeWeb.allow_net_connect = true
16
7
  setup_expectations_for_real_apple_hot_news_request
@@ -79,8 +70,16 @@ class TestFakeWebAllowNetConnect < Test::Unit::TestCase
79
70
  assert !FakeWeb.allow_net_connect?
80
71
  end
81
72
 
73
+ end
74
+
75
+
76
+ class TestFakeWebAllowNetConnectWithCleanState < Test::Unit::TestCase
77
+ # Our test_helper.rb sets allow_net_connect = false in an inherited #setup
78
+ # method. Disable that here to test the default setting.
79
+ def setup; end
80
+ def teardown; end
81
+
82
82
  def test_allow_net_connect_is_true_by_default
83
83
  assert FakeWeb.allow_net_connect?
84
84
  end
85
-
86
85
  end
@@ -2,10 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestDeprecations < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- end
8
-
9
5
  def test_register_uri_without_method_argument_prints_deprecation_warning
10
6
  warning = capture_stderr do
11
7
  FakeWeb.register_uri("http://example.com", :body => "test")
@@ -1,11 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeAuthentication < Test::Unit::TestCase
4
- def setup
5
- FakeWeb.register_uri(:get, 'http://user:pass@mock/auth.txt', :body => 'authorized')
6
- FakeWeb.register_uri(:get, 'http://user2:pass@mock/auth.txt', :body => 'wrong user')
7
- FakeWeb.register_uri(:get, 'http://mock/auth.txt', :body => 'unauthorized')
8
- end
9
4
 
10
5
  def test_register_uri_with_authentication
11
6
  FakeWeb.register_uri(:get, 'http://user:pass@mock/test_example.txt', :body => "example")
@@ -23,23 +18,27 @@ class TestFakeAuthentication < Test::Unit::TestCase
23
18
  end
24
19
 
25
20
  def test_unauthenticated_request
21
+ FakeWeb.register_uri(:get, 'http://mock/auth.txt', :body => 'unauthorized')
26
22
  http = Net::HTTP.new('mock', 80)
27
23
  req = Net::HTTP::Get.new('/auth.txt')
28
24
  assert_equal 'unauthorized', http.request(req).body
29
25
  end
30
26
 
31
27
  def test_authenticated_request
28
+ FakeWeb.register_uri(:get, 'http://user:pass@mock/auth.txt', :body => 'authorized')
32
29
  http = Net::HTTP.new('mock',80)
33
30
  req = Net::HTTP::Get.new('/auth.txt')
34
31
  req.basic_auth 'user', 'pass'
35
32
  assert_equal 'authorized', http.request(req).body
36
33
  end
37
34
 
38
- def test_incorrectly_authenticated_request
39
- http = Net::HTTP.new('mock',80)
35
+ def test_authenticated_request_where_only_userinfo_differs
36
+ FakeWeb.register_uri(:get, 'http://user:pass@mock/auth.txt', :body => 'first user')
37
+ FakeWeb.register_uri(:get, 'http://user2:pass@mock/auth.txt', :body => 'second user')
38
+ http = Net::HTTP.new('mock')
40
39
  req = Net::HTTP::Get.new('/auth.txt')
41
40
  req.basic_auth 'user2', 'pass'
42
- assert_equal 'wrong user', http.request(req).body
41
+ assert_equal 'second user', http.request(req).body
43
42
  end
44
43
 
45
44
  def test_basic_auth_support_is_transparent_to_oauth
@@ -65,4 +64,29 @@ class TestFakeAuthentication < Test::Unit::TestCase
65
64
  end
66
65
  assert_equal "secret", response.body
67
66
  end
67
+
68
+ def test_basic_auth_when_userinfo_contains_allowed_unencoded_characters
69
+ FakeWeb.register_uri(:get, "http://roses&hel1o,(+$):so;longs=@example.com", :body => "authorized")
70
+ http = Net::HTTP.new("example.com")
71
+ request = Net::HTTP::Get.new("/")
72
+ request.basic_auth("roses&hel1o,(+$)", "so;longs=")
73
+ assert_equal "authorized", http.request(request).body
74
+ end
75
+
76
+ def test_basic_auth_when_userinfo_contains_encoded_at_sign
77
+ FakeWeb.register_uri(:get, "http://user%40example.com:secret@example.com", :body => "authorized")
78
+ http = Net::HTTP.new("example.com")
79
+ request = Net::HTTP::Get.new("/")
80
+ request.basic_auth("user@example.com", "secret")
81
+ assert_equal "authorized", http.request(request).body
82
+ end
83
+
84
+ def test_basic_auth_when_userinfo_contains_allowed_encoded_characters
85
+ FakeWeb.register_uri(:get, "http://us%20er:sec%20%2F%2Fret%3F@example.com", :body => "authorized")
86
+ http = Net::HTTP.new("example.com")
87
+ request = Net::HTTP::Get.new("/")
88
+ request.basic_auth("us er", "sec //ret?")
89
+ assert_equal "authorized", http.request(request).body
90
+ end
91
+
68
92
  end
@@ -2,11 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeWeb < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.allow_net_connect = true
7
- FakeWeb.clean_registry
8
- end
9
-
10
5
  def test_register_uri
11
6
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => "example")
12
7
  assert FakeWeb.registered_uri?(:get, 'http://mock/test_example.txt')
@@ -131,26 +126,20 @@ class TestFakeWeb < Test::Unit::TestCase
131
126
 
132
127
  def test_content_for_registered_uri_with_port_and_request_with_port
133
128
  FakeWeb.register_uri(:get, 'http://example.com:3000/', :body => 'test example content')
134
- Net::HTTP.start('example.com', 3000) do |http|
135
- response = http.get('/')
136
- assert_equal 'test example content', response.body
137
- end
129
+ response = Net::HTTP.start('example.com', 3000) { |http| http.get('/') }
130
+ assert_equal 'test example content', response.body
138
131
  end
139
132
 
140
133
  def test_content_for_registered_uri_with_default_port_for_http_and_request_without_port
141
134
  FakeWeb.register_uri(:get, 'http://example.com:80/', :body => 'test example content')
142
- Net::HTTP.start('example.com') do |http|
143
- response = http.get('/')
144
- assert_equal 'test example content', response.body
145
- end
135
+ response = Net::HTTP.start('example.com') { |http| http.get('/') }
136
+ assert_equal 'test example content', response.body
146
137
  end
147
138
 
148
139
  def test_content_for_registered_uri_with_no_port_for_http_and_request_with_default_port
149
140
  FakeWeb.register_uri(:get, 'http://example.com/', :body => 'test example content')
150
- Net::HTTP.start('example.com', 80) do |http|
151
- response = http.get('/')
152
- assert_equal 'test example content', response.body
153
- end
141
+ response = Net::HTTP.start('example.com', 80) { |http| http.get('/') }
142
+ assert_equal 'test example content', response.body
154
143
  end
155
144
 
156
145
  def test_content_for_registered_uri_with_default_port_for_https_and_request_with_default_port
@@ -172,41 +161,35 @@ class TestFakeWeb < Test::Unit::TestCase
172
161
  def test_content_for_registered_uris_with_ports_on_same_domain_and_request_without_port
173
162
  FakeWeb.register_uri(:get, 'http://example.com:3000/', :body => 'port 3000')
174
163
  FakeWeb.register_uri(:get, 'http://example.com/', :body => 'port 80')
175
- Net::HTTP.start('example.com') do |http|
176
- response = http.get('/')
177
- assert_equal 'port 80', response.body
178
- end
164
+ response = Net::HTTP.start('example.com') { |http| http.get('/') }
165
+ assert_equal 'port 80', response.body
179
166
  end
180
167
 
181
168
  def test_content_for_registered_uris_with_ports_on_same_domain_and_request_with_port
182
169
  FakeWeb.register_uri(:get, 'http://example.com:3000/', :body => 'port 3000')
183
170
  FakeWeb.register_uri(:get, 'http://example.com/', :body => 'port 80')
184
- Net::HTTP.start('example.com', 3000) do |http|
185
- response = http.get('/')
186
- assert_equal 'port 3000', response.body
187
- end
171
+ response = Net::HTTP.start('example.com', 3000) { |http| http.get('/') }
172
+ assert_equal 'port 3000', response.body
188
173
  end
189
174
 
190
175
  def test_content_for_registered_uri_with_get_method_only
191
176
  FakeWeb.allow_net_connect = false
192
177
  FakeWeb.register_uri(:get, "http://example.com/", :body => "test example content")
193
- Net::HTTP.start('example.com') do |http|
194
- assert_equal 'test example content', http.get('/').body
195
- assert_raises(FakeWeb::NetConnectNotAllowedError) { http.post('/', nil) }
196
- assert_raises(FakeWeb::NetConnectNotAllowedError) { http.put('/', nil) }
197
- assert_raises(FakeWeb::NetConnectNotAllowedError) { http.delete('/', nil) }
198
- end
178
+ http = Net::HTTP.new('example.com')
179
+ assert_equal 'test example content', http.get('/').body
180
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.post('/', nil) }
181
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.put('/', nil) }
182
+ assert_raises(FakeWeb::NetConnectNotAllowedError) { http.delete('/') }
199
183
  end
200
184
 
201
185
  def test_content_for_registered_uri_with_any_method_explicitly
202
186
  FakeWeb.allow_net_connect = false
203
187
  FakeWeb.register_uri(:any, "http://example.com/", :body => "test example content")
204
- Net::HTTP.start('example.com') do |http|
205
- assert_equal 'test example content', http.get('/').body
206
- assert_equal 'test example content', http.post('/', nil).body
207
- assert_equal 'test example content', http.put('/', nil).body
208
- assert_equal 'test example content', http.delete('/').body
209
- end
188
+ http = Net::HTTP.new('example.com')
189
+ assert_equal 'test example content', http.get('/').body
190
+ assert_equal 'test example content', http.post('/', nil).body
191
+ assert_equal 'test example content', http.put('/', nil).body
192
+ assert_equal 'test example content', http.delete('/').body
210
193
  end
211
194
 
212
195
  def test_content_for_registered_uri_with_any_method_implicitly
@@ -215,83 +198,84 @@ class TestFakeWeb < Test::Unit::TestCase
215
198
  FakeWeb.register_uri("http://example.com/", :body => "test example content")
216
199
  end
217
200
 
218
- Net::HTTP.start('example.com') do |http|
219
- assert_equal 'test example content', http.get('/').body
220
- assert_equal 'test example content', http.post('/', nil).body
221
- assert_equal 'test example content', http.put('/', nil).body
222
- assert_equal 'test example content', http.delete('/').body
223
- end
201
+ http = Net::HTTP.new('example.com')
202
+ assert_equal 'test example content', http.get('/').body
203
+ assert_equal 'test example content', http.post('/', nil).body
204
+ assert_equal 'test example content', http.put('/', nil).body
205
+ assert_equal 'test example content', http.delete('/').body
224
206
  end
225
207
 
226
208
  def test_mock_request_with_block
227
209
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
228
- Net::HTTP.start('mock') do |http|
229
- response = http.get('/test_example.txt')
230
- assert_equal 'test example content', response.body
210
+ response = Net::HTTP.start('mock') { |http| http.get('/test_example.txt') }
211
+ assert_equal 'test example content', response.body
212
+ end
213
+
214
+ def test_request_with_registered_body_yields_the_response_body_to_a_request_block
215
+ FakeWeb.register_uri(:get, "http://example.com", :body => "content")
216
+ body = nil
217
+ Net::HTTP.start("example.com") do |http|
218
+ http.get("/") do |response_body|
219
+ body = response_body
220
+ end
221
+ end
222
+ assert_equal "content", body
223
+ end
224
+
225
+ def test_request_with_registered_response_yields_the_response_body_to_a_request_block
226
+ fake_response = Net::HTTPOK.new('1.1', '200', 'OK')
227
+ fake_response.instance_variable_set(:@body, "content")
228
+ FakeWeb.register_uri(:get, 'http://example.com', :response => fake_response)
229
+ body = nil
230
+ Net::HTTP.start("example.com") do |http|
231
+ http.get("/") do |response_body|
232
+ body = response_body
233
+ end
231
234
  end
235
+ assert_equal "content", body
232
236
  end
233
237
 
234
238
  def test_mock_request_with_undocumented_full_uri_argument_style
235
239
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
236
- Net::HTTP.start('mock') do |query|
237
- response = query.get('http://mock/test_example.txt')
238
- assert_equal 'test example content', response.body
239
- end
240
+ response = Net::HTTP.start('mock') { |query| query.get('http://mock/test_example.txt') }
241
+ assert_equal 'test example content', response.body
240
242
  end
241
243
 
242
244
  def test_mock_request_with_undocumented_full_uri_argument_style_and_query
243
245
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt?a=b', :body => 'test query content')
244
- Net::HTTP.start('mock') do |query|
245
- response = query.get('http://mock/test_example.txt?a=b')
246
- assert_equal 'test query content', response.body
247
- end
246
+ response = Net::HTTP.start('mock') { |query| query.get('http://mock/test_example.txt?a=b') }
247
+ assert_equal 'test query content', response.body
248
248
  end
249
249
 
250
250
  def test_mock_post
251
251
  FakeWeb.register_uri(:post, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
252
- response = nil
253
- Net::HTTP.start('mock') do |query|
254
- response = query.post('/test_example.txt', '')
255
- end
252
+ response = Net::HTTP.start('mock') { |query| query.post('/test_example.txt', '') }
256
253
  assert_equal 'test example content', response.body
257
254
  end
258
255
 
259
256
  def test_mock_post_with_string_as_registered_uri
260
- response = nil
261
257
  FakeWeb.register_uri(:post, 'http://mock/test_string.txt', :body => 'foo')
262
- Net::HTTP.start('mock') do |query|
263
- response = query.post('/test_string.txt', '')
264
- end
258
+ response = Net::HTTP.start('mock') { |query| query.post('/test_string.txt', '') }
265
259
  assert_equal 'foo', response.body
266
260
  end
267
261
 
268
262
  def test_mock_get_with_request_as_registered_uri
269
263
  fake_response = Net::HTTPOK.new('1.1', '200', 'OK')
270
264
  FakeWeb.register_uri(:get, 'http://mock/test_response', :response => fake_response)
271
- response = nil
272
- Net::HTTP.start('mock') do |query|
273
- response = query.get('/test_response')
274
- end
275
-
265
+ response = Net::HTTP.start('mock') { |query| query.get('/test_response') }
276
266
  assert_equal fake_response, response
277
267
  end
278
268
 
279
269
  def test_mock_get_with_request_from_file_as_registered_uri
280
270
  FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
281
- response = nil
282
- Net::HTTP.start('www.google.com') do |query|
283
- response = query.get('/')
284
- end
271
+ response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
285
272
  assert_equal '200', response.code
286
273
  assert response.body.include?('<title>Google</title>')
287
274
  end
288
275
 
289
276
  def test_mock_post_with_request_from_file_as_registered_uri
290
277
  FakeWeb.register_uri(:post, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
291
- response = nil
292
- Net::HTTP.start('www.google.com') do |query|
293
- response = query.post('/', '')
294
- end
278
+ response = Net::HTTP.start('www.google.com') { |query| query.post('/', '') }
295
279
  assert_equal "200", response.code
296
280
  assert response.body.include?('<title>Google</title>')
297
281
  end
@@ -299,13 +283,12 @@ class TestFakeWeb < Test::Unit::TestCase
299
283
  def test_proxy_request
300
284
  FakeWeb.register_uri(:get, 'http://www.example.com/', :body => "hello world")
301
285
  FakeWeb.register_uri(:get, 'http://your.proxy.host/', :body => "lala")
302
- proxy_addr = 'your.proxy.host'
303
- proxy_port = 8080
304
286
 
305
- Net::HTTP::Proxy(proxy_addr, proxy_port).start('www.example.com') do |http|
287
+ response = nil
288
+ Net::HTTP::Proxy('your.proxy.host', 8080).start('www.example.com') do |http|
306
289
  response = http.get('/')
307
- assert_equal "hello world", response.body
308
290
  end
291
+ assert_equal "hello world", response.body
309
292
  end
310
293
 
311
294
  def test_https_request
@@ -324,6 +307,7 @@ class TestFakeWeb < Test::Unit::TestCase
324
307
  end
325
308
 
326
309
  def test_real_http_request
310
+ FakeWeb.allow_net_connect = true
327
311
  setup_expectations_for_real_apple_hot_news_request
328
312
 
329
313
  resp = nil
@@ -335,6 +319,7 @@ class TestFakeWeb < Test::Unit::TestCase
335
319
  end
336
320
 
337
321
  def test_real_http_request_with_undocumented_full_uri_argument_style
322
+ FakeWeb.allow_net_connect = true
338
323
  setup_expectations_for_real_apple_hot_news_request(:path => 'http://images.apple.com/main/rss/hotnews/hotnews.rss')
339
324
 
340
325
  resp = nil
@@ -346,6 +331,7 @@ class TestFakeWeb < Test::Unit::TestCase
346
331
  end
347
332
 
348
333
  def test_real_https_request
334
+ FakeWeb.allow_net_connect = true
349
335
  setup_expectations_for_real_apple_hot_news_request(:port => 443)
350
336
 
351
337
  http = Net::HTTP.new('images.apple.com', 443)
@@ -357,6 +343,7 @@ class TestFakeWeb < Test::Unit::TestCase
357
343
  end
358
344
 
359
345
  def test_real_request_on_same_domain_as_mock
346
+ FakeWeb.allow_net_connect = true
360
347
  setup_expectations_for_real_apple_hot_news_request
361
348
 
362
349
  FakeWeb.register_uri(:get, 'http://images.apple.com/test_string.txt', :body => 'foo')
@@ -432,16 +419,14 @@ class TestFakeWeb < Test::Unit::TestCase
432
419
 
433
420
  def test_response_type
434
421
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => "test")
435
- Net::HTTP.start('mock') do |http|
436
- response = http.get('/test_example.txt')
437
- assert_kind_of(Net::HTTPSuccess, response)
438
- end
422
+ response = Net::HTTP.start('mock') { |http| http.get('/test_example.txt') }
423
+ assert_kind_of Net::HTTPSuccess, response
439
424
  end
440
425
 
441
426
  def test_mock_request_that_raises_an_http_error_with_a_specific_status
442
427
  FakeWeb.register_uri(:get, 'http://mock/raising_exception.txt', :exception => Net::HTTPError, :status => ['404', 'Not Found'])
443
428
  exception = assert_raises(Net::HTTPError) do
444
- Net::HTTP.start('mock') { |http| response = http.get('/raising_exception.txt') }
429
+ Net::HTTP.start('mock') { |http| http.get('/raising_exception.txt') }
445
430
  end
446
431
  assert_equal '404', exception.response.code
447
432
  assert_equal 'Not Found', exception.response.msg
@@ -461,10 +446,7 @@ class TestFakeWeb < Test::Unit::TestCase
461
446
 
462
447
  def test_mock_request_using_response_with_transfer_encoding_header_has_valid_transfer_encoding_header
463
448
  FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_with_transfer_encoding')
464
- response = nil
465
- Net::HTTP.start('www.google.com') do |query|
466
- response = query.get('/')
467
- end
449
+ response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
468
450
  assert_not_nil response['transfer-encoding']
469
451
  assert response['transfer-encoding'] == 'chunked'
470
452
  end
@@ -472,28 +454,20 @@ class TestFakeWeb < Test::Unit::TestCase
472
454
  def test_mock_request_using_response_without_transfer_encoding_header_does_not_have_a_transfer_encoding_header
473
455
  FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
474
456
  response = nil
475
- Net::HTTP.start('www.google.com') do |query|
476
- response = query.get('/')
477
- end
457
+ response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
478
458
  assert !response.key?('transfer-encoding')
479
459
  end
480
460
 
481
461
  def test_mock_request_using_response_from_curl_has_original_transfer_encoding_header
482
462
  FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_from_curl')
483
- response = nil
484
- Net::HTTP.start('www.google.com') do |query|
485
- response = query.get('/')
486
- end
463
+ response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
487
464
  assert_not_nil response['transfer-encoding']
488
465
  assert response['transfer-encoding'] == 'chunked'
489
466
  end
490
467
 
491
468
  def test_txt_file_should_have_three_lines
492
469
  FakeWeb.register_uri(:get, 'http://www.google.com/', :body => File.dirname(__FILE__) + '/fixtures/test_txt_file')
493
- response = nil
494
- Net::HTTP.start('www.google.com') do |query|
495
- response = query.get('/')
496
- end
470
+ response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
497
471
  assert response.body.split(/\n/).size == 3, "response has #{response.body.split(/\n/).size} lines should have 3"
498
472
  end
499
473
 
@@ -2,10 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeWebOpenURI < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- end
8
-
9
5
  def test_content_for_registered_uri
10
6
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
11
7
  assert_equal 'test example content', FakeWeb.response_for(:get, 'http://mock/test_example.txt').body
@@ -22,6 +18,7 @@ class TestFakeWebOpenURI < Test::Unit::TestCase
22
18
  end
23
19
 
24
20
  def test_real_open
21
+ FakeWeb.allow_net_connect = true
25
22
  setup_expectations_for_real_apple_hot_news_request
26
23
  resp = open('http://images.apple.com/main/rss/hotnews/hotnews.rss')
27
24
  assert_equal "200", resp.status.first
@@ -55,8 +52,7 @@ class TestFakeWebOpenURI < Test::Unit::TestCase
55
52
 
56
53
  def test_mock_open_with_block
57
54
  FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
58
- open('http://mock/test_example.txt') do |f|
59
- assert 'test example content', f.readlines
60
- end
55
+ body = open('http://mock/test_example.txt') { |f| f.readlines }
56
+ assert_equal 'test example content', body.first
61
57
  end
62
58
  end
@@ -6,6 +6,21 @@ require 'fake_web'
6
6
  require 'rubygems'
7
7
  require 'mocha'
8
8
 
9
+
10
+ # Give all tests a common setup and teardown that prevents shared state
11
+ class Test::Unit::TestCase
12
+ def setup
13
+ FakeWeb.clean_registry
14
+ @original_allow_net_connect = FakeWeb.allow_net_connect?
15
+ FakeWeb.allow_net_connect = false
16
+ end
17
+
18
+ def teardown
19
+ FakeWeb.allow_net_connect = @original_allow_net_connect
20
+ end
21
+ end
22
+
23
+
9
24
  module FakeWebTestHelper
10
25
 
11
26
  def capture_stderr
@@ -40,7 +55,6 @@ module FakeWebTestHelper
40
55
  request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
41
56
  socket.expects(:write).with(all_of(includes(request_parts[0]), includes(request_parts[1]))).returns(100)
42
57
 
43
- # TODO: handle long response bodies that use more than one #sysread call
44
58
  socket.expects(:sysread).at_least_once.returns("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}").then.raises(EOFError)
45
59
  end
46
60
 
@@ -3,12 +3,13 @@ require File.join(File.dirname(__FILE__), "test_helper")
3
3
  class TestMissingOpenURI < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
- FakeWeb.clean_registry
6
+ super
7
7
  @saved_open_uri = OpenURI
8
8
  Object.send(:remove_const, :OpenURI)
9
9
  end
10
10
 
11
11
  def teardown
12
+ super
12
13
  Object.const_set(:OpenURI, @saved_open_uri)
13
14
  end
14
15
 
@@ -0,0 +1,51 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestPrecedence < Test::Unit::TestCase
4
+
5
+ def test_matching_get_strings_have_precedence_over_matching_get_regexes
6
+ FakeWeb.register_uri(:get, "http://example.com/test", :body => "string")
7
+ FakeWeb.register_uri(:get, %r|http://example\.com/test|, :body => "regex")
8
+ response = Net::HTTP.start("example.com") { |query| query.get('/test') }
9
+ assert_equal "string", response.body
10
+ end
11
+
12
+ def test_matching_any_strings_have_precedence_over_matching_any_regexes
13
+ FakeWeb.register_uri(:any, "http://example.com/test", :body => "string")
14
+ FakeWeb.register_uri(:any, %r|http://example\.com/test|, :body => "regex")
15
+ response = Net::HTTP.start("example.com") { |query| query.get('/test') }
16
+ assert_equal "string", response.body
17
+ end
18
+
19
+ def test_matching_get_strings_have_precedence_over_matching_any_strings
20
+ FakeWeb.register_uri(:get, "http://example.com/test", :body => "get method")
21
+ FakeWeb.register_uri(:any, "http://example.com/test", :body => "any method")
22
+ response = Net::HTTP.start("example.com") { |query| query.get('/test') }
23
+ assert_equal "get method", response.body
24
+
25
+ # registration order should not matter
26
+ FakeWeb.register_uri(:any, "http://example.com/test2", :body => "any method")
27
+ FakeWeb.register_uri(:get, "http://example.com/test2", :body => "get method")
28
+ response = Net::HTTP.start("example.com") { |query| query.get('/test2') }
29
+ assert_equal "get method", response.body
30
+ end
31
+
32
+ def test_matching_any_strings_have_precedence_over_matching_get_regexes
33
+ FakeWeb.register_uri(:any, "http://example.com/test", :body => "any string")
34
+ FakeWeb.register_uri(:get, %r|http://example\.com/test|, :body => "get regex")
35
+ response = Net::HTTP.start("example.com") { |query| query.get('/test') }
36
+ assert_equal "any string", response.body
37
+ end
38
+
39
+ def test_registered_strings_and_uris_are_equivalent_so_second_takes_precedence
40
+ FakeWeb.register_uri(:get, "http://example.com/test", :body => "string")
41
+ FakeWeb.register_uri(:get, URI.parse("http://example.com/test"), :body => "uri")
42
+ response = Net::HTTP.start("example.com") { |query| query.get('/test') }
43
+ assert_equal "uri", response.body
44
+
45
+ FakeWeb.register_uri(:get, URI.parse("http://example.com/test2"), :body => "uri")
46
+ FakeWeb.register_uri(:get, "http://example.com/test2", :body => "string")
47
+ response = Net::HTTP.start("example.com") { |query| query.get('/test2') }
48
+ assert_equal "string", response.body
49
+ end
50
+
51
+ end
@@ -2,10 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeWebQueryString < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- end
8
-
9
5
  def test_register_uri_string_with_query_params
10
6
  FakeWeb.register_uri(:get, 'http://example.com/?a=1&b=1', :body => 'foo')
11
7
  assert FakeWeb.registered_uri?(:get, 'http://example.com/?a=1&b=1')
@@ -2,15 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestRegexes < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- @original_allow_net_connect = FakeWeb.allow_net_connect?
8
- end
9
-
10
- def teardown
11
- FakeWeb.allow_net_connect = @old_allow_net_conncet
12
- end
13
-
14
5
  def test_registered_uri_with_pattern
15
6
  FakeWeb.register_uri(:get, %r|http://example.com/test_example/\d+|, :body => "example")
16
7
  assert FakeWeb.registered_uri?(:get, "http://example.com/test_example/25")
@@ -22,6 +13,11 @@ class TestRegexes < Test::Unit::TestCase
22
13
  assert_equal "Welcome to Google!", FakeWeb.response_for(:get, "http://www.google.com").body
23
14
  end
24
15
 
16
+ def test_response_for_with_matching_registered_uri_and_get_method_matching_to_any_method
17
+ FakeWeb.register_uri(:any, %r|http://www.example.com|, :body => "example")
18
+ assert_equal "example", FakeWeb.response_for(:get, "http://www.example.com").body
19
+ end
20
+
25
21
  def test_registered_uri_with_authentication_and_pattern
26
22
  FakeWeb.register_uri(:get, %r|http://user:pass@mock/example\.\w+|i, :body => "example")
27
23
  assert FakeWeb.registered_uri?(:get, 'http://user:pass@mock/example.txt')
@@ -40,11 +36,22 @@ class TestRegexes < Test::Unit::TestCase
40
36
  assert_equal "example", http.request(req).body
41
37
  end
42
38
 
43
- def test_registering_with_overlapping_regexes_uses_first_registered
39
+ def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error
40
+ FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
41
+ FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
42
+ assert_raise FakeWeb::MultipleMatchingRegexpsError do
43
+ Net::HTTP.start("example.com") { |query| query.get('/a') }
44
+ end
45
+ end
46
+
47
+ def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error_including_request_info
44
48
  FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
45
49
  FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
46
- response = Net::HTTP.start("example.com") { |query| query.get('/a') }
47
- assert_equal "first", response.body
50
+ begin
51
+ Net::HTTP.start("example.com") { |query| query.get('/a') }
52
+ rescue FakeWeb::MultipleMatchingRegexpsError => exception
53
+ end
54
+ assert exception.message.include?("GET http://example.com/a")
48
55
  end
49
56
 
50
57
  def test_registry_does_not_find_using_mismatched_protocols_or_ports_when_registered_with_both
@@ -2,10 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestResponseHeaders < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- end
8
-
9
5
  def test_content_type_when_registering_with_string_and_content_type_header
10
6
  FakeWeb.register_uri(:get, "http://example.com/users.json", :body => '[{"username": "chrisk"}]', :content_type => "application/json")
11
7
  response = Net::HTTP.start("example.com") { |query| query.get("/users.json") }
@@ -45,17 +41,17 @@ class TestResponseHeaders < Test::Unit::TestCase
45
41
  :content_type => "text/plain"},
46
42
  {:body => 'test2', :expires => "Thu, 14 Jun 2009 16:00:01 GMT"}])
47
43
 
44
+ first_response = second_response = nil
48
45
  Net::HTTP.start("example.com") do |query|
49
- response = query.get("/")
50
- assert_equal 'test1', response.body
51
- assert_equal "Thu, 14 Jun 2009 16:00:00 GMT", response['Expires']
52
- assert_equal "text/plain", response['Content-Type']
53
-
54
- response = query.get("/")
55
- assert_equal 'test2', response.body
56
- assert_equal "Thu, 14 Jun 2009 16:00:01 GMT", response['Expires']
57
- assert_nil response['Content-Type']
46
+ first_response = query.get("/")
47
+ second_response = query.get("/")
58
48
  end
49
+ assert_equal 'test1', first_response.body
50
+ assert_equal "Thu, 14 Jun 2009 16:00:00 GMT", first_response['Expires']
51
+ assert_equal "text/plain", first_response['Content-Type']
52
+ assert_equal 'test2', second_response.body
53
+ assert_equal "Thu, 14 Jun 2009 16:00:01 GMT", second_response['Expires']
54
+ assert_nil second_response['Content-Type']
59
55
  end
60
56
 
61
57
  def test_registering_with_status_option_and_response_headers
@@ -2,15 +2,6 @@ require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class TestFakeWebTrailingSlashes < Test::Unit::TestCase
4
4
 
5
- def setup
6
- FakeWeb.clean_registry
7
- @original_allow_net_connect = FakeWeb.allow_net_connect?
8
- end
9
-
10
- def teardown
11
- FakeWeb.allow_net_connect = @old_allow_net_conncet
12
- end
13
-
14
5
  def test_registering_root_without_slash_and_ask_predicate_method_with_slash
15
6
  FakeWeb.register_uri(:get, "http://www.example.com", :body => "root")
16
7
  assert FakeWeb.registered_uri?(:get, "http://www.example.com/")
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestUtility < Test::Unit::TestCase
4
+
5
+ def test_decode_userinfo_from_header_handles_basic_auth
6
+ authorization_header = "Basic dXNlcm5hbWU6c2VjcmV0"
7
+ userinfo = FakeWeb::Utility.decode_userinfo_from_header(authorization_header)
8
+ assert_equal "username:secret", userinfo
9
+ end
10
+
11
+ def test_encode_unsafe_chars_in_userinfo_does_not_encode_userinfo_safe_punctuation
12
+ userinfo = "user;&=+$,:secret"
13
+ assert_equal userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
14
+ end
15
+
16
+ def test_encode_unsafe_chars_in_userinfo_does_not_encode_rfc_3986_unreserved_characters
17
+ userinfo = "-_.!~*'()abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:secret"
18
+ assert_equal userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
19
+ end
20
+
21
+ def test_encode_unsafe_chars_in_userinfo_does_encode_other_characters
22
+ userinfo, safe_userinfo = 'us#rn@me:sec//ret?"', 'us%23rn%40me:sec%2F%2Fret%3F%22'
23
+ assert_equal safe_userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
24
+ end
25
+
26
+ def test_strip_default_port_from_uri_strips_80_from_http_with_path
27
+ uri = "http://example.com:80/foo/bar"
28
+ stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
29
+ assert_equal "http://example.com/foo/bar", stripped_uri
30
+ end
31
+
32
+ def test_strip_default_port_from_uri_strips_80_from_http_without_path
33
+ uri = "http://example.com:80"
34
+ stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
35
+ assert_equal "http://example.com", stripped_uri
36
+ end
37
+
38
+ def test_strip_default_port_from_uri_strips_443_from_https_without_path
39
+ uri = "https://example.com:443"
40
+ stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
41
+ assert_equal "https://example.com", stripped_uri
42
+ end
43
+
44
+ def test_strip_default_port_from_uri_strips_443_from_https
45
+ uri = "https://example.com:443/foo/bar"
46
+ stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
47
+ assert_equal "https://example.com/foo/bar", stripped_uri
48
+ end
49
+
50
+ def test_strip_default_port_from_uri_does_not_strip_8080_from_http
51
+ uri = "http://example.com:8080/foo/bar"
52
+ assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
53
+ end
54
+
55
+ def test_strip_default_port_from_uri_does_not_strip_443_from_http
56
+ uri = "http://example.com:443/foo/bar"
57
+ assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
58
+ end
59
+
60
+ def test_strip_default_port_from_uri_does_not_strip_80_from_query_string
61
+ uri = "http://example.com/?a=:80&b=c"
62
+ assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
63
+ end
64
+
65
+ def test_strip_default_port_from_uri_does_not_modify_strings_that_do_not_start_with_http_or_https
66
+ uri = "httpz://example.com:80/"
67
+ assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
68
+ end
69
+
70
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fakeweb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Kampmeier
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-06-24 00:00:00 -07:00
13
+ date: 2009-07-08 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -40,18 +40,14 @@ files:
40
40
  - LICENSE.txt
41
41
  - README.rdoc
42
42
  - Rakefile
43
- - lib
44
- - lib/fake_web
45
43
  - lib/fake_web.rb
46
- - lib/fake_web/ext
47
44
  - lib/fake_web/ext/net_http.rb
48
45
  - lib/fake_web/registry.rb
49
46
  - lib/fake_web/responder.rb
50
47
  - lib/fake_web/response.rb
51
48
  - lib/fake_web/stub_socket.rb
49
+ - lib/fake_web/utility.rb
52
50
  - lib/fakeweb.rb
53
- - test
54
- - test/fixtures
55
51
  - test/fixtures/google_response_from_curl
56
52
  - test/fixtures/google_response_with_transfer_encoding
57
53
  - test/fixtures/google_response_without_transfer_encoding
@@ -64,12 +60,16 @@ files:
64
60
  - test/test_fake_web_open_uri.rb
65
61
  - test/test_helper.rb
66
62
  - test/test_missing_open_uri.rb
63
+ - test/test_precedence.rb
67
64
  - test/test_query_string.rb
68
65
  - test/test_regexes.rb
69
66
  - test/test_response_headers.rb
70
67
  - test/test_trailing_slashes.rb
68
+ - test/test_utility.rb
71
69
  has_rdoc: true
72
70
  homepage: http://github.com/chrisk/fakeweb
71
+ licenses: []
72
+
73
73
  post_install_message:
74
74
  rdoc_options:
75
75
  - --main
@@ -97,12 +97,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  requirements: []
98
98
 
99
99
  rubyforge_project: fakeweb
100
- rubygems_version: 1.3.0
100
+ rubygems_version: 1.3.4
101
101
  signing_key:
102
- specification_version: 2
102
+ specification_version: 3
103
103
  summary: A tool for faking responses to HTTP requests
104
104
  test_files:
105
- - test/fixtures
106
105
  - test/fixtures/google_response_from_curl
107
106
  - test/fixtures/google_response_with_transfer_encoding
108
107
  - test/fixtures/google_response_without_transfer_encoding
@@ -115,7 +114,9 @@ test_files:
115
114
  - test/test_fake_web_open_uri.rb
116
115
  - test/test_helper.rb
117
116
  - test/test_missing_open_uri.rb
117
+ - test/test_precedence.rb
118
118
  - test/test_query_string.rb
119
119
  - test/test_regexes.rb
120
120
  - test/test_response_headers.rb
121
121
  - test/test_trailing_slashes.rb
122
+ - test/test_utility.rb