fakeweb 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  /coverage
5
5
  /pkg
6
6
  /.idea
7
+ *.rbc
data/CHANGELOG CHANGED
@@ -1,3 +1,12 @@
1
+ fakeweb (1.2.8)
2
+
3
+ * support Pathname objects where a filename is expected [Chris Kampmeier]
4
+
5
+ * fix compatibility with Ruby 1.9.2 [Chris Kampmeier]
6
+
7
+ * simplify storage of FakeWeb::VERSION [Josh Peek, Woody Peterson, Ben Woosley]
8
+
9
+
1
10
  fakeweb (1.2.7)
2
11
 
3
12
  * revert to sorting query params before matching requests against regexps,
@@ -6,14 +6,11 @@ level, without modifying code or writing extensive stubs.
6
6
 
7
7
  == Installation
8
8
 
9
- The latest release of FakeWeb is once again available from your friendly
10
- RubyForge mirror. Just install the gem:
11
-
12
- sudo gem install fakeweb
9
+ gem install fakeweb
13
10
 
14
11
  Note: the gem was previously available as +FakeWeb+ (capital letters), but now
15
12
  all versions are simply registered as +fakeweb+. If you have any old +FakeWeb+
16
- gems lying around, remove them: <tt>sudo gem uninstall FakeWeb</tt>
13
+ gems lying around, remove them: <tt>gem uninstall FakeWeb</tt>
17
14
 
18
15
 
19
16
  == Help and discussion
@@ -29,7 +26,6 @@ The main source repository is http://github.com/chrisk/fakeweb.
29
26
 
30
27
  Start by requiring FakeWeb:
31
28
 
32
- require 'rubygems'
33
29
  require 'fakeweb'
34
30
 
35
31
  === Registering basic string responses
@@ -45,6 +41,11 @@ Start by requiring FakeWeb:
45
41
  You can also call <tt>register_uri</tt> with a regular expression, to match
46
42
  more than one URI.
47
43
 
44
+ FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "Hello World!")
45
+
46
+ Net::HTTP.get(URI.parse("http://example.com/test3"))
47
+ => "Hello World!"
48
+
48
49
  === Replaying a recorded response
49
50
 
50
51
  page = `curl -is http://www.google.com/`
@@ -71,17 +72,17 @@ more than one URI.
71
72
 
72
73
  If you use the <tt>:any</tt> symbol, the URI you specify will be completely
73
74
  stubbed out (regardless of the HTTP method of the request). This can be useful
74
- for RPC-like services, where the HTTP method isn't significant. (Older
75
+ for RPC-style services, where the HTTP method isn't significant. (Older
75
76
  versions of FakeWeb always behaved like this, and didn't accept the first
76
77
  +method+ argument above; this syntax is now deprecated.)
77
78
 
78
79
  === Rotating responses
79
80
 
80
- You can optionally call FakeWeb.register_uri with an array of options hashes;
81
- these are used, in order, to respond to repeated requests. Once you run out of
82
- responses, further requests always receive the last response. (You can also send
83
- a response more than once before rotating, by specifying a <tt>:times</tt>
84
- option for that response.)
81
+ You can optionally call <tt>FakeWeb.register_uri</tt> with an array of options
82
+ hashes; these are used, in order, to respond to repeated requests. Once you run
83
+ out of responses, further requests always receive the last response. (You can
84
+ also send a response more than once before rotating, by specifying a
85
+ <tt>:times</tt> option for that response.)
85
86
 
86
87
  FakeWeb.register_uri(:delete, "http://example.com/posts/1",
87
88
  [{:body => "Post 1 deleted.", :status => ["200", "OK"]},
@@ -95,8 +96,8 @@ option for that response.)
95
96
 
96
97
  === Using HTTP basic authentication
97
98
 
98
- You can stub requests that use basic authentication with +userinfo+ strings in
99
- the URIs:
99
+ You can fake requests that use basic authentication by adding +userinfo+ strings
100
+ to your URIs:
100
101
 
101
102
  FakeWeb.register_uri(:get, "http://example.com/secret", :body => "Unauthorized", :status => ["401", "Unauthorized"])
102
103
  FakeWeb.register_uri(:get, "http://user:pass@example.com/secret", :body => "Authorized")
@@ -110,9 +111,9 @@ the URIs:
110
111
 
111
112
  === Clearing registered URIs
112
113
 
113
- The FakeWeb registry is a singleton that lasts for the duration of your
114
- program, maintaining every fake response you register. If needed, you
115
- can clean out the registry and remove all registered URIs:
114
+ The FakeWeb registry is a singleton that lasts for the duration of your program,
115
+ maintaining every fake response you register. If needed, you can clean out the
116
+ registry and remove all registered URIs:
116
117
 
117
118
  FakeWeb.clean_registry
118
119
 
data/Rakefile CHANGED
@@ -1,9 +1,7 @@
1
- puts "Using ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
2
-
3
1
  require 'rubygems'
4
2
  require 'rake'
5
3
 
6
- version = File.read(File.join(File.dirname(__FILE__), "lib", "fake_web", "VERSION")).strip
4
+ version = '1.2.8'
7
5
 
8
6
  begin
9
7
  require 'jeweler'
@@ -18,19 +16,15 @@ begin
18
16
  gem.homepage = "http://github.com/chrisk/fakeweb"
19
17
  gem.add_development_dependency "mocha", ">= 0.9.5"
20
18
  end
21
- Jeweler::GemcutterTasks.new
22
- Jeweler::RubyforgeTasks.new do |rubyforge|
23
- rubyforge.doc_task = "rdoc"
24
- rubyforge.remote_doc_path = ""
25
- end
26
19
  rescue LoadError
27
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
28
21
  end
29
22
 
30
23
 
31
24
  require 'rake/testtask'
32
25
  Rake::TestTask.new(:test) do |test|
33
26
  test.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb", "test/vendor")
27
+ test.libs << "test"
34
28
  test.verbose = false
35
29
  test.warning = true
36
30
  end
@@ -42,6 +36,7 @@ begin
42
36
  require 'rcov/rcovtask'
43
37
  Rcov::RcovTask.new do |t|
44
38
  t.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb", "test/vendor")
39
+ t.libs << "test"
45
40
  t.rcov_opts << "--sort coverage"
46
41
  t.rcov_opts << "--exclude gems"
47
42
  t.warning = true
@@ -66,5 +61,5 @@ begin
66
61
  end
67
62
  rescue LoadError
68
63
  puts "\nIt looks like you're using an old version of RDoc, but FakeWeb requires a newer one."
69
- puts "You can try upgrading with `sudo gem install rdoc`.\n\n"
64
+ puts "You can try upgrading with `gem install rdoc`.\n\n"
70
65
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fakeweb}
8
- s.version = "1.2.7"
8
+ s.version = "1.2.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris Kampmeier", "Blaine Cook"]
12
- s.date = %q{2009-11-02}
12
+ s.date = %q{2009-12-25}
13
13
  s.description = %q{FakeWeb is a helper for faking web requests in Ruby. It works at a global level, without modifying code or writing extensive stubs.}
14
14
  s.email = ["chris@kampers.net", "romeda@gmail.com"]
15
15
  s.extra_rdoc_files = [
@@ -24,7 +24,6 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "fakeweb.gemspec",
26
26
  "lib/fake_web.rb",
27
- "lib/fake_web/VERSION",
28
27
  "lib/fake_web/ext/net_http.rb",
29
28
  "lib/fake_web/registry.rb",
30
29
  "lib/fake_web/responder.rb",
@@ -44,6 +43,7 @@ Gem::Specification.new do |s|
44
43
  "test/test_fake_web_open_uri.rb",
45
44
  "test/test_helper.rb",
46
45
  "test/test_missing_open_uri.rb",
46
+ "test/test_missing_pathname.rb",
47
47
  "test/test_other_net_http_libraries.rb",
48
48
  "test/test_precedence.rb",
49
49
  "test/test_query_string.rb",
@@ -87,6 +87,7 @@ Gem::Specification.new do |s|
87
87
  "test/test_fake_web_open_uri.rb",
88
88
  "test/test_helper.rb",
89
89
  "test/test_missing_open_uri.rb",
90
+ "test/test_missing_pathname.rb",
90
91
  "test/test_other_net_http_libraries.rb",
91
92
  "test/test_precedence.rb",
92
93
  "test/test_query_string.rb",
@@ -13,7 +13,7 @@ FakeWeb::Utility.puts_warning_for_net_http_around_advice_libs_if_needed
13
13
  module FakeWeb
14
14
 
15
15
  # Returns the version string for the copy of FakeWeb you have loaded.
16
- VERSION = File.read(File.join(File.dirname(__FILE__), "fake_web", "VERSION")).strip
16
+ VERSION = '1.2.8'
17
17
 
18
18
  # Resets the FakeWeb Registry. This will force all subsequent web requests to
19
19
  # behave as real requests.
@@ -19,29 +19,29 @@ module FakeWeb
19
19
  end
20
20
 
21
21
  def registered_uri?(method, uri)
22
- !responses_for(method, uri).empty?
22
+ !responders_for(method, uri).empty?
23
23
  end
24
24
 
25
25
  def response_for(method, uri, &block)
26
- responses = responses_for(method, uri)
27
- return nil if responses.empty?
28
-
29
- next_response = responses.last
30
- responses.each do |response|
31
- if response.times and response.times > 0
32
- response.times -= 1
33
- next_response = response
26
+ responders = responders_for(method, uri)
27
+ return nil if responders.empty?
28
+
29
+ next_responder = responders.last
30
+ responders.each do |responder|
31
+ if responder.times and responder.times > 0
32
+ responder.times -= 1
33
+ next_responder = responder
34
34
  break
35
35
  end
36
36
  end
37
37
 
38
- next_response.response(&block)
38
+ next_responder.response(&block)
39
39
  end
40
40
 
41
41
 
42
42
  private
43
43
 
44
- def responses_for(method, uri)
44
+ def responders_for(method, uri)
45
45
  uri = normalize_uri(uri)
46
46
 
47
47
  uri_map_matches(method, uri, URI) ||
@@ -47,6 +47,8 @@ module FakeWeb
47
47
  def body
48
48
  return '' unless options.has_key?(:body)
49
49
 
50
+ options[:body] = options[:body].to_s if defined?(Pathname) && options[:body].is_a?(Pathname)
51
+
50
52
  if !options[:body].include?("\0") && File.exists?(options[:body]) && !File.directory?(options[:body])
51
53
  File.read(options[:body])
52
54
  else
@@ -55,30 +57,31 @@ module FakeWeb
55
57
  end
56
58
 
57
59
  def baked_response
58
- resp = case options[:response]
59
- when Net::HTTPResponse then options[:response]
60
- when String
61
- socket = Net::BufferedIO.new(options[:response])
60
+ return options[:response] if options[:response].is_a?(Net::HTTPResponse)
61
+
62
+ if options[:response].is_a?(String) || (defined?(Pathname) && options[:response].is_a?(Pathname))
63
+ socket = Net::BufferedIO.new(options[:response].to_s)
62
64
  r = Net::HTTPResponse.read_new(socket)
63
65
 
64
- # Store the oiriginal transfer-encoding
66
+ # Store the original transfer-encoding
65
67
  saved_transfer_encoding = r.instance_eval {
66
68
  @header['transfer-encoding'] if @header.key?('transfer-encoding')
67
69
  }
68
70
 
69
- # read the body of response.
71
+ # Read the body of response
70
72
  r.instance_eval { @header['transfer-encoding'] = nil }
71
73
  r.reading_body(socket, true) {}
72
74
 
73
- # Delete the transfer-encoding key from r.@header if there wasn't one,
74
- # else restore the saved_transfer_encoding.
75
+ # Delete the transfer-encoding key from r.@header if there wasn't one;
76
+ # otherwise, restore the saved_transfer_encoding
75
77
  if saved_transfer_encoding.nil?
76
78
  r.instance_eval { @header.delete('transfer-encoding') }
77
79
  else
78
80
  r.instance_eval { @header['transfer-encoding'] = saved_transfer_encoding }
79
81
  end
80
82
  r
81
- else raise StandardError, "Handler unimplemented for response #{options[:response]}"
83
+ else
84
+ raise StandardError, "Handler unimplemented for response #{options[:response]}"
82
85
  end
83
86
  end
84
87
 
@@ -7,7 +7,7 @@ module FakeWeb
7
7
 
8
8
  def self.encode_unsafe_chars_in_userinfo(userinfo)
9
9
  unsafe_in_userinfo = /[^#{URI::REGEXP::PATTERN::UNRESERVED};&=+$,]|^(#{URI::REGEXP::PATTERN::ESCAPED})/
10
- userinfo.split(":").map { |part| URI.escape(part, unsafe_in_userinfo) }.join(":")
10
+ userinfo.split(":").map { |part| uri_escape(part, unsafe_in_userinfo) }.join(":")
11
11
  end
12
12
 
13
13
  def self.strip_default_port_from_uri(uri)
@@ -18,6 +18,16 @@ module FakeWeb
18
18
  end
19
19
  end
20
20
 
21
+ # Wrapper for URI escaping that switches between URI::Parser#escape and
22
+ # URI.escape for 1.9-compatibility
23
+ def self.uri_escape(*args)
24
+ if URI.const_defined?(:Parser)
25
+ URI::Parser.new.escape(*args)
26
+ else
27
+ URI.escape(*args)
28
+ end
29
+ end
30
+
21
31
  def self.puts_warning_for_net_http_around_advice_libs_if_needed
22
32
  libs = {"Samuel" => defined?(Samuel)}
23
33
  warnings = libs.select { |_, loaded| loaded }.map do |name, _|
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeWebAllowNetConnect < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestDeprecations < Test::Unit::TestCase
4
4
 
@@ -39,7 +39,7 @@ class TestDeprecations < Test::Unit::TestCase
39
39
 
40
40
  def test_register_uri_with_file_option_prints_deprecation_warning
41
41
  warning = capture_stderr do
42
- FakeWeb.register_uri(:get, "http://example.com", :file => File.dirname(__FILE__) + '/fixtures/test_example.txt')
42
+ FakeWeb.register_uri(:get, "http://example.com", :file => fixture_path("test_example.txt"))
43
43
  end
44
44
  assert_match %r(deprecation warning: fakeweb's :file option)i, warning
45
45
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeAuthentication < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeWeb < Test::Unit::TestCase
4
4
 
@@ -36,7 +36,7 @@ class TestFakeWeb < Test::Unit::TestCase
36
36
 
37
37
  def test_register_uri_without_domain_name
38
38
  assert_raises URI::InvalidURIError do
39
- FakeWeb.register_uri(:get, 'test_example2.txt', File.dirname(__FILE__) + '/fixtures/test_example.txt')
39
+ FakeWeb.register_uri(:get, 'test_example2.txt', fixture_path("test_example.txt"))
40
40
  end
41
41
  end
42
42
 
@@ -122,7 +122,7 @@ class TestFakeWeb < Test::Unit::TestCase
122
122
  end
123
123
 
124
124
  def test_response_for_with_registered_uri
125
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
125
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
126
126
  assert_equal 'test example content', FakeWeb.response_for(:get, 'http://mock/test_example.txt').body
127
127
  end
128
128
 
@@ -223,7 +223,7 @@ class TestFakeWeb < Test::Unit::TestCase
223
223
  end
224
224
 
225
225
  def test_mock_request_with_block
226
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
226
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
227
227
  response = Net::HTTP.start('mock') { |http| http.get('/test_example.txt') }
228
228
  assert_equal 'test example content', response.body
229
229
  end
@@ -253,7 +253,7 @@ class TestFakeWeb < Test::Unit::TestCase
253
253
  end
254
254
 
255
255
  def test_mock_request_with_undocumented_full_uri_argument_style
256
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
256
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
257
257
  response = Net::HTTP.start('mock') { |query| query.get('http://mock/test_example.txt') }
258
258
  assert_equal 'test example content', response.body
259
259
  end
@@ -265,7 +265,7 @@ class TestFakeWeb < Test::Unit::TestCase
265
265
  end
266
266
 
267
267
  def test_mock_post
268
- FakeWeb.register_uri(:post, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
268
+ FakeWeb.register_uri(:post, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
269
269
  response = Net::HTTP.start('mock') { |query| query.post('/test_example.txt', '') }
270
270
  assert_equal 'test example content', response.body
271
271
  end
@@ -284,14 +284,14 @@ class TestFakeWeb < Test::Unit::TestCase
284
284
  end
285
285
 
286
286
  def test_mock_get_with_request_from_file_as_registered_uri
287
- FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
287
+ FakeWeb.register_uri(:get, 'http://www.google.com/', :response => fixture_path("google_response_without_transfer_encoding"))
288
288
  response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
289
289
  assert_equal '200', response.code
290
290
  assert response.body.include?('<title>Google</title>')
291
291
  end
292
292
 
293
293
  def test_mock_post_with_request_from_file_as_registered_uri
294
- FakeWeb.register_uri(:post, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
294
+ FakeWeb.register_uri(:post, 'http://www.google.com/', :response => fixture_path("google_response_without_transfer_encoding"))
295
295
  response = Net::HTTP.start('www.google.com') { |query| query.post('/', '') }
296
296
  assert_equal "200", response.code
297
297
  assert response.body.include?('<title>Google</title>')
@@ -408,7 +408,7 @@ class TestFakeWeb < Test::Unit::TestCase
408
408
  end
409
409
 
410
410
  def test_mock_instance_syntax
411
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
411
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
412
412
  response = nil
413
413
  uri = URI.parse('http://mock/test_example.txt')
414
414
  http = Net::HTTP.new(uri.host, uri.port)
@@ -423,7 +423,7 @@ class TestFakeWeb < Test::Unit::TestCase
423
423
  response = nil
424
424
  proxy_address = nil
425
425
  proxy_port = nil
426
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
426
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
427
427
  uri = URI.parse('http://mock/test_example.txt')
428
428
  http = Net::HTTP::Proxy(proxy_address, proxy_port).new(
429
429
  uri.host, (uri.port or 80))
@@ -451,7 +451,7 @@ class TestFakeWeb < Test::Unit::TestCase
451
451
 
452
452
  def test_mock_rotate_responses
453
453
  FakeWeb.register_uri(:get, 'http://mock/multiple_test_example.txt',
454
- [ {:body => File.dirname(__FILE__) + '/fixtures/test_example.txt', :times => 2},
454
+ [ {:body => fixture_path("test_example.txt"), :times => 2},
455
455
  {:body => "thrice", :times => 3},
456
456
  {:body => "ever_more"} ])
457
457
 
@@ -462,28 +462,28 @@ class TestFakeWeb < Test::Unit::TestCase
462
462
  end
463
463
 
464
464
  def test_mock_request_using_response_with_transfer_encoding_header_has_valid_transfer_encoding_header
465
- FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_with_transfer_encoding')
465
+ FakeWeb.register_uri(:get, 'http://www.google.com/', :response => fixture_path("google_response_with_transfer_encoding"))
466
466
  response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
467
467
  assert_not_nil response['transfer-encoding']
468
468
  assert response['transfer-encoding'] == 'chunked'
469
469
  end
470
470
 
471
471
  def test_mock_request_using_response_without_transfer_encoding_header_does_not_have_a_transfer_encoding_header
472
- FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding')
472
+ FakeWeb.register_uri(:get, 'http://www.google.com/', :response => fixture_path("google_response_without_transfer_encoding"))
473
473
  response = nil
474
474
  response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
475
475
  assert !response.key?('transfer-encoding')
476
476
  end
477
477
 
478
478
  def test_mock_request_using_response_from_curl_has_original_transfer_encoding_header
479
- FakeWeb.register_uri(:get, 'http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_from_curl')
479
+ FakeWeb.register_uri(:get, 'http://www.google.com/', :response => fixture_path("google_response_from_curl"))
480
480
  response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
481
481
  assert_not_nil response['transfer-encoding']
482
482
  assert response['transfer-encoding'] == 'chunked'
483
483
  end
484
484
 
485
485
  def test_txt_file_should_have_three_lines
486
- FakeWeb.register_uri(:get, 'http://www.google.com/', :body => File.dirname(__FILE__) + '/fixtures/test_txt_file')
486
+ FakeWeb.register_uri(:get, 'http://www.google.com/', :body => fixture_path("test_txt_file"))
487
487
  response = Net::HTTP.start('www.google.com') { |query| query.get('/') }
488
488
  assert response.body.split(/\n/).size == 3, "response has #{response.body.split(/\n/).size} lines should have 3"
489
489
  end
@@ -520,6 +520,20 @@ class TestFakeWeb < Test::Unit::TestCase
520
520
  assert_equal File.dirname(__FILE__), body
521
521
  end
522
522
 
523
+ def test_registering_with_a_body_pointing_to_a_pathname
524
+ path = Pathname.new(fixture_path("test_example.txt"))
525
+ FakeWeb.register_uri(:get, "http://example.com", :body => path)
526
+ response = Net::HTTP.start("example.com") { |http| http.get("/") }
527
+ assert_equal "test example content", response.body
528
+ end
529
+
530
+ def test_registering_with_a_response_pointing_to_a_pathname
531
+ path = Pathname.new(fixture_path("google_response_without_transfer_encoding"))
532
+ FakeWeb.register_uri(:get, "http://google.com", :response => path)
533
+ response = Net::HTTP.start("google.com") { |http| http.get("/") }
534
+ assert response.body.include?("<title>Google</title>")
535
+ end
536
+
523
537
  def test_http_version_from_string_response
524
538
  FakeWeb.register_uri(:get, "http://example.com", :body => "example")
525
539
  response = Net::HTTP.start("example.com") { |http| http.get("/") }
@@ -527,13 +541,13 @@ class TestFakeWeb < Test::Unit::TestCase
527
541
  end
528
542
 
529
543
  def test_http_version_from_file_response
530
- FakeWeb.register_uri(:get, "http://example.com", :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
544
+ FakeWeb.register_uri(:get, "http://example.com", :body => fixture_path("test_example.txt"))
531
545
  response = Net::HTTP.start("example.com") { |http| http.get("/") }
532
546
  assert_equal "1.0", response.http_version
533
547
  end
534
548
 
535
549
  def test_version
536
- assert_equal "1.2.7", FakeWeb::VERSION
550
+ assert_equal "1.2.8", FakeWeb::VERSION
537
551
  end
538
552
 
539
553
  end
@@ -1,14 +1,14 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeWebOpenURI < Test::Unit::TestCase
4
4
 
5
5
  def test_content_for_registered_uri
6
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
6
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
7
7
  assert_equal 'test example content', FakeWeb.response_for(:get, 'http://mock/test_example.txt').body
8
8
  end
9
9
 
10
10
  def test_mock_open
11
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
11
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
12
12
  assert_equal 'test example content', open('http://mock/test_example.txt').read
13
13
  end
14
14
 
@@ -51,7 +51,7 @@ class TestFakeWebOpenURI < Test::Unit::TestCase
51
51
  end
52
52
 
53
53
  def test_mock_open_with_block
54
- FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => File.dirname(__FILE__) + '/fixtures/test_example.txt')
54
+ FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
55
55
  body = open('http://mock/test_example.txt') { |f| f.readlines }
56
56
  assert_equal 'test example content', body.first
57
57
  end
@@ -1,8 +1,8 @@
1
- $:.unshift "#{File.dirname(__FILE__)}/../lib"
2
-
3
1
  require 'test/unit'
4
2
  require 'open-uri'
3
+ require 'pathname'
5
4
  require 'fake_web'
5
+ require 'rbconfig'
6
6
  require 'rubygems'
7
7
  require 'mocha'
8
8
 
@@ -25,6 +25,10 @@ end
25
25
 
26
26
  module FakeWebTestHelper
27
27
 
28
+ def fixture_path(basename)
29
+ "test/fixtures/#{basename}"
30
+ end
31
+
28
32
  def capture_stderr
29
33
  $stderr = StringIO.new
30
34
  yield
@@ -33,6 +37,12 @@ module FakeWebTestHelper
33
37
  $stderr = STDERR
34
38
  end
35
39
 
40
+ # The path to the current ruby interpreter. Adapted from Rake's FileUtils.
41
+ def ruby_path
42
+ ext = ((RbConfig::CONFIG['ruby_install_name'] =~ /\.(com|cmd|exe|bat|rb|sh)$/) ? "" : RbConfig::CONFIG['EXEEXT'])
43
+ File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'] + ext).sub(/.*\s.*/m, '"\&"')
44
+ end
45
+
36
46
  # Sets several expectations (using Mocha) that a real HTTP request makes it
37
47
  # past FakeWeb to the socket layer. You can use this when you need to check
38
48
  # that a request isn't handled by FakeWeb.
@@ -57,7 +67,8 @@ module FakeWebTestHelper
57
67
  request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
58
68
  socket.expects(:write).with(all_of(includes(request_parts[0]), includes(request_parts[1]))).returns(100)
59
69
 
60
- 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)
70
+ read_method = RUBY_VERSION >= "1.9.2" ? :read_nonblock : :sysread
71
+ socket.expects(read_method).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)
61
72
  end
62
73
 
63
74
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestMissingOpenURI < Test::Unit::TestCase
4
4
 
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class TestMissingPathname < Test::Unit::TestCase
4
+
5
+ def setup
6
+ super
7
+ @saved_pathname = Pathname
8
+ Object.send(:remove_const, :Pathname)
9
+ end
10
+
11
+ def teardown
12
+ super
13
+ Object.const_set(:Pathname, @saved_pathname)
14
+ end
15
+
16
+ # FakeWeb supports using Pathname objects where filenames are expected, but
17
+ # Pathname isn't required to use FakeWeb. Make sure everything still works
18
+ # when Pathname isn't in use.
19
+
20
+ def test_register_using_body_without_pathname
21
+ FakeWeb.register_uri(:get, "http://example.com/", :body => fixture_path("test_example.txt"))
22
+ Net::HTTP.start("example.com") { |http| http.get("/") }
23
+ end
24
+
25
+ def test_register_using_response_without_pathname
26
+ FakeWeb.register_uri(:get, "http://example.com/", :response => fixture_path("google_response_without_transfer_encoding"))
27
+ Net::HTTP.start("example.com") { |http| http.get("/") }
28
+ end
29
+
30
+ def test_register_using_unsupported_response_without_pathname
31
+ FakeWeb.register_uri(:get, "http://example.com/", :response => 1)
32
+ assert_raise StandardError do
33
+ Net::HTTP.start("example.com") { |http| http.get("/") }
34
+ end
35
+ end
36
+
37
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestOtherNetHttpLibraries < Test::Unit::TestCase
4
4
 
@@ -8,8 +8,7 @@ class TestOtherNetHttpLibraries < Test::Unit::TestCase
8
8
  vendor_dirs = Dir["#{File.dirname(__FILE__)}/vendor/*/lib"]
9
9
  load_path_opts = vendor_dirs.unshift(fakeweb_dir).map { |dir| "-I#{dir}" }.join(" ")
10
10
 
11
- # TODO: use the same Ruby executable that this test was invoked with
12
- `ruby #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1`
11
+ `#{ruby_path} #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1`
13
12
  end
14
13
 
15
14
  def test_requiring_samuel_before_fakeweb_prints_warning
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestPrecedence < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeWebQueryString < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestRegexes < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestResponseHeaders < Test::Unit::TestCase
4
4
 
@@ -23,7 +23,7 @@ class TestResponseHeaders < Test::Unit::TestCase
23
23
  end
24
24
 
25
25
  def test_cookies_when_registering_with_file_and_set_cookie_header
26
- FakeWeb.register_uri(:get, "http://example.com/", :body => File.dirname(__FILE__) + '/fixtures/test_example.txt',
26
+ FakeWeb.register_uri(:get, "http://example.com/", :body => fixture_path("test_example.txt"),
27
27
  :set_cookie => "user_id=1; example=yes")
28
28
  response = Net::HTTP.start("example.com") { |query| query.get("/") }
29
29
  assert_equal "test example content", response.body
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestFakeWebTrailingSlashes < Test::Unit::TestCase
4
4
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require 'test_helper'
2
2
 
3
3
  class TestUtility < Test::Unit::TestCase
4
4
 
@@ -67,4 +67,10 @@ class TestUtility < Test::Unit::TestCase
67
67
  assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
68
68
  end
69
69
 
70
+ def test_uri_escape_delegates_to_uri_parser_when_available
71
+ parsing_object = URI.const_defined?(:Parser) ? URI::Parser.any_instance : URI
72
+ parsing_object.expects(:escape).with("string", /unsafe/).returns("escaped")
73
+ assert_equal "escaped", FakeWeb::Utility.uri_escape("string", /unsafe/)
74
+ end
75
+
70
76
  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.7
4
+ version: 1.2.8
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-11-02 00:00:00 -08:00
13
+ date: 2009-12-25 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -42,7 +42,6 @@ files:
42
42
  - Rakefile
43
43
  - fakeweb.gemspec
44
44
  - lib/fake_web.rb
45
- - lib/fake_web/VERSION
46
45
  - lib/fake_web/ext/net_http.rb
47
46
  - lib/fake_web/registry.rb
48
47
  - lib/fake_web/responder.rb
@@ -62,6 +61,7 @@ files:
62
61
  - test/test_fake_web_open_uri.rb
63
62
  - test/test_helper.rb
64
63
  - test/test_missing_open_uri.rb
64
+ - test/test_missing_pathname.rb
65
65
  - test/test_other_net_http_libraries.rb
66
66
  - test/test_precedence.rb
67
67
  - test/test_query_string.rb
@@ -126,6 +126,7 @@ test_files:
126
126
  - test/test_fake_web_open_uri.rb
127
127
  - test/test_helper.rb
128
128
  - test/test_missing_open_uri.rb
129
+ - test/test_missing_pathname.rb
129
130
  - test/test_other_net_http_libraries.rb
130
131
  - test/test_precedence.rb
131
132
  - test/test_query_string.rb
@@ -1 +0,0 @@
1
- 1.2.7