rubysl-net-http 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +0 -1
  3. data/.travis.yml +7 -0
  4. data/README.md +2 -2
  5. data/Rakefile +0 -1
  6. data/lib/net/http.rb +1 -0
  7. data/lib/rubysl/net/http.rb +2 -0
  8. data/lib/rubysl/net/http/http.rb +2290 -0
  9. data/lib/rubysl/net/http/https.rb +173 -0
  10. data/lib/{rubysl-net-http → rubysl/net/http}/version.rb +2 -2
  11. data/rubysl-net-http.gemspec +18 -18
  12. data/spec/HTTPBadResponse_spec.rb +7 -0
  13. data/spec/HTTPError_spec.rb +11 -0
  14. data/spec/HTTPFatalError_spec.rb +11 -0
  15. data/spec/HTTPHeaderSyntaxError_spec.rb +7 -0
  16. data/spec/HTTPRetriableError_spec.rb +11 -0
  17. data/spec/HTTPServerException_spec.rb +11 -0
  18. data/spec/http/Proxy_spec.rb +34 -0
  19. data/spec/http/active_spec.rb +7 -0
  20. data/spec/http/address_spec.rb +8 -0
  21. data/spec/http/close_on_empty_response_spec.rb +9 -0
  22. data/spec/http/copy_spec.rb +26 -0
  23. data/spec/http/default_port_spec.rb +7 -0
  24. data/spec/http/delete_spec.rb +26 -0
  25. data/spec/http/finish_spec.rb +30 -0
  26. data/spec/http/fixtures/http_server.rb +97 -0
  27. data/spec/http/get2_spec.rb +7 -0
  28. data/spec/http/get_print_spec.rb +28 -0
  29. data/spec/http/get_response_spec.rb +28 -0
  30. data/spec/http/get_spec.rb +52 -0
  31. data/spec/http/head2_spec.rb +8 -0
  32. data/spec/http/head_spec.rb +30 -0
  33. data/spec/http/http_default_port_spec.rb +7 -0
  34. data/spec/http/https_default_port_spec.rb +7 -0
  35. data/spec/http/initialize_spec.rb +45 -0
  36. data/spec/http/inspect_spec.rb +25 -0
  37. data/spec/http/is_version_1_1_spec.rb +6 -0
  38. data/spec/http/is_version_1_2_spec.rb +6 -0
  39. data/spec/http/lock_spec.rb +26 -0
  40. data/spec/http/mkcol_spec.rb +26 -0
  41. data/spec/http/move_spec.rb +30 -0
  42. data/spec/http/new_spec.rb +96 -0
  43. data/spec/http/newobj_spec.rb +47 -0
  44. data/spec/http/open_timeout_spec.rb +23 -0
  45. data/spec/http/options_spec.rb +30 -0
  46. data/spec/http/port_spec.rb +8 -0
  47. data/spec/http/post2_spec.rb +7 -0
  48. data/spec/http/post_form_spec.rb +20 -0
  49. data/spec/http/post_spec.rb +43 -0
  50. data/spec/http/propfind_spec.rb +29 -0
  51. data/spec/http/proppatch_spec.rb +29 -0
  52. data/spec/http/proxy_address_spec.rb +30 -0
  53. data/spec/http/proxy_class_spec.rb +8 -0
  54. data/spec/http/proxy_pass_spec.rb +38 -0
  55. data/spec/http/proxy_port_spec.rb +38 -0
  56. data/spec/http/proxy_user_spec.rb +38 -0
  57. data/spec/http/put2_spec.rb +7 -0
  58. data/spec/http/put_spec.rb +29 -0
  59. data/spec/http/read_timeout_spec.rb +23 -0
  60. data/spec/http/request_get_spec.rb +7 -0
  61. data/spec/http/request_head_spec.rb +7 -0
  62. data/spec/http/request_post_spec.rb +7 -0
  63. data/spec/http/request_put_spec.rb +7 -0
  64. data/spec/http/request_spec.rb +114 -0
  65. data/spec/http/request_types_spec.rb +253 -0
  66. data/spec/http/send_request_spec.rb +123 -0
  67. data/spec/http/set_debug_output_spec.rb +34 -0
  68. data/spec/http/shared/request_get.rb +49 -0
  69. data/spec/http/shared/request_head.rb +49 -0
  70. data/spec/http/shared/request_post.rb +49 -0
  71. data/spec/http/shared/request_put.rb +49 -0
  72. data/spec/http/shared/started.rb +28 -0
  73. data/spec/http/shared/version_1_1.rb +19 -0
  74. data/spec/http/shared/version_1_2.rb +6 -0
  75. data/spec/http/socket_type_spec.rb +7 -0
  76. data/spec/http/start_spec.rb +115 -0
  77. data/spec/http/started_spec.rb +7 -0
  78. data/spec/http/trace_spec.rb +29 -0
  79. data/spec/http/unlock_spec.rb +29 -0
  80. data/spec/http/use_ssl_spec.rb +8 -0
  81. data/spec/http/version_1_1_spec.rb +21 -0
  82. data/spec/http/version_1_2_spec.rb +19 -0
  83. data/spec/httpexceptions/fixtures/classes.rb +5 -0
  84. data/spec/httpexceptions/initialize_spec.rb +16 -0
  85. data/spec/httpexceptions/response_spec.rb +9 -0
  86. data/spec/httpgenericrequest/body_exist_spec.rb +26 -0
  87. data/spec/httpgenericrequest/body_spec.rb +29 -0
  88. data/spec/httpgenericrequest/body_stream_spec.rb +31 -0
  89. data/spec/httpgenericrequest/exec_spec.rb +135 -0
  90. data/spec/httpgenericrequest/inspect_spec.rb +24 -0
  91. data/spec/httpgenericrequest/method_spec.rb +14 -0
  92. data/spec/httpgenericrequest/path_spec.rb +11 -0
  93. data/spec/httpgenericrequest/request_body_permitted_spec.rb +11 -0
  94. data/spec/httpgenericrequest/response_body_permitted_spec.rb +11 -0
  95. data/spec/httpgenericrequest/set_body_internal_spec.rb +20 -0
  96. data/spec/httpheader/add_field_spec.rb +30 -0
  97. data/spec/httpheader/basic_auth_spec.rb +13 -0
  98. data/spec/httpheader/canonical_each_spec.rb +7 -0
  99. data/spec/httpheader/chunked_spec.rb +21 -0
  100. data/spec/httpheader/content_length_spec.rb +53 -0
  101. data/spec/httpheader/content_range_spec.rb +33 -0
  102. data/spec/httpheader/content_type_spec.rb +25 -0
  103. data/spec/httpheader/delete_spec.rb +29 -0
  104. data/spec/httpheader/each_capitalized_name_spec.rb +44 -0
  105. data/spec/httpheader/each_capitalized_spec.rb +8 -0
  106. data/spec/httpheader/each_header_spec.rb +7 -0
  107. data/spec/httpheader/each_key_spec.rb +7 -0
  108. data/spec/httpheader/each_name_spec.rb +7 -0
  109. data/spec/httpheader/each_spec.rb +7 -0
  110. data/spec/httpheader/each_value_spec.rb +45 -0
  111. data/spec/httpheader/element_reference_spec.rb +38 -0
  112. data/spec/httpheader/element_set_spec.rb +40 -0
  113. data/spec/httpheader/fetch_spec.rb +68 -0
  114. data/spec/httpheader/fixtures/classes.rb +11 -0
  115. data/spec/httpheader/form_data_spec.rb +7 -0
  116. data/spec/httpheader/get_fields_spec.rb +38 -0
  117. data/spec/httpheader/initialize_http_header_spec.rb +28 -0
  118. data/spec/httpheader/key_spec.rb +20 -0
  119. data/spec/httpheader/length_spec.rb +7 -0
  120. data/spec/httpheader/main_type_spec.rb +23 -0
  121. data/spec/httpheader/proxy_basic_auth_spec.rb +13 -0
  122. data/spec/httpheader/range_length_spec.rb +31 -0
  123. data/spec/httpheader/range_spec.rb +47 -0
  124. data/spec/httpheader/set_content_type_spec.rb +7 -0
  125. data/spec/httpheader/set_form_data_spec.rb +7 -0
  126. data/spec/httpheader/set_range_spec.rb +7 -0
  127. data/spec/httpheader/shared/each_capitalized.rb +42 -0
  128. data/spec/httpheader/shared/each_header.rb +42 -0
  129. data/spec/httpheader/shared/each_name.rb +39 -0
  130. data/spec/httpheader/shared/set_content_type.rb +20 -0
  131. data/spec/httpheader/shared/set_form_data.rb +27 -0
  132. data/spec/httpheader/shared/set_range.rb +89 -0
  133. data/spec/httpheader/shared/size.rb +18 -0
  134. data/spec/httpheader/size_spec.rb +7 -0
  135. data/spec/httpheader/sub_type_spec.rb +31 -0
  136. data/spec/httpheader/to_hash_spec.rb +24 -0
  137. data/spec/httpheader/type_params_spec.rb +23 -0
  138. data/spec/httprequest/initialize_spec.rb +44 -0
  139. data/spec/httpresponse/body_permitted_spec.rb +12 -0
  140. data/spec/httpresponse/body_spec.rb +6 -0
  141. data/spec/httpresponse/code_spec.rb +23 -0
  142. data/spec/httpresponse/code_type_spec.rb +23 -0
  143. data/spec/httpresponse/entity_spec.rb +6 -0
  144. data/spec/httpresponse/error_spec.rb +23 -0
  145. data/spec/httpresponse/error_type_spec.rb +23 -0
  146. data/spec/httpresponse/exception_type_spec.rb +12 -0
  147. data/spec/httpresponse/header_spec.rb +8 -0
  148. data/spec/httpresponse/http_version_spec.rb +11 -0
  149. data/spec/httpresponse/initialize_spec.rb +10 -0
  150. data/spec/httpresponse/inspect_spec.rb +14 -0
  151. data/spec/httpresponse/message_spec.rb +8 -0
  152. data/spec/httpresponse/msg_spec.rb +8 -0
  153. data/spec/httpresponse/read_body_spec.rb +85 -0
  154. data/spec/httpresponse/read_header_spec.rb +8 -0
  155. data/spec/httpresponse/read_new_spec.rb +21 -0
  156. data/spec/httpresponse/reading_body_spec.rb +57 -0
  157. data/spec/httpresponse/response_spec.rb +8 -0
  158. data/spec/httpresponse/shared/body.rb +18 -0
  159. data/spec/httpresponse/to_ary_spec.rb +25 -0
  160. data/spec/httpresponse/value_spec.rb +23 -0
  161. metadata +366 -88
  162. data/lib/rubysl-net-http.rb +0 -9
@@ -0,0 +1,68 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#fetch" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ describe "when passed key" do
10
+ it "returns the header entry for the passed key" do
11
+ @headers["My-Header"] = "test"
12
+ @headers.fetch("My-Header").should == "test"
13
+
14
+ @headers.add_field("My-Other-Header", "a")
15
+ @headers.add_field("My-Other-Header", "b")
16
+ @headers.add_field("My-Other-Header", "c")
17
+ @headers.fetch("My-Other-Header").should == "a, b, c"
18
+ end
19
+
20
+ it "is case-insensitive" do
21
+ @headers["My-Header"] = "test"
22
+ @headers.fetch("my-header").should == "test"
23
+ @headers.fetch("MY-HEADER").should == "test"
24
+ end
25
+
26
+ it "returns nil when there is no entry for the passed key" do
27
+ lambda { @headers.fetch("my-header") }.should raise_error(IndexError)
28
+ end
29
+ end
30
+
31
+ describe "when passed key, default" do
32
+ it "returns the header entry for the passed key" do
33
+ @headers["My-Header"] = "test"
34
+ @headers.fetch("My-Header", "bla").should == "test"
35
+
36
+ @headers.add_field("My-Other-Header", "a")
37
+ @headers.add_field("My-Other-Header", "b")
38
+ @headers.add_field("My-Other-Header", "c")
39
+ @headers.fetch("My-Other-Header", "bla").should == "a, b, c"
40
+ end
41
+
42
+ # TODO: This raises a NoMethodError: undefined method `join' for "bla":String
43
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/445", "1.8.7" do
44
+ it "returns the default value when there is no entry for the passed key" do
45
+ @headers.fetch("My-Header", "bla").should == "bla"
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "when passed key and block" do
51
+ it "returns the header entry for the passed key" do
52
+ @headers["My-Header"] = "test"
53
+ @headers.fetch("My-Header") {}.should == "test"
54
+
55
+ @headers.add_field("My-Other-Header", "a")
56
+ @headers.add_field("My-Other-Header", "b")
57
+ @headers.add_field("My-Other-Header", "c")
58
+ @headers.fetch("My-Other-Header", "bla") {}.should == "a, b, c"
59
+ end
60
+
61
+ # TODO: This raises a NoMethodError: undefined method `join' for "redaeh-ym":String
62
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/445", "1.8.7" do
63
+ it "yieldsand returns the block's return value when there is no entry for the passed key" do
64
+ @headers.fetch("My-Header") { |key| key.reverse }.should == "redaeh-ym"
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,11 @@
1
+ module NetHTTPHeaderSpecs
2
+ class Example
3
+ include Net::HTTPHeader
4
+
5
+ attr_accessor :body
6
+
7
+ def initialize
8
+ initialize_http_header({})
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/set_form_data', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#form_data=" do
6
+ it_behaves_like :net_httpheader_set_form_data, :form_data=
7
+ end
@@ -0,0 +1,38 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#get_fields when passed key" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ it "returns an Array containing the values of the header entry with the passed key" do
10
+ @headers["My-Header"] = "a"
11
+ @headers.get_fields("My-Header").should == ["a"]
12
+
13
+ @headers.add_field("My-Header", "b")
14
+ @headers.get_fields("My-Header").should == ["a", "b"]
15
+ end
16
+
17
+ it "returns a copy of the header entry values" do
18
+ @headers["My-Header"] = "a"
19
+
20
+ @headers.get_fields("My-Header").clear
21
+ @headers.get_fields("My-Header").should == ["a"]
22
+
23
+ @headers.get_fields("My-Header") << "b"
24
+ @headers.get_fields("My-Header").should == ["a"]
25
+ end
26
+
27
+ it "returns nil for non-existing header entries" do
28
+ @headers.get_fields("My-Header").should be_nil
29
+ @headers.get_fields("My-Other-header").should be_nil
30
+ end
31
+
32
+ it "is case-insensitive" do
33
+ @headers["My-Header"] = "test"
34
+ @headers.get_fields("My-Header").should == ["test"]
35
+ @headers.get_fields("my-header").should == ["test"]
36
+ @headers.get_fields("MY-HEADER").should == ["test"]
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#initialize_http_header when passed Hash" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.allocate
7
+ end
8
+
9
+ it "initializes the HTTP Header using the passed Hash" do
10
+ @headers.initialize_http_header("My-Header" => "test", "My-Other-Header" => "another test")
11
+ @headers["My-Header"].should == "test"
12
+ @headers["My-Other-Header"].should == "another test"
13
+ end
14
+
15
+ # TODO: Doesn't work, but works in IRB. No idea what's up here.
16
+ #
17
+ # it "complains about duplicate keys when in verbose mode" do
18
+ # old_verbose, $VERBOSE = $VERBOSE, true
19
+ #
20
+ # begin
21
+ # lambda do
22
+ # @headers.initialize_http_header("My-Header" => "test", "my-header" => "another test")
23
+ # end.should complain("net/http: warning: duplicated HTTP header: My-Header\n")
24
+ # ensure
25
+ # $VERBOSE = old_verbose
26
+ # end
27
+ # end
28
+ end
@@ -0,0 +1,20 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#key? when passed key" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ it "returns true if the header entry with the passed key exists" do
10
+ @headers.key?("My-Header").should be_false
11
+ @headers["My-Header"] = "test"
12
+ @headers.key?("My-Header").should be_true
13
+ end
14
+
15
+ it "is case-insensitive" do
16
+ @headers["My-Header"] = "test"
17
+ @headers.key?("my-header").should be_true
18
+ @headers.key?("MY-HEADER").should be_true
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/size', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#length" do
6
+ it_behaves_like :net_httpheader_size, :length
7
+ end
@@ -0,0 +1,23 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#main_type" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ it "returns the 'main-content-type', as per 'Content-Type' header entry" do
10
+ @headers["Content-Type"] = "text/html"
11
+ @headers.main_type.should == "text"
12
+
13
+ @headers["Content-Type"] = "application/pdf"
14
+ @headers.main_type.should == "application"
15
+
16
+ @headers["Content-Type"] = "text/html;charset=utf-8"
17
+ @headers.main_type.should == "text"
18
+ end
19
+
20
+ it "returns nil if the 'Content-Type' header entry does not exist" do
21
+ @headers.main_type.should be_nil
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#proxy_basic_auth when passed account, password" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ it "sets the 'Proxy-Authorization' Header entry for basic authorization" do
10
+ @headers.proxy_basic_auth("rubyspec", "rocks")
11
+ @headers["Proxy-Authorization"].should == "Basic cnVieXNwZWM6cm9ja3M="
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Net::HTTPHeader#range_length" do
5
+ before(:each) do
6
+ @headers = NetHTTPHeaderSpecs::Example.new
7
+ end
8
+
9
+ it "returns the length of the Range represented by the 'Content-Range' header entry" do
10
+ @headers["Content-Range"] = "bytes 0-499/1234"
11
+ @headers.range_length.should eql(500)
12
+
13
+ @headers["Content-Range"] = "bytes 500-1233/1234"
14
+ @headers.range_length.should eql(734)
15
+ end
16
+
17
+ it "returns nil when there is no 'Content-Range' header entry" do
18
+ @headers.range_length.should be_nil
19
+ end
20
+
21
+ it "raises a Net::HTTPHeaderSyntaxError when the 'Content-Range' has an invalid format" do
22
+ @headers["Content-Range"] = "invalid"
23
+ lambda { @headers.range_length }.should raise_error(Net::HTTPHeaderSyntaxError)
24
+
25
+ @headers["Content-Range"] = "bytes 123-abc"
26
+ lambda { @headers.range_length }.should raise_error(Net::HTTPHeaderSyntaxError)
27
+
28
+ @headers["Content-Range"] = "bytes abc-123"
29
+ lambda { @headers.range_length }.should raise_error(Net::HTTPHeaderSyntaxError)
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/set_range', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#range" do
6
+ before(:each) do
7
+ @headers = NetHTTPHeaderSpecs::Example.new
8
+ end
9
+
10
+ it "returns a Range object that represents the 'Range' header entry" do
11
+ @headers["Range"] = "bytes=0-499"
12
+ @headers.range.should == [0..499]
13
+
14
+ @headers["Range"] = "bytes=500-1233"
15
+ @headers.range.should == [500..1233]
16
+
17
+ @headers["Range"] = "bytes=10-"
18
+ @headers.range.should == [10..-1]
19
+
20
+ @headers["Range"] = "bytes=-10"
21
+ @headers.range.should == [-10..-1]
22
+ end
23
+
24
+ it "returns nil when there is no 'Range' header entry" do
25
+ @headers.range.should be_nil
26
+ end
27
+
28
+ it "raises a Net::HTTPHeaderSyntaxError when the 'Range' has an invalid format" do
29
+ @headers["Range"] = "invalid"
30
+ lambda { @headers.range }.should raise_error(Net::HTTPHeaderSyntaxError)
31
+
32
+ @headers["Range"] = "bytes 123-abc"
33
+ lambda { @headers.range }.should raise_error(Net::HTTPHeaderSyntaxError)
34
+
35
+ @headers["Range"] = "bytes abc-123"
36
+ lambda { @headers.range }.should raise_error(Net::HTTPHeaderSyntaxError)
37
+ end
38
+
39
+ it "raises a Net::HTTPHeaderSyntaxError when the 'Range' was not specified" do
40
+ @headers["Range"] = "bytes=-"
41
+ lambda { @headers.range }.should raise_error(Net::HTTPHeaderSyntaxError)
42
+ end
43
+ end
44
+
45
+ describe "Net::HTTPHeader#range=" do
46
+ it_behaves_like :net_httpheader_set_range, :range=
47
+ end
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/set_content_type', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#set_content_type" do
6
+ it_behaves_like :net_httpheader_set_content_type, :set_content_type
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/set_form_data', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#set_form_data" do
6
+ it_behaves_like :net_httpheader_set_form_data, :set_form_data
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'net/http'
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/set_range', __FILE__)
4
+
5
+ describe "Net::HTTPHeader#set_range" do
6
+ it_behaves_like :net_httpheader_set_range, :set_range
7
+ end
@@ -0,0 +1,42 @@
1
+ describe :net_httpheader_each_capitalized, :shared => true do
2
+ before(:each) do
3
+ @headers = NetHTTPHeaderSpecs::Example.new
4
+ @headers["my-header"] = "test"
5
+ @headers.add_field("my-Other-Header", "a")
6
+ @headers.add_field("My-Other-header", "b")
7
+ end
8
+
9
+ describe "when passed a block" do
10
+ it "yields each header entry to the passed block (capitalized keys, values joined)" do
11
+ res = []
12
+ @headers.send(@method) do |key, value|
13
+ res << [key, value]
14
+ end
15
+ res.sort.should == [["My-Header", "test"], ["My-Other-Header", "a, b"]]
16
+ end
17
+ end
18
+
19
+ describe "when passed no block" do
20
+ ruby_version_is "" ... "1.8.7" do
21
+ it "raises a LocalJumpError" do
22
+ lambda { @headers.send(@method) }.should raise_error(LocalJumpError)
23
+ end
24
+ end
25
+
26
+ # TODO: This should return an Enumerator and not raise an Error
27
+ ruby_version_is "1.8.7" do
28
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/447", "1.8.7" do
29
+ it "returns an Enumerator" do
30
+ enumerator = @headers.send(@method)
31
+ enumerator.should be_an_instance_of(enumerator_class)
32
+
33
+ res = []
34
+ enumerator.each do |*key|
35
+ res << key
36
+ end
37
+ res.sort.should == [["My-Header", "test"], ["My-Other-Header", "a, b"]]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ describe :net_httpheader_each_header, :shared => true do
2
+ before(:each) do
3
+ @headers = NetHTTPHeaderSpecs::Example.new
4
+ @headers["My-Header"] = "test"
5
+ @headers.add_field("My-Other-Header", "a")
6
+ @headers.add_field("My-Other-Header", "b")
7
+ end
8
+
9
+ describe "when passed a block" do
10
+ it "yields each header entry to the passed block (keys in lower case, values joined)" do
11
+ res = []
12
+ @headers.send(@method) do |key, value|
13
+ res << [key, value]
14
+ end
15
+ res.sort.should == [["my-header", "test"], ["my-other-header", "a, b"]]
16
+ end
17
+ end
18
+
19
+ describe "when passed no block" do
20
+ ruby_version_is "" ... "1.8.7" do
21
+ it "raises a LocalJumpError" do
22
+ lambda { @headers.send(@method) }.should raise_error(LocalJumpError)
23
+ end
24
+ end
25
+
26
+ # TODO: This should return an Enumerator and not raise an Error
27
+ ruby_version_is "1.8.7" do
28
+ ruby_bug "http://redmine.ruby-lang.org/issues/show/447", "1.8.7" do
29
+ it "returns an Enumerator" do
30
+ enumerator = @headers.send(@method)
31
+ enumerator.should be_an_instance_of(enumerator_class)
32
+
33
+ res = []
34
+ enumerator.each do |*key|
35
+ res << key
36
+ end
37
+ res.sort.should == [["my-header", "test"], ["my-other-header", "a, b"]]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ describe :net_httpheader_each_name, :shared => true do
2
+ before(:each) do
3
+ @headers = NetHTTPHeaderSpecs::Example.new
4
+ @headers["My-Header"] = "test"
5
+ @headers.add_field("My-Other-Header", "a")
6
+ @headers.add_field("My-Other-Header", "b")
7
+ end
8
+
9
+ describe "when passed a block" do
10
+ it "yields each header key to the passed block (keys in lower case)" do
11
+ res = []
12
+ @headers.send(@method) do |key|
13
+ res << key
14
+ end
15
+ res.sort.should == ["my-header", "my-other-header"]
16
+ end
17
+ end
18
+
19
+ describe "when passed no block" do
20
+ ruby_version_is "" ... "1.8.7" do
21
+ it "raises a LocalJumpError" do
22
+ lambda { @headers.send(@method) }.should raise_error(LocalJumpError)
23
+ end
24
+ end
25
+
26
+ ruby_version_is "1.8.7" do
27
+ it "returns an Enumerator" do
28
+ enumerator = @headers.send(@method)
29
+ enumerator.should be_an_instance_of(enumerator_class)
30
+
31
+ res = []
32
+ enumerator.each do |key|
33
+ res << key
34
+ end
35
+ res.sort.should == ["my-header", "my-other-header"]
36
+ end
37
+ end
38
+ end
39
+ end