screw-unit-server 0.3.0 → 0.5.3

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.
Files changed (124) hide show
  1. data/CHANGES +23 -1
  2. data/README.markdown +10 -3
  3. data/Rakefile +27 -55
  4. data/VERSION.yml +4 -0
  5. data/bin/screw_unit_server +14 -4
  6. data/core/CHANGES +10 -0
  7. data/core/EXAMPLE.html +4 -4
  8. data/core/README.markdown +7 -7
  9. data/core/example/models/man.js +2 -2
  10. data/core/example/spec/suite.html +1 -1
  11. data/core/lib/jquery-1.3.2.js +4376 -0
  12. data/core/lib/jquery.fn.js +2 -1
  13. data/core/lib/jquery.print.js +13 -12
  14. data/core/lib/screw.behaviors.js +11 -9
  15. data/core/lib/screw.builder.js +26 -11
  16. data/core/lib/screw.css +2 -2
  17. data/core/lib/screw.events.js +11 -4
  18. data/core/lib/screw.matchers.js +192 -13
  19. data/core/spec/behaviors_spec.js +11 -1
  20. data/core/spec/matchers_spec.js +288 -9
  21. data/core/spec/print_spec.js +47 -8
  22. data/core/spec/suite.html +2 -1
  23. data/core/spec/with_screw_context_spec.js +9 -0
  24. data/lib/screw_unit.rb +13 -16
  25. data/lib/screw_unit/representations.rb +2 -0
  26. data/lib/screw_unit/representations/spec.html.rb +117 -0
  27. data/spec/functional/functional_spec.rb +14 -3
  28. data/spec/functional/functional_spec_helper.rb +22 -34
  29. data/spec/functional/functional_spec_server_starter.rb +68 -0
  30. data/spec/unit/js_test_core/specs/spec_file_spec.rb +45 -20
  31. data/spec/unit/unit_spec_helper.rb +24 -93
  32. data/vendor/js-test-core/CHANGES +19 -0
  33. data/vendor/js-test-core/Rakefile +2 -1
  34. data/vendor/js-test-core/lib/js_test_core.rb +26 -10
  35. data/vendor/js-test-core/lib/js_test_core/app.rb +12 -0
  36. data/vendor/js-test-core/lib/js_test_core/client.rb +97 -18
  37. data/vendor/js-test-core/lib/js_test_core/configuration.rb +35 -0
  38. data/vendor/js-test-core/lib/js_test_core/extensions.rb +3 -0
  39. data/vendor/js-test-core/lib/js_test_core/extensions/selenium/client/driver.rb +7 -0
  40. data/vendor/js-test-core/lib/js_test_core/extensions/time.rb +6 -0
  41. data/vendor/js-test-core/lib/js_test_core/models.rb +8 -0
  42. data/vendor/js-test-core/lib/js_test_core/models/selenium_session.rb +80 -0
  43. data/vendor/js-test-core/lib/js_test_core/representations.rb +11 -0
  44. data/vendor/js-test-core/lib/js_test_core/representations/dir.html.rb +24 -0
  45. data/vendor/js-test-core/lib/js_test_core/representations/not_found.html.rb +15 -0
  46. data/vendor/js-test-core/lib/js_test_core/representations/page.html.rb +41 -0
  47. data/vendor/js-test-core/lib/js_test_core/representations/spec.html.rb +24 -0
  48. data/vendor/js-test-core/lib/js_test_core/resources.rb +13 -8
  49. data/vendor/js-test-core/lib/js_test_core/resources/core_file.rb +19 -0
  50. data/vendor/js-test-core/lib/js_test_core/resources/file.rb +44 -14
  51. data/vendor/js-test-core/lib/js_test_core/resources/implementations_deprecation.rb +12 -0
  52. data/vendor/js-test-core/lib/js_test_core/resources/not_found.rb +35 -0
  53. data/vendor/js-test-core/lib/js_test_core/resources/resource.rb +16 -0
  54. data/vendor/js-test-core/lib/js_test_core/resources/selenium_session.rb +104 -0
  55. data/vendor/js-test-core/lib/js_test_core/resources/spec_file.rb +63 -0
  56. data/vendor/js-test-core/lib/js_test_core/resources/web_root.rb +5 -56
  57. data/vendor/js-test-core/lib/js_test_core/selenium_server_configuration.rb +48 -0
  58. data/vendor/js-test-core/spec/example_core/subdir/SubDirFile.js +0 -0
  59. data/vendor/js-test-core/spec/example_public/javascripts/large_file.js +59 -0
  60. data/vendor/js-test-core/spec/example_public/javascripts/subdir/bar.js +1 -0
  61. data/vendor/js-test-core/spec/example_specs/custom_dir_and_suite/passing_spec.js +6 -0
  62. data/vendor/js-test-core/spec/example_specs/custom_suite.html +8 -0
  63. data/vendor/js-test-core/spec/example_specs/foo/failing_spec.js +1 -1
  64. data/vendor/js-test-core/spec/example_specs/foo/passing_spec.js +1 -1
  65. data/vendor/js-test-core/spec/spec_helpers/be_http.rb +32 -0
  66. data/vendor/js-test-core/spec/spec_helpers/example_group.rb +36 -0
  67. data/vendor/js-test-core/spec/spec_helpers/fake_selenium_driver.rb +27 -0
  68. data/vendor/js-test-core/spec/spec_helpers/show_test_exceptions.rb +22 -0
  69. data/vendor/js-test-core/spec/unit/js_test_core/client_spec.rb +140 -85
  70. data/vendor/js-test-core/spec/unit/js_test_core/configuration_spec.rb +44 -0
  71. data/vendor/js-test-core/spec/unit/js_test_core/models/selenium_session_spec.rb +85 -0
  72. data/vendor/js-test-core/spec/unit/js_test_core/resources/core_file_spec.rb +60 -0
  73. data/vendor/js-test-core/spec/unit/js_test_core/resources/file_spec.rb +61 -68
  74. data/vendor/js-test-core/spec/unit/js_test_core/resources/implementations_deprecation_spec.rb +18 -0
  75. data/vendor/js-test-core/spec/unit/js_test_core/resources/not_found_spec.rb +51 -0
  76. data/vendor/js-test-core/spec/unit/js_test_core/resources/selenium_session_spec.rb +362 -0
  77. data/vendor/js-test-core/spec/unit/js_test_core/resources/spec_file_spec.rb +120 -0
  78. data/vendor/js-test-core/spec/unit/js_test_core/resources/web_root_spec.rb +14 -89
  79. data/vendor/js-test-core/spec/unit/js_test_core/selenium_server_configuration_spec.rb +49 -0
  80. data/vendor/js-test-core/spec/unit/unit_spec_helper.rb +16 -113
  81. data/vendor/js-test-core/vendor/lucky-luciano/README.markdown +7 -0
  82. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano.rb +4 -0
  83. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/resource.rb +135 -0
  84. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/rspec.rb +4 -0
  85. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/rspec/be_http.rb +32 -0
  86. data/vendor/js-test-core/vendor/lucky-luciano/spec/lucky_luciano/resource_spec.rb +231 -0
  87. data/vendor/js-test-core/vendor/lucky-luciano/spec/spec_helper.rb +48 -0
  88. data/vendor/js-test-core/vendor/lucky-luciano/spec/spec_suite.rb +4 -0
  89. metadata +143 -129
  90. data/core/TODO +0 -2
  91. data/core/lib/jquery-1.2.3.js +0 -3408
  92. data/core/lib/screw.assets.js +0 -36
  93. data/core/lib/screw.server.js +0 -21
  94. data/lib/screw_unit/resources.rb +0 -2
  95. data/lib/screw_unit/resources/spec.rb +0 -37
  96. data/spec/unit/js_test_core/specs/spec_dir_spec.rb +0 -43
  97. data/vendor/js-test-core/lib/js_test_core/rack.rb +0 -2
  98. data/vendor/js-test-core/lib/js_test_core/rack/commonlogger.rb +0 -5
  99. data/vendor/js-test-core/lib/js_test_core/rails_server.rb +0 -22
  100. data/vendor/js-test-core/lib/js_test_core/resources/dir.rb +0 -52
  101. data/vendor/js-test-core/lib/js_test_core/resources/file_not_found.rb +0 -15
  102. data/vendor/js-test-core/lib/js_test_core/resources/runners.rb +0 -15
  103. data/vendor/js-test-core/lib/js_test_core/resources/runners/firefox_runner.rb +0 -75
  104. data/vendor/js-test-core/lib/js_test_core/resources/specs/spec_dir.rb +0 -50
  105. data/vendor/js-test-core/lib/js_test_core/resources/specs/spec_file.rb +0 -17
  106. data/vendor/js-test-core/lib/js_test_core/resources/suite.rb +0 -24
  107. data/vendor/js-test-core/lib/js_test_core/resources/suite_finish.rb +0 -19
  108. data/vendor/js-test-core/lib/js_test_core/selenium.rb +0 -2
  109. data/vendor/js-test-core/lib/js_test_core/selenium/selenium_driver.rb +0 -5
  110. data/vendor/js-test-core/lib/js_test_core/server.rb +0 -111
  111. data/vendor/js-test-core/lib/js_test_core/thin.rb +0 -3
  112. data/vendor/js-test-core/lib/js_test_core/thin/backends/js_test_core_server.rb +0 -9
  113. data/vendor/js-test-core/lib/js_test_core/thin/js_test_core_connection.rb +0 -42
  114. data/vendor/js-test-core/spec/unit/js_test_core/rails_server_spec.rb +0 -45
  115. data/vendor/js-test-core/spec/unit/js_test_core/resources/dir_spec.rb +0 -42
  116. data/vendor/js-test-core/spec/unit/js_test_core/resources/file_not_found_spec.rb +0 -26
  117. data/vendor/js-test-core/spec/unit/js_test_core/resources/runner_spec.rb +0 -24
  118. data/vendor/js-test-core/spec/unit/js_test_core/resources/runners/firefox_runner_spec.rb +0 -197
  119. data/vendor/js-test-core/spec/unit/js_test_core/resources/specs/spec_dir_spec.rb +0 -79
  120. data/vendor/js-test-core/spec/unit/js_test_core/resources/specs/spec_file_spec.rb +0 -42
  121. data/vendor/js-test-core/spec/unit/js_test_core/resources/suite_finish_spec.rb +0 -94
  122. data/vendor/js-test-core/spec/unit/js_test_core/resources/suite_spec.rb +0 -44
  123. data/vendor/js-test-core/spec/unit/js_test_core/server_spec.rb +0 -131
  124. data/vendor/js-test-core/spec/unit/thin/js_test_core_connection_spec.rb +0 -92
@@ -1,79 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../../unit_spec_helper")
2
-
3
- module JsTestCore
4
- module Resources
5
- module Specs
6
- describe SpecDir do
7
- attr_reader :dir, :absolute_path, :relative_path
8
- before do
9
- @absolute_path = spec_root_path
10
- @relative_path = "/specs"
11
- @dir = Resources::Specs::SpecDir.new(absolute_path, relative_path)
12
- end
13
-
14
- it "has an absolute path" do
15
- dir.absolute_path.should == absolute_path
16
- end
17
-
18
- it "has a relative path" do
19
- dir.relative_path.should == relative_path
20
- end
21
-
22
- describe "#locate when passed the name with an extension" do
23
- it "when file exists, returns a Resources::File representing it" do
24
- file = dir.locate("failing_spec.js")
25
- file.relative_path.should == "/specs/failing_spec.js"
26
- file.absolute_path.should == "#{spec_root_path}/failing_spec.js"
27
- end
28
-
29
- it "when file does not exist, raises error" do
30
- lambda { dir.locate("nonexistent.js") }.should raise_error
31
- end
32
- end
33
-
34
- describe "#locate when passed a name without an extension" do
35
- it "when name corresponds to a subdirectory, returns a DirectoryRunner for the directory" do
36
- subdir = dir.locate("foo")
37
- subdir.should == spec_dir("/foo")
38
- end
39
-
40
- it "when name does not correspond to a .js file or directory, raises an error" do
41
- lambda do
42
- dir.locate("nonexistent")
43
- end.should raise_error
44
- end
45
- end
46
-
47
- describe "#get" do
48
- attr_reader :request, :response
49
- before do
50
- @request = Rack::Request.new( Rack::MockRequest.env_for('/core') )
51
- @response = Rack::Response.new
52
- end
53
-
54
- it "raises NotImplementedError" do
55
- lambda do
56
- dir.get(request, response)
57
- end.should raise_error(NotImplementedError)
58
- end
59
-
60
- it "can be overridden from a Module without needing to redefine the #get method" do
61
- spec_dir_class = Resources::Specs::SpecDir.clone
62
- mod = Module.new do
63
- def get(request, response)
64
- end
65
- end
66
- spec_dir_class.class_eval do
67
- include mod
68
- end
69
- @dir = spec_dir_class.new(absolute_path, relative_path)
70
-
71
- lambda do
72
- dir.get(request, response)
73
- end.should_not raise_error
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,42 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../../unit_spec_helper")
2
-
3
- module JsTestCore
4
- module Resources
5
- module Specs
6
- describe SpecFile do
7
- attr_reader :file, :absolute_path, :relative_path, :request, :response
8
- before do
9
- @absolute_path = "#{spec_root_path}/failing_spec.js"
10
- @relative_path = "/specs/failing_spec.js"
11
- @file = Resources::Specs::SpecFile.new(absolute_path, relative_path)
12
- @request = Rack::Request.new( Rack::MockRequest.env_for(relative_path) )
13
- @response = Rack::Response.new
14
- end
15
-
16
- describe "#get" do
17
- it "raises NotImplementedError" do
18
- lambda do
19
- file.get(request, response)
20
- end.should raise_error(NotImplementedError)
21
- end
22
-
23
- it "can be overridden from a Module without needing to redefine the #get method" do
24
- spec_file_class = Resources::Specs::SpecFile.clone
25
- mod = Module.new do
26
- def get(request, response)
27
- end
28
- end
29
- spec_file_class.class_eval do
30
- include mod
31
- end
32
- @file = spec_file_class.new(absolute_path, relative_path)
33
-
34
- lambda do
35
- file.get(request, response)
36
- end.should_not raise_error
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,94 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsTestCore
4
- module Resources
5
- describe SuiteFinish do
6
- attr_reader :stdout, :suite_finish, :suite
7
- before do
8
- @stdout = StringIO.new
9
- SuiteFinish.const_set(:STDOUT, stdout)
10
- end
11
-
12
- after do
13
- SuiteFinish.__send__(:remove_const, :STDOUT)
14
- end
15
-
16
- describe ".post" do
17
- describe "when Suite#id == 'user'" do
18
- before do
19
- @suite = Suite.new('user')
20
- @suite_finish = SuiteFinish.new(suite)
21
- end
22
-
23
- it "writes the body of the request to stdout" do
24
- body = "The text in the POST body"
25
- request = Rack::Request.new({'rack.input' => StringIO.new("text=#{body}")})
26
- request.body.string.should == "text=#{body}"
27
- response = Rack::Response.new
28
-
29
- suite_finish.post(request, response)
30
- stdout.string.should == "#{body}\n"
31
- end
32
-
33
- it "sets the Content-Length to be 0" do
34
- request = Rack::Request.new('rack.input' => StringIO.new(""))
35
- response = Rack::Response.new
36
-
37
- response.headers["Content-Length"].should be_nil
38
- suite_finish.post(request, response)
39
- response.headers["Content-Length"].should == "0"
40
- end
41
- end
42
-
43
- describe "when Suite#id is not 'user'" do
44
- attr_reader :request, :response, :runner, :suite_id, :driver
45
- before do
46
- runner_request = Rack::Request.new( Rack::MockRequest.env_for('/runners/firefox') )
47
- runner_response = Rack::Response.new
48
- @suite_id = '12345'
49
- @driver = "Selenium Driver"
50
- stub(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
51
- driver
52
- end
53
- stub(driver).start
54
- stub(driver).open
55
- stub(driver).session_id {suite_id}
56
- stub(Thread).start.yields
57
- Thread.current[:connection] = connection
58
-
59
- @runner = Runners::FirefoxRunner.new
60
- runner.post(runner_request, runner_response)
61
-
62
- @suite = Suite.new(suite_id)
63
- @suite_finish = SuiteFinish.new(suite)
64
- end
65
-
66
- it "resumes the FirefoxRunner" do
67
- body = "The text in the POST body"
68
- request = Rack::Request.new({'rack.input' => StringIO.new("text=#{body}")})
69
- response = Rack::Response.new
70
- mock.proxy(Runners::FirefoxRunner).resume(suite_id, body)
71
- mock(driver).stop
72
- stub(connection).send_data.once
73
- stub(connection).close_connection.once
74
-
75
- suite_finish.post(request, response)
76
- end
77
-
78
- it "sets the Content-Length to be 0" do
79
- request = Rack::Request.new('rack.input' => StringIO.new(""))
80
- response = Rack::Response.new
81
- stub(Runners::FirefoxRunner).resume
82
- stub(driver).stop
83
- stub(connection).send_data
84
- stub(connection).close_connection
85
-
86
- response.headers["Content-Length"].should be_nil
87
- suite_finish.post(request, response)
88
- response.headers["Content-Length"].should == "0"
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,44 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsTestCore
4
- module Resources
5
- describe Suite do
6
- attr_reader :stdout
7
- before do
8
- @stdout = StringIO.new
9
- Suite.const_set(:STDOUT, stdout)
10
- end
11
-
12
- after do
13
- Suite.__send__(:remove_const, :STDOUT)
14
- end
15
-
16
- describe ".locate" do
17
- it "when passed an identifier, returns an instance of Suite with the identifier" do
18
- instance = Suite.locate('foobar')
19
- instance.class.should == Suite
20
- instance.id.should == 'foobar'
21
- end
22
- end
23
-
24
- describe "#locate" do
25
- attr_reader :suite
26
- before do
27
- @suite = Suite.new('foobar')
28
- end
29
-
30
- it "when passed 'finish', returns a SuiteFinish that has access to the suite" do
31
- suite_finish = suite.locate('finish')
32
- suite_finish.class.should == SuiteFinish
33
- suite_finish.suite.should == suite
34
- end
35
-
36
- it "when not passed 'finish', raises ArgumentError" do
37
- lambda do
38
- suite.locate('invalid')
39
- end.should raise_error(ArgumentError, "Invalid path: invalid")
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,131 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module JsTestCore
4
- describe Server do
5
- attr_reader :result
6
-
7
- before do
8
- @result = ""
9
- stub(EventMachine).send_data do |signature, data, data_length|
10
- @result << data
11
- end
12
- stub(EventMachine).close_connection
13
- end
14
-
15
- describe "HTTP GET" do
16
- specify "'/core/JsTestCore.js', returns the contents of the file" do
17
- response = get("/core/JsTestCore.js")
18
- response.body.should == ::File.read("#{Server.core_path}/JsTestCore.js")
19
- end
20
-
21
- specify "'/stylesheets/example.css', returns the contents of the file" do
22
- response = get("/stylesheets/example.css")
23
- response.body.should == ::File.read("#{Server.public_path}/stylesheets/example.css")
24
- end
25
-
26
- specify "'/invalid/path', shows the full invalid path in the error message" do
27
- lambda do
28
- get("/invalid/path")
29
- end.should raise_error(Exception, Regexp.new("/invalid/path"))
30
- end
31
- end
32
-
33
- describe ".run" do
34
- attr_reader :server_instance
35
- before do
36
- @server_instance = Server.instance
37
- Server.instance = nil
38
- end
39
-
40
- it "instantiates an instance of Server and starts a Rack Thin handler" do
41
- host = DEFAULT_HOST
42
- port = DEFAULT_PORT
43
-
44
- mock(EventMachine).run.yields
45
- mock(EventMachine).start_server(host, port, ::Thin::JsTestCoreConnection)
46
-
47
- Server.run(spec_root_path, implementation_root_path, public_path)
48
- end
49
-
50
- it "when passed a custom host and port, sets the host and port to the passed in value" do
51
- host = 'foobar.com'
52
- port = 80
53
-
54
- mock(EventMachine).run.yields
55
- mock(EventMachine).start_server(host, port, ::Thin::JsTestCoreConnection)
56
-
57
- Server.run(spec_root_path, implementation_root_path, public_path, {:Host => host, :Port => port})
58
- end
59
- end
60
-
61
- describe ".spec_root" do
62
- it "returns the Dir " do
63
- Server.spec_root_path.should == spec_root_path
64
- end
65
- end
66
-
67
- describe ".spec_root_path" do
68
- it "returns the absolute path of the specs root directory" do
69
- Server.spec_root_path.should == spec_root_path
70
- end
71
- end
72
-
73
- describe ".public_path" do
74
- it "returns the expanded path of the public path" do
75
- Server.public_path.should == public_path
76
- end
77
- end
78
-
79
- describe ".core_path" do
80
- it "returns the expanded path to the JsTestCore core directory" do
81
- Server.core_path.should == core_path
82
- end
83
- end
84
-
85
- describe ".implementation_root_path" do
86
- it "returns the expanded path to the JsTestCore implementations directory" do
87
- dir = ::File.dirname(__FILE__)
88
- Server.implementation_root_path.should == implementation_root_path
89
- end
90
- end
91
-
92
- describe "#call" do
93
- describe "when there is an error" do
94
- attr_reader :top_line_of_backtrace
95
- before do
96
- @top_line_of_backtrace = __LINE__ + 2
97
- stub.instance_of(Resources::WebRoot).locate('somedir') do
98
- raise "Foobar"
99
- end
100
- end
101
-
102
- it "shows the full request path in the error message" do
103
- lambda do
104
- get('/somedir')
105
- end.should raise_error(Exception, Regexp.new("/somedir"))
106
- end
107
-
108
- it "uses the backtrace from where the original error was raised" do
109
- no_error = true
110
- begin
111
- get('/somedir')
112
- rescue Exception => e
113
- no_error = false
114
- top_of_backtrace = e.backtrace.first.split(":")
115
- backtrace_file = ::File.expand_path(top_of_backtrace[0])
116
- backtrace_line = Integer(top_of_backtrace[1])
117
- backtrace_file.should == __FILE__
118
- backtrace_line.should == top_line_of_backtrace
119
- end
120
- raise "There should have been an error" if no_error
121
- end
122
- end
123
- end
124
-
125
- describe "#root_url" do
126
- it "returns the url of the site's root" do
127
- server.root_url.should == "http://#{server.host}:#{server.port}"
128
- end
129
- end
130
- end
131
- end
@@ -1,92 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module Thin
4
- describe JsTestCoreConnection do
5
- describe "#process" do
6
- attr_reader :connection, :result
7
- before do
8
- @connection = JsTestCoreConnection.new('signature')
9
- stub(connection).socket_address {'0.0.0.0'}
10
-
11
- @result = ""
12
- stub(EventMachine).send_data do |signature, data, data_length|
13
- result << data
14
- end
15
- end
16
-
17
- describe "and the call is successful" do
18
- describe "and the body is not empty" do
19
- before do
20
- mock(app = Object.new).call(is_a(Hash)) do
21
- [200, {}, 'The Body']
22
- end
23
- connection.app = app
24
- end
25
-
26
- it "sends the response to the socket and closes the connection" do
27
- mock(connection).close_connection_after_writing
28
- connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
29
- result.should include("The Body")
30
- end
31
- end
32
-
33
- describe "and the body is empty" do
34
- describe "and the Content-Length header is 0" do
35
- before do
36
- mock(app = Object.new).call(is_a(Hash)) do
37
- [200, {"Content-Length" => '0'}, []]
38
- end
39
- connection.app = app
40
- end
41
-
42
- it "sends the response to the socket and closes the connection" do
43
- mock(connection).close_connection_after_writing
44
- connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
45
- end
46
- end
47
-
48
- describe "and the Content-Length header is > 0" do
49
- before do
50
- mock(app = Object.new).call(is_a(Hash)) do
51
- [200, {"Content-Length" => '55'}, []]
52
- end
53
- connection.app = app
54
- end
55
-
56
- it "keeps the connection open" do
57
- dont_allow(connection).close_connection_after_writing
58
- connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
59
- end
60
- end
61
-
62
- describe "and the Content-Length header is not passed in" do
63
- before do
64
- mock(app = Object.new).call(is_a(Hash)) do
65
- [200, {}, []]
66
- end
67
- connection.app = app
68
- end
69
-
70
- it "keeps the connection open" do
71
- dont_allow(connection).close_connection_after_writing
72
- connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
73
- end
74
- end
75
- end
76
- end
77
-
78
- describe "and the call raises an error" do
79
- it "logs the error and closes the connection" do
80
- mock(app = Object.new).call(is_a(Hash)) do
81
- raise "An Error"
82
- end
83
- connection.app = app
84
- mock(connection).log(anything).at_least(1)
85
- mock(connection).close_connection
86
-
87
- connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
88
- end
89
- end
90
- end
91
- end
92
- end