fakeweb 1.2.6 → 1.2.7
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/.gitignore +1 -0
- data/CHANGELOG +11 -0
- data/Rakefile +7 -7
- data/fakeweb.gemspec +41 -7
- data/lib/fake_web.rb +4 -1
- data/lib/fake_web/VERSION +1 -0
- data/lib/fake_web/ext/net_http.rb +18 -8
- data/lib/fake_web/registry.rb +8 -21
- data/lib/fake_web/utility.rb +28 -17
- data/test/test_fake_web.rb +1 -1
- data/test/test_other_net_http_libraries.rb +37 -0
- data/test/test_regexes.rb +17 -12
- data/test/test_utility.rb +0 -21
- data/test/vendor/right_http_connection-1.2.4/History.txt +59 -0
- data/test/vendor/right_http_connection-1.2.4/Manifest.txt +7 -0
- data/test/vendor/right_http_connection-1.2.4/README.txt +54 -0
- data/test/vendor/right_http_connection-1.2.4/Rakefile +103 -0
- data/test/vendor/right_http_connection-1.2.4/lib/net_fix.rb +160 -0
- data/test/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +435 -0
- data/test/vendor/right_http_connection-1.2.4/setup.rb +1585 -0
- data/test/vendor/samuel-0.2.1/.document +5 -0
- data/test/vendor/samuel-0.2.1/.gitignore +5 -0
- data/test/vendor/samuel-0.2.1/LICENSE +20 -0
- data/test/vendor/samuel-0.2.1/README.rdoc +70 -0
- data/test/vendor/samuel-0.2.1/Rakefile +62 -0
- data/test/vendor/samuel-0.2.1/VERSION +1 -0
- data/test/vendor/samuel-0.2.1/lib/samuel.rb +52 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/net_http.rb +10 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/request.rb +96 -0
- data/test/vendor/samuel-0.2.1/samuel.gemspec +69 -0
- data/test/vendor/samuel-0.2.1/test/request_test.rb +193 -0
- data/test/vendor/samuel-0.2.1/test/samuel_test.rb +42 -0
- data/test/vendor/samuel-0.2.1/test/test_helper.rb +66 -0
- data/test/vendor/samuel-0.2.1/test/thread_test.rb +32 -0
- metadata +36 -3
- data/VERSION +0 -1
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
fakeweb (1.2.7)
|
2
|
+
|
3
|
+
* revert to sorting query params before matching requests against regexps,
|
4
|
+
instead of the 1.2.6 behavior that tried every possible order combination;
|
5
|
+
that was factorial-time, which made matching hang for requests with long query
|
6
|
+
strings [Jason Wadsworth, David Dollar, Blaine Cook]
|
7
|
+
|
8
|
+
* print a warning when FakeWeb is loaded before RightHttpConnection or after
|
9
|
+
Samuel, other libs that patch Net::HTTP [Chris Kampmeier, Ben Brinckerhoff]
|
10
|
+
|
11
|
+
|
1
12
|
fakeweb (1.2.6)
|
2
13
|
|
3
14
|
* fix that query params in a regex would have to be sorted for it to ever match
|
data/Rakefile
CHANGED
@@ -3,11 +3,14 @@ puts "Using ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rake'
|
5
5
|
|
6
|
+
version = File.read(File.join(File.dirname(__FILE__), "lib", "fake_web", "VERSION")).strip
|
7
|
+
|
6
8
|
begin
|
7
9
|
require 'jeweler'
|
8
10
|
Jeweler::Tasks.new do |gem|
|
9
11
|
gem.name = "fakeweb"
|
10
12
|
gem.rubyforge_project = "fakeweb"
|
13
|
+
gem.version = version
|
11
14
|
gem.summary = "A tool for faking responses to HTTP requests"
|
12
15
|
gem.description = "FakeWeb is a helper for faking web requests in Ruby. It works at a global level, without modifying code or writing extensive stubs."
|
13
16
|
gem.email = ["chris@kampers.net", "romeda@gmail.com"]
|
@@ -27,28 +30,26 @@ end
|
|
27
30
|
|
28
31
|
require 'rake/testtask'
|
29
32
|
Rake::TestTask.new(:test) do |test|
|
30
|
-
test.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb")
|
33
|
+
test.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb", "test/vendor")
|
31
34
|
test.verbose = false
|
32
35
|
test.warning = true
|
33
36
|
end
|
34
37
|
|
35
|
-
task :default => :test
|
38
|
+
task :default => [:check_dependencies, :test]
|
36
39
|
|
37
40
|
|
38
41
|
begin
|
39
42
|
require 'rcov/rcovtask'
|
40
43
|
Rcov::RcovTask.new do |t|
|
41
|
-
t.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb")
|
44
|
+
t.test_files = FileList["test/**/*.rb"].exclude("test/test_helper.rb", "test/vendor")
|
42
45
|
t.rcov_opts << "--sort coverage"
|
43
46
|
t.rcov_opts << "--exclude gems"
|
44
47
|
t.warning = true
|
45
48
|
end
|
46
|
-
rescue
|
49
|
+
rescue LoadError
|
47
50
|
print "rcov support disabled "
|
48
51
|
if RUBY_PLATFORM =~ /java/
|
49
52
|
puts "(running under JRuby)"
|
50
|
-
elsif RUBY_VERSION =~ /^1\.9/
|
51
|
-
puts "(running under Ruby 1.9)"
|
52
53
|
else
|
53
54
|
puts "(install RCov to enable the `rcov` task)"
|
54
55
|
end
|
@@ -58,7 +59,6 @@ end
|
|
58
59
|
begin
|
59
60
|
require 'rdoc/task'
|
60
61
|
Rake::RDocTask.new do |rdoc|
|
61
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
62
62
|
rdoc.main = "README.rdoc"
|
63
63
|
rdoc.rdoc_files.include("README.rdoc", "CHANGELOG", "LICENSE.txt", "lib/*.rb")
|
64
64
|
rdoc.title = "FakeWeb #{version} API Documentation"
|
data/fakeweb.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{fakeweb}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.7"
|
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-
|
12
|
+
s.date = %q{2009-11-02}
|
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 = [
|
@@ -22,9 +22,9 @@ Gem::Specification.new do |s|
|
|
22
22
|
"LICENSE.txt",
|
23
23
|
"README.rdoc",
|
24
24
|
"Rakefile",
|
25
|
-
"VERSION",
|
26
25
|
"fakeweb.gemspec",
|
27
26
|
"lib/fake_web.rb",
|
27
|
+
"lib/fake_web/VERSION",
|
28
28
|
"lib/fake_web/ext/net_http.rb",
|
29
29
|
"lib/fake_web/registry.rb",
|
30
30
|
"lib/fake_web/responder.rb",
|
@@ -44,12 +44,34 @@ Gem::Specification.new do |s|
|
|
44
44
|
"test/test_fake_web_open_uri.rb",
|
45
45
|
"test/test_helper.rb",
|
46
46
|
"test/test_missing_open_uri.rb",
|
47
|
+
"test/test_other_net_http_libraries.rb",
|
47
48
|
"test/test_precedence.rb",
|
48
49
|
"test/test_query_string.rb",
|
49
50
|
"test/test_regexes.rb",
|
50
51
|
"test/test_response_headers.rb",
|
51
52
|
"test/test_trailing_slashes.rb",
|
52
|
-
"test/test_utility.rb"
|
53
|
+
"test/test_utility.rb",
|
54
|
+
"test/vendor/right_http_connection-1.2.4/History.txt",
|
55
|
+
"test/vendor/right_http_connection-1.2.4/Manifest.txt",
|
56
|
+
"test/vendor/right_http_connection-1.2.4/README.txt",
|
57
|
+
"test/vendor/right_http_connection-1.2.4/Rakefile",
|
58
|
+
"test/vendor/right_http_connection-1.2.4/lib/net_fix.rb",
|
59
|
+
"test/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb",
|
60
|
+
"test/vendor/right_http_connection-1.2.4/setup.rb",
|
61
|
+
"test/vendor/samuel-0.2.1/.document",
|
62
|
+
"test/vendor/samuel-0.2.1/.gitignore",
|
63
|
+
"test/vendor/samuel-0.2.1/LICENSE",
|
64
|
+
"test/vendor/samuel-0.2.1/README.rdoc",
|
65
|
+
"test/vendor/samuel-0.2.1/Rakefile",
|
66
|
+
"test/vendor/samuel-0.2.1/VERSION",
|
67
|
+
"test/vendor/samuel-0.2.1/lib/samuel.rb",
|
68
|
+
"test/vendor/samuel-0.2.1/lib/samuel/net_http.rb",
|
69
|
+
"test/vendor/samuel-0.2.1/lib/samuel/request.rb",
|
70
|
+
"test/vendor/samuel-0.2.1/samuel.gemspec",
|
71
|
+
"test/vendor/samuel-0.2.1/test/request_test.rb",
|
72
|
+
"test/vendor/samuel-0.2.1/test/samuel_test.rb",
|
73
|
+
"test/vendor/samuel-0.2.1/test/test_helper.rb",
|
74
|
+
"test/vendor/samuel-0.2.1/test/thread_test.rb"
|
53
75
|
]
|
54
76
|
s.homepage = %q{http://github.com/chrisk/fakeweb}
|
55
77
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -65,12 +87,23 @@ Gem::Specification.new do |s|
|
|
65
87
|
"test/test_fake_web_open_uri.rb",
|
66
88
|
"test/test_helper.rb",
|
67
89
|
"test/test_missing_open_uri.rb",
|
90
|
+
"test/test_other_net_http_libraries.rb",
|
68
91
|
"test/test_precedence.rb",
|
69
92
|
"test/test_query_string.rb",
|
70
93
|
"test/test_regexes.rb",
|
71
94
|
"test/test_response_headers.rb",
|
72
95
|
"test/test_trailing_slashes.rb",
|
73
|
-
"test/test_utility.rb"
|
96
|
+
"test/test_utility.rb",
|
97
|
+
"test/vendor/right_http_connection-1.2.4/lib/net_fix.rb",
|
98
|
+
"test/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb",
|
99
|
+
"test/vendor/right_http_connection-1.2.4/setup.rb",
|
100
|
+
"test/vendor/samuel-0.2.1/lib/samuel/net_http.rb",
|
101
|
+
"test/vendor/samuel-0.2.1/lib/samuel/request.rb",
|
102
|
+
"test/vendor/samuel-0.2.1/lib/samuel.rb",
|
103
|
+
"test/vendor/samuel-0.2.1/test/request_test.rb",
|
104
|
+
"test/vendor/samuel-0.2.1/test/samuel_test.rb",
|
105
|
+
"test/vendor/samuel-0.2.1/test/test_helper.rb",
|
106
|
+
"test/vendor/samuel-0.2.1/test/thread_test.rb"
|
74
107
|
]
|
75
108
|
|
76
109
|
if s.respond_to? :specification_version then
|
@@ -86,3 +119,4 @@ Gem::Specification.new do |s|
|
|
86
119
|
s.add_dependency(%q<mocha>, [">= 0.9.5"])
|
87
120
|
end
|
88
121
|
end
|
122
|
+
|
data/lib/fake_web.rb
CHANGED
@@ -7,10 +7,13 @@ require 'fake_web/responder'
|
|
7
7
|
require 'fake_web/stub_socket'
|
8
8
|
require 'fake_web/utility'
|
9
9
|
|
10
|
+
FakeWeb::Utility.record_loaded_net_http_replacement_libs
|
11
|
+
FakeWeb::Utility.puts_warning_for_net_http_around_advice_libs_if_needed
|
12
|
+
|
10
13
|
module FakeWeb
|
11
14
|
|
12
15
|
# Returns the version string for the copy of FakeWeb you have loaded.
|
13
|
-
VERSION = File.read(File.join(File.dirname(__FILE__), "
|
16
|
+
VERSION = File.read(File.join(File.dirname(__FILE__), "fake_web", "VERSION")).strip
|
14
17
|
|
15
18
|
# Resets the FakeWeb Registry. This will force all subsequent web requests to
|
16
19
|
# behave as real requests.
|
@@ -0,0 +1 @@
|
|
1
|
+
1.2.7
|
@@ -5,8 +5,7 @@ require 'stringio'
|
|
5
5
|
module Net #:nodoc: all
|
6
6
|
|
7
7
|
class BufferedIO
|
8
|
-
|
9
|
-
def initialize(io, debug_output = nil)
|
8
|
+
def initialize_with_fakeweb(io, debug_output = nil)
|
10
9
|
@read_timeout = 60
|
11
10
|
@rbuf = ''
|
12
11
|
@debug_output = debug_output
|
@@ -23,18 +22,20 @@ module Net #:nodoc: all
|
|
23
22
|
end
|
24
23
|
raise "Unable to create local socket" unless @io
|
25
24
|
end
|
25
|
+
alias_method :initialize_without_fakeweb, :initialize
|
26
|
+
alias_method :initialize, :initialize_with_fakeweb
|
26
27
|
end
|
27
28
|
|
28
29
|
class HTTP
|
29
30
|
class << self
|
30
|
-
|
31
|
-
def socket_type
|
31
|
+
def socket_type_with_fakeweb
|
32
32
|
FakeWeb::StubSocket
|
33
33
|
end
|
34
|
+
alias_method :socket_type_without_fakeweb, :socket_type
|
35
|
+
alias_method :socket_type, :socket_type_with_fakeweb
|
34
36
|
end
|
35
37
|
|
36
|
-
|
37
|
-
def request(request, body = nil, &block)
|
38
|
+
def request_with_fakeweb(request, body = nil, &block)
|
38
39
|
protocol = use_ssl? ? "https" : "http"
|
39
40
|
|
40
41
|
path = request.path
|
@@ -62,10 +63,19 @@ module Net #:nodoc: all
|
|
62
63
|
"Real HTTP connections are disabled. Unregistered request: #{request.method} #{uri}"
|
63
64
|
end
|
64
65
|
end
|
66
|
+
alias_method :request_without_fakeweb, :request
|
67
|
+
alias_method :request, :request_with_fakeweb
|
65
68
|
|
66
|
-
|
67
|
-
def
|
69
|
+
|
70
|
+
def connect_with_fakeweb
|
71
|
+
unless @@alredy_checked_for_net_http_replacement_libs ||= false
|
72
|
+
FakeWeb::Utility.puts_warning_for_net_http_replacement_libs_if_needed
|
73
|
+
@@alredy_checked_for_net_http_replacement_libs = true
|
74
|
+
end
|
75
|
+
nil
|
68
76
|
end
|
77
|
+
alias_method :connect_without_fakeweb, :connect
|
78
|
+
alias_method :connect, :connect_with_fakeweb
|
69
79
|
end
|
70
80
|
|
71
81
|
end
|
data/lib/fake_web/registry.rb
CHANGED
@@ -74,32 +74,19 @@ module FakeWeb
|
|
74
74
|
|
75
75
|
|
76
76
|
def variations_of_uri_as_strings(uri_object)
|
77
|
-
|
78
|
-
|
77
|
+
normalized_uri = normalize_uri(uri_object.dup)
|
78
|
+
normalized_uri_string = normalized_uri.to_s
|
79
79
|
|
80
|
-
|
81
|
-
query = normalized_uri.query
|
82
|
-
if query.nil? || query.empty?
|
83
|
-
uris << normalized_uri
|
84
|
-
else
|
85
|
-
FakeWeb::Utility.simple_array_permutation(query.split('&')) do |p|
|
86
|
-
current_permutation = normalized_uri.dup
|
87
|
-
current_permutation.query = p.join('&')
|
88
|
-
uris << current_permutation
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
uri_strings = uris.map { |uri| uri.to_s }
|
80
|
+
variations = [normalized_uri_string]
|
93
81
|
|
94
|
-
#
|
82
|
+
# if the port is implied in the original, add a copy with an explicit port
|
95
83
|
if normalized_uri.default_port == normalized_uri.port
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
}
|
84
|
+
variations << normalized_uri_string.sub(
|
85
|
+
/#{Regexp.escape(normalized_uri.request_uri)}$/,
|
86
|
+
":#{normalized_uri.port}#{normalized_uri.request_uri}")
|
100
87
|
end
|
101
88
|
|
102
|
-
|
89
|
+
variations
|
103
90
|
end
|
104
91
|
|
105
92
|
def normalize_uri(uri)
|
data/lib/fake_web/utility.rb
CHANGED
@@ -18,26 +18,37 @@ module FakeWeb
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
def self.puts_warning_for_net_http_around_advice_libs_if_needed
|
22
|
+
libs = {"Samuel" => defined?(Samuel)}
|
23
|
+
warnings = libs.select { |_, loaded| loaded }.map do |name, _|
|
24
|
+
<<-TEXT.gsub(/ {10}/, '')
|
25
|
+
\e[1mWarning: FakeWeb was loaded after #{name}\e[0m
|
26
|
+
* #{name}'s code is being ignored when a request is handled by FakeWeb,
|
27
|
+
because both libraries work by patching Net::HTTP.
|
28
|
+
* To fix this, just reorder your requires so that FakeWeb is before #{name}.
|
29
|
+
TEXT
|
30
|
+
end
|
31
|
+
$stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any?
|
32
|
+
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
def self.record_loaded_net_http_replacement_libs
|
35
|
+
libs = {"RightHttpConnection" => defined?(RightHttpConnection)}
|
36
|
+
@loaded_net_http_replacement_libs = libs.map { |name, loaded| name if loaded }.compact
|
37
|
+
end
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
|
39
|
+
def self.puts_warning_for_net_http_replacement_libs_if_needed
|
40
|
+
libs = {"RightHttpConnection" => defined?(RightHttpConnection)}
|
41
|
+
warnings = libs.select { |_, loaded| loaded }.
|
42
|
+
reject { |name, _| @loaded_net_http_replacement_libs.include?(name) }.
|
43
|
+
map do |name, _|
|
44
|
+
<<-TEXT.gsub(/ {10}/, '')
|
45
|
+
\e[1mWarning: #{name} was loaded after FakeWeb\e[0m
|
46
|
+
* FakeWeb's code is being ignored, because #{name} replaces parts of
|
47
|
+
Net::HTTP without deferring to other libraries. This will break Net::HTTP requests.
|
48
|
+
* To fix this, just reorder your requires so that #{name} is before FakeWeb.
|
49
|
+
TEXT
|
38
50
|
end
|
39
|
-
|
40
|
-
array
|
51
|
+
$stderr.puts "\n" + warnings.join("\n") + "\n" if warnings.any?
|
41
52
|
end
|
42
53
|
|
43
54
|
end
|
data/test/test_fake_web.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class TestOtherNetHttpLibraries < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def capture_output_from_requiring(libs, additional_code = "")
|
6
|
+
requires = libs.map { |lib| "require '#{lib}'" }.join("; ")
|
7
|
+
fakeweb_dir = "#{File.dirname(__FILE__)}/../lib"
|
8
|
+
vendor_dirs = Dir["#{File.dirname(__FILE__)}/vendor/*/lib"]
|
9
|
+
load_path_opts = vendor_dirs.unshift(fakeweb_dir).map { |dir| "-I#{dir}" }.join(" ")
|
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`
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_requiring_samuel_before_fakeweb_prints_warning
|
16
|
+
output = capture_output_from_requiring %w(samuel fakeweb)
|
17
|
+
assert_match %r(Warning: FakeWeb was loaded after Samuel), output
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_requiring_samuel_after_fakeweb_does_not_print_warning
|
21
|
+
output = capture_output_from_requiring %w(fakeweb samuel)
|
22
|
+
assert output.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_requiring_right_http_connection_before_fakeweb_and_then_connecting_does_not_print_warning
|
26
|
+
additional_code = "Net::HTTP.start('example.com')"
|
27
|
+
output = capture_output_from_requiring %w(right_http_connection fakeweb), additional_code
|
28
|
+
assert output.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_requiring_right_http_connection_after_fakeweb_and_then_connecting_prints_warning
|
32
|
+
additional_code = "Net::HTTP.start('example.com')"
|
33
|
+
output = capture_output_from_requiring %w(fakeweb right_http_connection), additional_code
|
34
|
+
assert_match %r(Warning: RightHttpConnection was loaded after FakeWeb), output
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/test/test_regexes.rb
CHANGED
@@ -44,17 +44,6 @@ class TestRegexes < Test::Unit::TestCase
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def test_requesting_a_uri_that_matches_two_registered_regexes_with_differently_ordered_query_params_raises_an_error
|
48
|
-
FakeWeb.register_uri(:get, %r[example.com/list\?b=2&a=1], :body => "first")
|
49
|
-
FakeWeb.register_uri(:get, %r[example.com/list\?a=1&b=2], :body => "second")
|
50
|
-
assert_raise FakeWeb::MultipleMatchingURIsError do
|
51
|
-
Net::HTTP.start("example.com") { |query| query.get('/list?a=1&b=2') }
|
52
|
-
end
|
53
|
-
assert_raise FakeWeb::MultipleMatchingURIsError do
|
54
|
-
Net::HTTP.start("example.com") { |query| query.get('/list?b=2&a=1') }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
47
|
def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error_including_request_info
|
59
48
|
FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
|
60
49
|
FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
|
@@ -142,11 +131,27 @@ class TestRegexes < Test::Unit::TestCase
|
|
142
131
|
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?notimportant=1&unimportant=1")
|
143
132
|
end
|
144
133
|
|
145
|
-
def
|
134
|
+
def test_registry_does_not_match_when_regex_has_unsorted_query_params
|
146
135
|
FakeWeb.register_uri(:get, %r[example\.com/list\?b=2&a=1], :body => "example")
|
136
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?b=2&a=1")
|
137
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?a=1&b=2")
|
138
|
+
assert !FakeWeb.registered_uri?(:get, "https://example.com:443/list?b=2&a=1")
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_registry_matches_when_regex_has_sorted_query_params
|
142
|
+
FakeWeb.register_uri(:get, %r[example\.com/list\?a=1&b=2], :body => "example")
|
147
143
|
assert FakeWeb.registered_uri?(:get, "http://example.com/list?b=2&a=1")
|
148
144
|
assert FakeWeb.registered_uri?(:get, "http://example.com/list?a=1&b=2")
|
149
145
|
assert FakeWeb.registered_uri?(:get, "https://example.com:443/list?b=2&a=1")
|
150
146
|
end
|
151
147
|
|
148
|
+
def test_registry_matches_quickly_with_lots_of_query_params
|
149
|
+
# regression test for code that tried to calculate the permutations of the
|
150
|
+
# query params, which hangs with a large number of params
|
151
|
+
FakeWeb.register_uri(:get, %r[example.com], :body => "example")
|
152
|
+
Timeout::timeout(1) do
|
153
|
+
FakeWeb.registered_uri?(:get, "http://example.com/?a=1&b=2&c=3&d=4&e=5&f=6&g=7&h=8")
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
152
157
|
end
|
data/test/test_utility.rb
CHANGED
@@ -67,25 +67,4 @@ 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_simple_array_permutation_with_one_element
|
71
|
-
array, permutations = [1], [[1]]
|
72
|
-
FakeWeb::Utility.simple_array_permutation(array) do |permutation|
|
73
|
-
permutations.delete(permutation)
|
74
|
-
end
|
75
|
-
assert permutations.empty?
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_simple_array_permutation_with_three_elements
|
79
|
-
array = [1, 2, 3]
|
80
|
-
permutations = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
|
81
|
-
FakeWeb::Utility.simple_array_permutation(array) do |permutation|
|
82
|
-
permutations.delete(permutation)
|
83
|
-
end
|
84
|
-
assert permutations.empty?
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_simple_array_permutation_return_value
|
88
|
-
array = [1, 2, 3]
|
89
|
-
assert array, FakeWeb::Utility.simple_array_permutation(array) { }
|
90
|
-
end
|
91
70
|
end
|