js_spec 0.1.0 → 0.2.0

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 (48) hide show
  1. data/CHANGES +6 -0
  2. data/README +23 -1
  3. data/Rakefile +5 -3
  4. data/bin/js_spec +1 -5
  5. data/bin/js_spec_server +0 -0
  6. data/core/JSSpecExtensions.js +70 -25
  7. data/core/jquery.js +2992 -0
  8. data/init.rb +0 -0
  9. data/lib/js_spec/client.rb +50 -0
  10. data/lib/js_spec/rack/response.rb +5 -0
  11. data/lib/js_spec/rails_server.rb +3 -3
  12. data/lib/js_spec/resources/dir.rb +43 -43
  13. data/lib/js_spec/resources/file.rb +16 -16
  14. data/lib/js_spec/resources/runners/firefox1_runner.rb +8 -0
  15. data/lib/js_spec/resources/runners/firefox_runner.rb +49 -72
  16. data/lib/js_spec/resources/runners.rb +6 -7
  17. data/lib/js_spec/resources/spec_dir_runner.rb +7 -7
  18. data/lib/js_spec/resources/spec_file_runner.rb +7 -7
  19. data/lib/js_spec/resources/spec_runner.rb +16 -11
  20. data/lib/js_spec/resources/suite.rb +14 -14
  21. data/lib/js_spec/resources/suite_finish.rb +12 -12
  22. data/lib/js_spec/server.rb +29 -17
  23. data/lib/js_spec/thin/backends/js_spec_server.rb +9 -0
  24. data/lib/js_spec/thin/js_spec_connection.rb +43 -0
  25. data/lib/js_spec.rb +14 -2
  26. data/spec/integration/integration_spec.rb +14 -0
  27. data/spec/integration/integration_spec_helper.rb +52 -0
  28. data/spec/integration_suite.rb +10 -0
  29. data/spec/spec_suite.rb +1 -0
  30. data/spec/unit/js_spec/client_spec.rb +137 -0
  31. data/spec/unit/{rails_server_spec.rb → js_spec/rails_server_spec.rb} +8 -7
  32. data/spec/unit/{resources → js_spec/resources}/dir_spec.rb +1 -1
  33. data/spec/unit/{resources → js_spec/resources}/file_spec.rb +9 -6
  34. data/spec/unit/js_spec/resources/runner_spec.rb +24 -0
  35. data/spec/unit/js_spec/resources/runners/firefox_runner_spec.rb +152 -0
  36. data/spec/unit/js_spec/resources/spec_dir_runner_spec.rb +48 -0
  37. data/spec/unit/{resources → js_spec/resources}/spec_file_runner_spec.rb +1 -1
  38. data/spec/unit/{resources → js_spec/resources}/suite_finish_spec.rb +5 -5
  39. data/spec/unit/{resources → js_spec/resources}/suite_spec.rb +1 -1
  40. data/spec/unit/{resources → js_spec/resources}/web_root_spec.rb +1 -1
  41. data/spec/unit/{server_spec.rb → js_spec/server_spec.rb} +29 -92
  42. data/spec/unit/rack/response_spec.rb +30 -0
  43. data/spec/unit/thin/js_spec_connection_spec.rb +50 -0
  44. data/spec/unit/unit_spec_helper.rb +40 -5
  45. metadata +107 -60
  46. data/spec/unit/resources/runner_spec.rb +0 -24
  47. data/spec/unit/resources/runners/firefox_runner_spec.rb +0 -87
  48. data/spec/unit/resources/spec_dir_runner_spec.rb +0 -43
@@ -1,7 +1,17 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/unit_spec_helper")
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
2
 
3
3
  module JsSpec
4
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
+
5
15
  describe "HTTP GET" do
6
16
  specify "'/specs' returns an HTML test runner including all specs files" do
7
17
  result = get("/specs").body
@@ -26,13 +36,13 @@ module JsSpec
26
36
  end
27
37
 
28
38
  specify "'/core/JSSpec.js', returns the contents of the file" do
29
- result = get("/core/JSSpec.js").body
30
- result.should == ::File.read("#{Server.core_path}/JSSpec.js")
39
+ response = get("/core/JSSpec.js")
40
+ response.body.should == ::File.read("#{Server.core_path}/JSSpec.js")
31
41
  end
32
42
 
33
43
  specify "'/stylesheets/example.css', returns the contents of the file" do
34
- result = get("/stylesheets/example.css").body
35
- result.should == ::File.read("#{Server.public_path}/stylesheets/example.css")
44
+ response = get("/stylesheets/example.css")
45
+ response.body.should == ::File.read("#{Server.public_path}/stylesheets/example.css")
36
46
  end
37
47
 
38
48
  specify "'/invalid/path', shows the full invalid path in the error message" do
@@ -49,14 +59,12 @@ module JsSpec
49
59
  Server.instance = nil
50
60
  end
51
61
 
52
- it "instantiates an instance of Server and starts a Rack Mongrel handler" do
53
- host = Server::DEFAULT_HOST
54
- port = Server::DEFAULT_PORT
62
+ it "instantiates an instance of Server and starts a Rack Thin handler" do
63
+ host = DEFAULT_HOST
64
+ port = DEFAULT_PORT
55
65
 
56
- mock.proxy(Server).new(spec_root_path, implementation_root_path, public_path, host, port) do
57
- server_instance
58
- end
59
- mock(Rack::Handler::Mongrel).run(server_instance, {:Host => host, :Port => port})
66
+ mock(EventMachine).run.yields
67
+ mock(EventMachine).start_server(host, port, ::Thin::JsSpecConnection)
60
68
 
61
69
  Server.run(spec_root_path, implementation_root_path, public_path)
62
70
  end
@@ -65,21 +73,13 @@ module JsSpec
65
73
  host = 'foobar.com'
66
74
  port = 80
67
75
 
68
- mock.proxy(Server).new(spec_root_path, implementation_root_path, public_path, host, port) do
69
- server_instance
70
- end
71
- mock(Rack::Handler::Mongrel).run(server_instance, {:Host => host, :Port => port})
76
+ mock(EventMachine).run.yields
77
+ mock(EventMachine).start_server(host, port, ::Thin::JsSpecConnection)
72
78
 
73
79
  Server.run(spec_root_path, implementation_root_path, public_path, {:Host => host, :Port => port})
74
80
  end
75
81
  end
76
82
 
77
- describe ".default_url" do
78
- it "returns the default host and port" do
79
- Server.default_url.should == "http://#{Server::DEFAULT_HOST}:#{Server::DEFAULT_PORT}"
80
- end
81
- end
82
-
83
83
  describe ".spec_root" do
84
84
  it "returns the Dir " do
85
85
  Server.spec_root_path.should == spec_root_path
@@ -101,7 +101,7 @@ module JsSpec
101
101
  describe ".core_path" do
102
102
  it "returns the expanded path to the JsSpec core directory" do
103
103
  dir = ::File.dirname(__FILE__)
104
- Server.core_path.should == ::File.expand_path("#{dir}/../../core")
104
+ Server.core_path.should == ::File.expand_path("#{dir}/../../../core")
105
105
  end
106
106
  end
107
107
 
@@ -112,76 +112,7 @@ module JsSpec
112
112
  end
113
113
  end
114
114
 
115
- describe ".request" do
116
- it "returns request in progress for the thread" do
117
- the_request = nil
118
- stub.instance_of(Resources::WebRoot).locate('somedir') do
119
- the_request = JsSpec::Server.request
120
- Thread.current[:request].should == the_request
121
- thread2 = Thread.new do
122
- Thread.current[:request].should be_nil
123
- end
124
- thread2.join
125
-
126
- mock_resource = Object.new
127
- stub(mock_resource).get.returns("")
128
- mock_resource
129
- end
130
-
131
- get('/somedir')
132
-
133
- the_request.path_info.should == '/somedir'
134
- end
135
-
136
- it "resets to nil when the request is finished" do
137
- get('/core')
138
-
139
- JsSpec::Server.request.should be_nil
140
- end
141
- end
142
-
143
- describe ".response" do
144
- it "returns response in progress" do
145
- the_response = nil
146
- stub.instance_of(Resources::WebRoot).locate('somedir') do
147
- the_response = JsSpec::Server.response
148
- Thread.current[:response].should == the_response
149
- thread2 = Thread.new do
150
- Thread.current[:response].should be_nil
151
- end
152
- thread2.join
153
-
154
- mock_resource = Object.new
155
- stub(mock_resource).get {"The text"}
156
- mock_resource
157
- end
158
-
159
- get('/somedir')
160
-
161
- the_response.body.should == 'The text'
162
- end
163
-
164
- it "resets to nil when the response is finished" do
165
- get('/core')
166
-
167
- JsSpec::Server.response.should be_nil
168
- end
169
- end
170
-
171
115
  describe "#call" do
172
- it "when resource responds with a string, sets the string as the response.body" do
173
- somedir_resource = Object.new
174
- stub.instance_of(Resources::WebRoot).locate('somedir') do
175
- somedir_resource
176
- end
177
-
178
- def somedir_resource.get
179
- "Somedir String"
180
- end
181
- response = get('/somedir')
182
- response.body.should == "Somedir String"
183
- end
184
-
185
116
  describe "when there is an error" do
186
117
  attr_reader :top_line_of_backtrace
187
118
  before do
@@ -213,5 +144,11 @@ module JsSpec
213
144
  end
214
145
  end
215
146
  end
147
+
148
+ describe "#root_url" do
149
+ it "returns the url of the site's root" do
150
+ server.root_url.should == "http://#{server.host}:#{server.port}"
151
+ end
152
+ end
216
153
  end
217
154
  end
@@ -0,0 +1,30 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
+
3
+ module Rack
4
+ describe Response do
5
+ describe "#ready?" do
6
+ attr_reader :response
7
+ describe "when there is a status" do
8
+ before do
9
+ @response = Response.new
10
+ @response.status.should_not be_nil
11
+ end
12
+
13
+ it "returns true" do
14
+ response.should be_ready
15
+ end
16
+ end
17
+
18
+ describe "when there is no status" do
19
+ before do
20
+ @response = Response.new
21
+ response.status = nil
22
+ end
23
+
24
+ it "returns true" do
25
+ response.should_not be_ready
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
+
3
+ module Thin
4
+ describe JsSpecConnection do
5
+ describe "#process" do
6
+ attr_reader :connection, :result
7
+ before do
8
+ @connection = JsSpecConnection.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 "when the response code is not 0" do
18
+ attr_reader :somedir_resource
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 "when the response code is 0" do
34
+ attr_reader :somedir_resource
35
+ before do
36
+ mock(app = Object.new).call(is_a(Hash)) do
37
+ [0, {}, 'The Body']
38
+ end
39
+ connection.app = app
40
+ end
41
+
42
+ it "does not send data to the socket and keeps it open" do
43
+ dont_allow(connection).close_connection_after_writing
44
+ connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
45
+ result.should_not include("The Body")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -22,8 +22,19 @@ module Spec
22
22
  end
23
23
  end
24
24
 
25
+ class Spec::Example::ExampleGroup
26
+ class << self
27
+ def thin_logging
28
+ @thin_logging = true if @thin_logging.nil?
29
+ @thin_logging
30
+ end
31
+
32
+ attr_writer :thin_logging
33
+ end
34
+ end
35
+
25
36
  module Spec::Example::ExampleMethods
26
- attr_reader :spec_root_path, :implementation_root_path, :public_path, :server
37
+ attr_reader :spec_root_path, :implementation_root_path, :public_path, :server, :connection
27
38
  before(:all) do
28
39
  dir = File.dirname(__FILE__)
29
40
  @spec_root_path = File.expand_path("#{dir}/../example_specs")
@@ -33,7 +44,26 @@ module Spec::Example::ExampleMethods
33
44
 
34
45
  before(:each) do
35
46
  JsSpec::Server.instance = JsSpec::Server.new(spec_root_path, implementation_root_path, public_path)
47
+ stub(EventMachine).run do
48
+ raise "You need to mock calls to EventMachine.run or the process will hang"
49
+ end
50
+ stub(EventMachine).start_server do
51
+ raise "You need to mock calls to EventMachine.start_server or the process will hang"
52
+ end
53
+ stub(EventMachine).send_data do
54
+ raise "Calls to EventMachine.send_data must be mocked or stubbed"
55
+ end
56
+ @connection = Thin::JsSpecConnection.new(UUID.new)
57
+ stub(EventMachine).send_data {raise "EventMachine.send_data must be handled"}
58
+ stub(EventMachine).close_connection {raise "EventMachine.close_connection must be handled"}
36
59
  @server = JsSpec::Server.instance
60
+ Thin::Logging.silent = !self.class.thin_logging
61
+ Thin::Logging.debug = self.class.thin_logging
62
+ end
63
+
64
+ after(:each) do
65
+ Thin::Logging.silent = true
66
+ Thin::Logging.debug = false
37
67
  end
38
68
 
39
69
  def get(url, params={})
@@ -52,11 +82,16 @@ module Spec::Example::ExampleMethods
52
82
  request(:delete, url, params)
53
83
  end
54
84
 
55
- def request(method, url, params={})
56
- @request = Rack::MockRequest.new(server)
57
- @request.__send__(method, url, params)
85
+ def env_for(method, url, params)
86
+ Rack::MockRequest.env_for(url, params.merge({:method => method.to_s.upcase, 'js_spec.connection' => connection}))
58
87
  end
59
88
 
89
+ def create_request(method, url, params={})
90
+ env = env_for(method, url, params)
91
+ server.call(env)[2]
92
+ end
93
+ alias_method :request, :create_request
94
+
60
95
  def core_path
61
96
  JsSpec::Server.core_path
62
97
  end
@@ -82,4 +117,4 @@ module Spec::Example::ExampleMethods
82
117
  file && file.relative_path == expected_relative_path
83
118
  end
84
119
  end
85
- end
120
+ end
metadata CHANGED
@@ -1,91 +1,138 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: js_spec
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2008-01-25 00:00:00 -08:00
8
- summary: The JSSpec client library (http://code.google.com/p/jsspec/) plus a convenient ruby server.
9
- require_paths:
10
- - lib
11
- email: brian@pivotallabs.com
12
- homepage: http://pivotallabs.com
13
- rubyforge_project: pivotalrb
14
- description: The JSSpec client library (http://code.google.com/p/jsspec/) plus a convenient ruby server.
15
- autorequire: js_spec
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Brian Takita & Nathan Sobo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-05 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: Selenium
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: thin
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0"
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: uuid
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ description: The JSSpec client library (http://code.google.com/p/jsspec/) plus a convenient ruby server.
43
+ email: brian@pivotallabs.com
44
+ executables:
45
+ - js_spec
46
+ - js_spec_server
47
+ extensions: []
48
+
49
+ extra_rdoc_files:
50
+ - README
51
+ - CHANGES
31
52
  files:
53
+ - Rakefile
32
54
  - CHANGES
33
55
  - README
34
- - Rakefile
35
- - lib/js_spec/rails_server.rb
56
+ - init.rb
57
+ - lib/js_spec/thin/backends/js_spec_server.rb
58
+ - lib/js_spec/thin/js_spec_connection.rb
59
+ - lib/js_spec/rack/response.rb
60
+ - lib/js_spec/resources/spec_file_runner.rb
61
+ - lib/js_spec/resources/spec_runner.rb
36
62
  - lib/js_spec/resources/dir.rb
63
+ - lib/js_spec/resources/runners/firefox1_runner.rb
64
+ - lib/js_spec/resources/runners/firefox_runner.rb
37
65
  - lib/js_spec/resources/suite_finish.rb
38
- - lib/js_spec/resources/runners.rb
39
- - lib/js_spec/resources/spec_runner.rb
40
66
  - lib/js_spec/resources/spec_dir_runner.rb
41
- - lib/js_spec/resources/file.rb
42
67
  - lib/js_spec/resources/web_root.rb
43
- - lib/js_spec/resources/runners/firefox_runner.rb
44
- - lib/js_spec/resources/spec_file_runner.rb
68
+ - lib/js_spec/resources/file.rb
45
69
  - lib/js_spec/resources/suite.rb
70
+ - lib/js_spec/resources/runners.rb
71
+ - lib/js_spec/rails_server.rb
46
72
  - lib/js_spec/server.rb
73
+ - lib/js_spec/client.rb
47
74
  - lib/js_spec.rb
48
- - core/COPYING
49
- - core/JSSpec.css
50
- - core/demo.html
51
- - core/exp
52
75
  - core/JSSpec.js
76
+ - core/jquery.js
53
77
  - core/diff_match_patch.js
54
78
  - core/JSSpecExtensions.js
55
- - bin/js_spec
79
+ - core/exp
80
+ - core/JSSpec.css
81
+ - core/demo.html
82
+ - core/COPYING
56
83
  - bin/js_spec_server
57
- - spec/unit/resources/dir_spec.rb
58
- - spec/unit/resources/web_root_spec.rb
59
- - spec/unit/resources/suite_spec.rb
60
- - spec/unit/resources/spec_file_runner_spec.rb
61
- - spec/unit/resources/runner_spec.rb
62
- - spec/unit/resources/file_spec.rb
63
- - spec/unit/resources/runners/firefox_runner_spec.rb
64
- - spec/unit/resources/suite_finish_spec.rb
65
- - spec/unit/resources/spec_dir_runner_spec.rb
66
- - spec/unit/unit_spec_helper.rb
67
- - spec/unit/rails_server_spec.rb
68
- - spec/unit/server_spec.rb
69
- - spec/functional/functional_spec_helper.rb
84
+ - bin/js_spec
85
+ - spec/spec_suite.rb
70
86
  - spec/functional/server_spec.rb
87
+ - spec/functional/functional_spec_helper.rb
88
+ - spec/integration/integration_spec_helper.rb
89
+ - spec/integration/integration_spec.rb
90
+ - spec/integration_suite.rb
91
+ - spec/unit/thin/js_spec_connection_spec.rb
92
+ - spec/unit/rack/response_spec.rb
93
+ - spec/unit/js_spec/resources/spec_file_runner_spec.rb
94
+ - spec/unit/js_spec/resources/file_spec.rb
95
+ - spec/unit/js_spec/resources/spec_dir_runner_spec.rb
96
+ - spec/unit/js_spec/resources/suite_spec.rb
97
+ - spec/unit/js_spec/resources/dir_spec.rb
98
+ - spec/unit/js_spec/resources/suite_finish_spec.rb
99
+ - spec/unit/js_spec/resources/web_root_spec.rb
100
+ - spec/unit/js_spec/resources/runners/firefox_runner_spec.rb
101
+ - spec/unit/js_spec/resources/runner_spec.rb
102
+ - spec/unit/js_spec/server_spec.rb
103
+ - spec/unit/js_spec/client_spec.rb
104
+ - spec/unit/js_spec/rails_server_spec.rb
105
+ - spec/unit/unit_spec_helper.rb
71
106
  - spec/functional_suite.rb
72
- - spec/spec_suite.rb
73
107
  - spec/unit_suite.rb
74
- test_files: []
75
-
108
+ has_rdoc: true
109
+ homepage: http://pivotallabs.com
110
+ post_install_message:
76
111
  rdoc_options:
77
112
  - --main
78
113
  - README
79
114
  - --inline-source
80
115
  - --line-numbers
81
- extra_rdoc_files:
82
- - README
83
- - CHANGES
84
- executables:
85
- - js_spec_server
86
- extensions: []
87
-
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ version:
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: "0"
129
+ version:
88
130
  requirements: []
89
131
 
90
- dependencies: []
132
+ rubyforge_project: pivotalrb
133
+ rubygems_version: 1.1.0
134
+ signing_key:
135
+ specification_version: 2
136
+ summary: The JSSpec client library (http://code.google.com/p/jsspec/) plus a convenient ruby server.
137
+ test_files: []
91
138
 
@@ -1,24 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Runners do
6
- attr_reader :runner
7
- before do
8
- @runner = Runners.new
9
- end
10
-
11
- describe "#locate" do
12
- it "when passed 'firefox', returns a FirefoxRunner" do
13
- runner.locate('firefox').should be_instance_of(Runners::FirefoxRunner)
14
- end
15
-
16
- it "when not passed 'firefox', raises an error" do
17
- lambda do
18
- runner.locate('invalid')
19
- end.should raise_error
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,87 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Runners::FirefoxRunner do
6
- attr_reader :runner
7
- before do
8
- @runner = Runners::FirefoxRunner.new
9
- end
10
-
11
- describe "#post" do
12
- attr_reader :firefox_profile_path
13
- before do
14
- dir = ::File.dirname(__FILE__)
15
- @firefox_profile_path = ::File.expand_path("#{dir}/../../../../resources/firefox")
16
- ::File.should be_directory(firefox_profile_path)
17
- end
18
-
19
- it "returns ''" do
20
- guid = nil
21
- stub.proxy(UUID).new {|guid| guid = guid}
22
- stub(runner).system {true}
23
- stub(runner).sleep(0.5)
24
- stub(runner).sleep {Kernel.sleep}
25
-
26
- post_return_value = nil
27
- Thread.start do
28
- post_return_value = runner.post
29
- end
30
- wait_for do
31
- Runners::FirefoxRunner.threads[guid]
32
- end
33
- Runners::FirefoxRunner.resume(guid, 'foobar')
34
-
35
- wait_for do
36
- post_return_value == 'foobar'
37
- end
38
- end
39
-
40
- def wait_for(timeout=5)
41
- Timeout.timeout(timeout) do
42
- loop do
43
- break if yield
44
- end
45
- end
46
- end
47
-
48
- it "copies the firefox profile files to a tmp directory " <<
49
- "and creates a profile " <<
50
- "and waits for profile to be created " <<
51
- "and starts firefox" do
52
- stub(runner).sleep
53
-
54
- mock(runner).system("cp -R #{firefox_profile_path} #{runner.profile_dir}").ordered {true}
55
- mock(runner).system("firefox -profile #{runner.profile_dir} -chrome chrome://killff/content/kill.html").ordered {true}
56
- mock(::File).exists?("#{runner.profile_dir}/parent.lock").ordered {false}
57
- mock(runner).sleep(0.5).ordered
58
- mock(::File).exists?("#{runner.profile_dir}/parent.lock").ordered {false}
59
- mock(runner).system(Regexp.new("firefox -profile #{runner.profile_dir} http://localhost:8080/specs")).ordered {true}
60
- stub(runner).callcc
61
- runner.post
62
- end
63
-
64
- it "calls #copy_profile_files, #create_profile, #wait_for_full_profile_to_be_created, and #start_browser" do
65
- stub(runner).system {true}
66
- stub(runner).sleep
67
- stub(runner).callcc
68
-
69
- mock.proxy(runner).copy_profile_files.ordered
70
- mock.proxy(runner).create_profile.ordered
71
- mock.proxy(runner).wait_for_full_profile_to_be_created.ordered
72
- mock.proxy(runner).start_browser(is_a(String)).ordered
73
-
74
- runner.post
75
- end
76
- end
77
-
78
- describe "#start_browser" do
79
- it "starts a firefox browser in a thread" do
80
- mock(Thread).start.yields
81
- mock(runner).system("firefox -profile #{runner.profile_dir} http://localhost:8080/specs?guid=foobar").ordered {true}
82
- runner.__send__(:start_browser, "foobar")
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,43 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe SpecDirRunner do
6
- attr_reader :dir, :runner
7
-
8
- before do
9
- @dir = Dir.new(spec_root_path, '/specs')
10
- @runner = SpecDirRunner.new(dir)
11
- end
12
-
13
- describe "#spec_files" do
14
- it "returns a File for each *_spec.js file in the directory" do
15
- spec_files = runner.spec_files
16
-
17
- spec_files.should contain_spec_file_with_correct_paths("/failing_spec.js")
18
- spec_files.should contain_spec_file_with_correct_paths("/foo/failing_spec.js")
19
- spec_files.should contain_spec_file_with_correct_paths("/foo/passing_spec.js")
20
- end
21
- end
22
-
23
- describe "#get" do
24
- attr_reader :html, :doc
25
- before do
26
- @html = runner.get()
27
- @doc = Hpricot(html)
28
- end
29
-
30
- it "returns script tags for each test javascript file" do
31
- doc.at("script[@src='/specs/failing_spec.js']").should exist
32
- end
33
-
34
- it "returns the js specs template" do
35
- doc.at("link[@href='/core/JSSpec.css']").should exist
36
- doc.at("script[@src='/core/JSSpec.js']").should exist
37
- doc.at("script[@src='/core/JSSpecExtensions.js']").should exist
38
- doc.at("body").inner_html.should be_empty
39
- end
40
- end
41
- end
42
- end
43
- end