js_spec 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ 0.2.1
2
+ - Using thin 0.8.1
3
+ - Fixed server crashing on exception issue.
4
+ - Add div id=js_spec_content into the body of the runner html.
5
+ - Fixed timeout issues by immediately sending the head of the response.
6
+ - Better error message when selenium server is not running
7
+
1
8
  0.2.0
2
9
  - Using Thin as the server
3
10
  - Using Selenium to run the browsers
data/README CHANGED
@@ -11,13 +11,22 @@ To install the gem, run:
11
11
 
12
12
  To install the plugin, run:
13
13
  script/plugin install svn://rubyforge.org/var/svn/pivotalrb/js_spec/trunk
14
+ script/generate js_spec
14
15
 
15
16
  The Rails plugin gives you generators when using JsSpec in a Rails environment.
16
17
 
17
18
  == Using JsSpec
18
- js_spec_server /path/to/your/javascript/spec/files /path/to/your/javascript/implementation/files
19
+ First you need to start your JsSpec server.
19
20
 
20
- Open your browser to http://localhost:8080/specs or run selenium and then run js_spec
21
+ If you are using js_spec_server as a Rails plugin, you can simply run:
22
+ script/js_spec_server
23
+
24
+ If you are using the js_spec gem, you can run:
25
+ js_spec_server /path/to/your/javascript/spec/files /path/to/your/javascript/implementation/files
26
+
27
+ Once the server is started, there are two possibly ways to run your js spec:
28
+ * Open your browser to http://localhost:8080/specs
29
+ * Start the Selenium server by running `selenium` from the command line, then running `js_spec` from the command line
21
30
 
22
31
  == JsSpec on CI
23
32
  JS spec uses the Selenium gem to automatically control browsers on different machines.
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ def run_suite
26
26
  end
27
27
 
28
28
  PKG_NAME = "js_spec"
29
- PKG_VERSION = "0.2.0"
29
+ PKG_VERSION = "0.2.1"
30
30
  PKG_FILES = FileList[
31
31
  '[A-Z]*',
32
32
  '*.rb',
@@ -33,7 +33,9 @@ Spec.register = function(spec_constructor) {
33
33
  }
34
34
  }
35
35
 
36
- Spec.reset = function() {}
36
+ Spec.reset = function() {
37
+ document.getElementById('js_spec_content').innerHTML = "";
38
+ }
37
39
 
38
40
  var Assets = {
39
41
  require: function(path_from_javascripts, onload) {
@@ -0,0 +1,153 @@
1
+ #
2
+ # Guid - Ruby library for portable GUID/UUID generation.
3
+ #
4
+ # Copyright (c) 2004 David Garamond <davegaramond at icqmail com>
5
+ #
6
+ # This library is free software; you can redistribute it and/or modify it
7
+ # under the same terms as Ruby itself.
8
+ #
9
+
10
+ if RUBY_PLATFORM =~ /[^r]win/i &&
11
+ module Guid_Win32_
12
+ require 'Win32API'
13
+
14
+ PROV_RSA_FULL = 1
15
+ CRYPT_VERIFYCONTEXT = 0xF0000000
16
+ FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200
17
+ FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
18
+
19
+ CryptAcquireContext = Win32API.new("advapi32", "CryptAcquireContext",
20
+ 'PPPII', 'L')
21
+ CryptGenRandom = Win32API.new("advapi32", "CryptGenRandom",
22
+ 'LIP', 'L')
23
+ CryptReleaseContext = Win32API.new("advapi32", "CryptReleaseContext",
24
+ 'LI', 'L')
25
+ GetLastError = Win32API.new("kernel32", "GetLastError", '', 'L')
26
+ FormatMessageA = Win32API.new("kernel32", "FormatMessageA",
27
+ 'LPLLPLPPPPPPPP', 'L')
28
+
29
+ def lastErrorMessage
30
+ code = GetLastError.call
31
+ msg = "\0" * 1024
32
+ len = FormatMessageA.call(FORMAT_MESSAGE_IGNORE_INSERTS +
33
+ FORMAT_MESSAGE_FROM_SYSTEM, 0,
34
+ code, 0, msg, 1024, nil, nil,
35
+ nil, nil, nil, nil, nil, nil)
36
+ msg[0, len].tr("\r", '').chomp
37
+ end
38
+
39
+ def initialize
40
+ hProvStr = " " * 4
41
+ if CryptAcquireContext.call(hProvStr, nil, nil, PROV_RSA_FULL,
42
+ CRYPT_VERIFYCONTEXT) == 0
43
+ raise SystemCallError, "CryptAcquireContext failed: #{lastErrorMessage}"
44
+ end
45
+ hProv, = hProvStr.unpack('L')
46
+ @bytes = " " * 16
47
+ if CryptGenRandom.call(hProv, 16, @bytes) == 0
48
+ raise SystemCallError, "CryptGenRandom failed: #{lastErrorMessage}"
49
+ end
50
+ if CryptReleaseContext.call(hProv, 0) == 0
51
+ raise SystemCallError, "CryptReleaseContext failed: #{lastErrorMessage}"
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ module Guid_Unix_
58
+ @@random_device = nil
59
+
60
+ def initialize
61
+ if !@@random_device
62
+ if File.exists? "/dev/urandom"
63
+ @@random_device = File.open "/dev/urandom", "r"
64
+ elsif File.exists? "/dev/random"
65
+ @@random_device = File.open "/dev/random", "r"
66
+ else
67
+ raise RuntimeError, "Can't find random device"
68
+ end
69
+ end
70
+
71
+ @bytes = @@random_device.read(16)
72
+ end
73
+ end
74
+
75
+ class Guid
76
+ if RUBY_PLATFORM =~ /[^r]win/
77
+ include Guid_Win32_
78
+ else
79
+ include Guid_Unix_
80
+ end
81
+
82
+ def hexdigest
83
+ @bytes.unpack("h*")[0]
84
+ end
85
+
86
+ def to_s
87
+ @bytes.unpack("h8 h4 h4 h4 h12").join "-"
88
+ end
89
+
90
+ def inspect
91
+ to_s
92
+ end
93
+
94
+ def raw
95
+ @bytes
96
+ end
97
+
98
+ def self.from_s(s)
99
+ raise ArgumentError, "Invalid GUID hexstring" unless
100
+ s =~ /\A[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}\z/i
101
+ guid = Guid.allocate
102
+ guid.instance_eval { @bytes = [s.gsub(/[^0-9a-f]+/i, '')].pack "h*" }
103
+ guid
104
+ end
105
+
106
+ def self.from_raw(bytes)
107
+ raise ArgumentError, "Invalid GUID raw bytes, length must be 16 bytes" unless
108
+ bytes.length == 16
109
+ guid = Guid.allocate
110
+ guid.instance_eval { @bytes = bytes }
111
+ guid
112
+ end
113
+
114
+ def ==(other)
115
+ @bytes == other.raw
116
+ end
117
+ end
118
+
119
+ if __FILE__ == $0
120
+ require 'test/unit'
121
+
122
+ class GuidTest < Test::Unit::TestCase
123
+ def test_new
124
+ g = Guid.new
125
+
126
+ # different representations of guid: hexdigest, hex+dashes, raw bytes
127
+ assert_equal(0, g.to_s =~ /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/)
128
+ assert_equal(16, g.raw.length)
129
+ assert_equal(0, g.hexdigest =~ /\A[0-9a-f]{32}\z/)
130
+ assert_equal(g.hexdigest, g.to_s.gsub(/-/, ''))
131
+
132
+ # must be different each time we produce (this is just a simple test)
133
+ g2 = Guid.new
134
+ assert_equal(true, g != g2)
135
+ assert_equal(true, g.to_s != g2.to_s)
136
+ assert_equal(true, g.raw != g2.raw)
137
+ assert_equal(true, g.hexdigest != g2.hexdigest)
138
+ assert_equal(1000, (1..1000).select { |i| g != Guid.new }.length)
139
+ end
140
+
141
+ def test_from_s
142
+ g = Guid.new
143
+ g2 = Guid.from_s(g.to_s)
144
+ assert_equal(g, g2)
145
+ end
146
+
147
+ def test_from_raw
148
+ g = Guid.new
149
+ g2 = Guid.from_raw(g.raw)
150
+ assert_equal(g, g2)
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,5 @@
1
+ Rack::CommonLogger.class_eval do
2
+ def empty?
3
+ @body.empty?
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ dir = File.dirname(__FILE__)
2
+ require "#{dir}/rack/commonlogger"
@@ -25,7 +25,7 @@ module JsSpec
25
25
  profile_base = "#{::Dir.tmpdir}/js_spec/firefox"
26
26
  mkdir_p profile_base
27
27
  @profile_dir = "#{profile_base}/#{Time.now.to_i}"
28
- @guid = UUID.new
28
+ @guid = Guid.new.to_s
29
29
  @request = request
30
30
  @response = response
31
31
  @connection = Server.connection
@@ -35,25 +35,29 @@ module JsSpec
35
35
  FirefoxRunner.register_instance self
36
36
  spec_url = (request && request['spec_url']) ? request['spec_url'] : spec_suite_url
37
37
  parsed_spec_url = URI.parse(spec_url)
38
+ selenium_port = (request['selenium_port'] || 4444).to_i
38
39
  @driver = Selenium::SeleniumDriver.new(
39
40
  request['selenium_host'] || 'localhost',
40
- (request['selenium_port'] || 4444).to_i,
41
+ selenium_port,
41
42
  '*firefox',
42
43
  "#{parsed_spec_url.scheme}://#{parsed_spec_url.host}:#{parsed_spec_url.port}"
43
44
  )
44
- driver.start
45
+ begin
46
+ driver.start
47
+ rescue Errno::ECONNREFUSED => e
48
+ raise Errno::ECONNREFUSED, "Cannot connect to Selenium Server on port #{selenium_port}. To start the selenium server, run `selenium`."
49
+ end
45
50
  Thread.start do
46
51
  url = "#{spec_url}?guid=#{guid}"
47
52
  driver.open(url)
48
53
  end
49
- response.status = nil
54
+ response.status = 200
50
55
  end
51
56
 
52
57
  def finalize(text)
53
58
  driver.stop
54
- response.status = 200
55
59
  response.body = text
56
- connection.send_response(*response.finish)
60
+ connection.send_body(response)
57
61
  end
58
62
 
59
63
  protected
@@ -24,7 +24,9 @@ module JsSpec
24
24
  JSSpec.guid = '#{guid}';
25
25
  </script>
26
26
  </head>
27
- <body></body>
27
+ <body>
28
+ <div id="js_spec_content"></div>
29
+ </body>
28
30
  </html>
29
31
  HTML
30
32
  response.body = html.gsub(/^ /, "")
@@ -0,0 +1,11 @@
1
+ dir = File.dirname(__FILE__)
2
+ require "#{dir}/resources/runners"
3
+ require "#{dir}/resources/runners/firefox_runner"
4
+ require "#{dir}/resources/spec_runner"
5
+ require "#{dir}/resources/spec_file_runner"
6
+ require "#{dir}/resources/spec_dir_runner"
7
+ require "#{dir}/resources/file"
8
+ require "#{dir}/resources/dir"
9
+ require "#{dir}/resources/web_root"
10
+ require "#{dir}/resources/suite"
11
+ require "#{dir}/resources/suite_finish"
@@ -33,11 +33,10 @@ module JsSpec
33
33
  end
34
34
 
35
35
  def run(options)
36
- ::Thin::Server.start(
37
- ::Thin::Backends::JsSpecServer.new(options[:Host], options[:Port]),
38
- options[:Port],
39
- self
40
- )
36
+ server = ::Thin::Server.new(options[:Host], options[:Port], self)
37
+ server.backend = ::Thin::Backends::JsSpecServer.new(options[:Host], options[:Port])
38
+ server.backend.server = server
39
+ server.start!
41
40
  end
42
41
 
43
42
  def call(env)
@@ -6,25 +6,23 @@ module Thin
6
6
 
7
7
  env = @request.env
8
8
  env['js_spec.connection'] = self
9
- status, headers, body = @app.call(env)
10
- unless status.to_i == 0
11
- send_response(status, headers, body)
9
+ @response.status, @response.headers, @response.body = @app.call(env)
10
+ send_data @response.head
11
+ unless @response.body.empty?
12
+ send_body @response.body
12
13
  end
13
- rescue
14
- handle_error
14
+ rescue Exception => e
15
+ handle_error e
15
16
  end
16
17
 
17
- def send_response(status, headers, body)
18
- @response.status, @response.headers, @response.body = status, headers, body
19
- @response.persistent! if @request.persistent?
20
- @response.each do |chunk|
21
- trace { chunk }
18
+ def send_body(rack_response)
19
+ rack_response.each do |chunk|
22
20
  send_data chunk
23
21
  end
24
22
  # If no more request on that same connection, we close it.
25
23
  close_connection_after_writing unless persistent?
26
- rescue
27
- handle_error
24
+ rescue Exception => e
25
+ handle_error e
28
26
  ensure
29
27
  @request.close rescue nil
30
28
  @response.close rescue nil
@@ -34,8 +32,9 @@ module Thin
34
32
  post_init if persistent?
35
33
  end
36
34
 
37
- def handle_error
38
- log "!! Unexpected error while processing request: #{$!.message}"
35
+ def handle_error(error)
36
+ log "!! Unexpected error while processing request: #{error.message}"
37
+ log error.backtrace
39
38
  log_error
40
39
  close_connection rescue nil
41
40
  end
@@ -0,0 +1,3 @@
1
+ dir = File.dirname(__FILE__)
2
+ require "#{dir}/thin/js_spec_connection"
3
+ require "#{dir}/thin/backends/js_spec_server"
data/lib/js_spec.rb CHANGED
@@ -1,34 +1,27 @@
1
1
  require "rubygems"
2
+ gem "eventmachine", "0.10.0"
3
+ gem "thin", "0.8.0"
4
+
2
5
  require "thin"
3
6
  require "fileutils"
4
7
  require "tmpdir"
5
8
  require "timeout"
6
- require "uuid"
7
9
  require "cgi"
8
10
  require "net/http"
9
11
  require "selenium"
10
12
  require "optparse"
11
13
 
12
14
  dir = File.dirname(__FILE__)
13
- require "#{dir}/js_spec/thin/js_spec_connection"
14
- require "#{dir}/js_spec/thin/backends/js_spec_server"
15
- require "#{dir}/js_spec/rack/response"
16
- require "#{dir}/js_spec/resources/runners"
17
- require "#{dir}/js_spec/resources/runners/firefox_runner"
15
+ require "#{dir}/js_spec/guid"
16
+ require "#{dir}/js_spec/thin"
17
+ require "#{dir}/js_spec/rack"
18
+ require "#{dir}/js_spec/resources"
18
19
 
19
20
  require "#{dir}/js_spec/client"
20
21
  require "#{dir}/js_spec/server"
21
22
  require "#{dir}/js_spec/rails_server"
22
- require "#{dir}/js_spec/resources/spec_runner"
23
- require "#{dir}/js_spec/resources/spec_file_runner"
24
- require "#{dir}/js_spec/resources/spec_dir_runner"
25
- require "#{dir}/js_spec/resources/file"
26
- require "#{dir}/js_spec/resources/dir"
27
- require "#{dir}/js_spec/resources/web_root"
28
- require "#{dir}/js_spec/resources/suite"
29
- require "#{dir}/js_spec/resources/suite_finish"
30
23
 
31
24
  module JsSpec
32
- DEFAULT_HOST = "127.0.0.1"
25
+ DEFAULT_HOST = "0.0.0.0"
33
26
  DEFAULT_PORT = 8080
34
27
  end
@@ -8,7 +8,7 @@ module JsSpec
8
8
  before do
9
9
  Thread.current[:connection] = connection
10
10
  @driver = "Selenium Driver"
11
- stub(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://127.0.0.1:8080') do
11
+ stub(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
12
12
  driver
13
13
  end
14
14
  end
@@ -29,7 +29,7 @@ module JsSpec
29
29
  dont_allow(EventMachine).close_connection
30
30
  runner.post(request, response)
31
31
 
32
- response.should_not be_ready
32
+ response.body.should be_empty
33
33
  end
34
34
 
35
35
  describe "when a selenium_host parameter is passed into the request" do
@@ -40,7 +40,7 @@ module JsSpec
40
40
  end
41
41
 
42
42
  it "starts the Selenium Driver with the passed in selenium_host" do
43
- mock(Selenium::SeleniumDriver).new('another-machine', 4444, '*firefox', 'http://127.0.0.1:8080') do
43
+ mock(Selenium::SeleniumDriver).new('another-machine', 4444, '*firefox', 'http://0.0.0.0:8080') do
44
44
  driver
45
45
  end
46
46
  runner.post(request, response)
@@ -55,7 +55,7 @@ module JsSpec
55
55
  end
56
56
 
57
57
  it "starts the Selenium Driver from localhost" do
58
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://127.0.0.1:8080') do
58
+ mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
59
59
  driver
60
60
  end
61
61
  runner.post(request, response)
@@ -70,7 +70,7 @@ module JsSpec
70
70
  end
71
71
 
72
72
  it "starts the Selenium Driver with the passed in selenium_port" do
73
- mock(Selenium::SeleniumDriver).new('localhost', 4000, '*firefox', 'http://127.0.0.1:8080') do
73
+ mock(Selenium::SeleniumDriver).new('localhost', 4000, '*firefox', 'http://0.0.0.0:8080') do
74
74
  driver
75
75
  end
76
76
  runner.post(request, response)
@@ -85,7 +85,7 @@ module JsSpec
85
85
  end
86
86
 
87
87
  it "starts the Selenium Driver from localhost" do
88
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://127.0.0.1:8080') do
88
+ mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
89
89
  driver
90
90
  end
91
91
  runner.post(request, response)
@@ -111,14 +111,14 @@ module JsSpec
111
111
  describe "when a spec_url is not passed into the request" do
112
112
  before do
113
113
  request['spec_url'].should be_nil
114
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://127.0.0.1:8080') do
114
+ mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
115
115
  driver
116
116
  end
117
117
  end
118
118
 
119
119
  it "uses Selenium to run the entire spec suite in Firefox" do
120
120
  mock(driver).start
121
- mock(driver).open("http://127.0.0.1:8080/specs?guid=#{runner.guid}")
121
+ mock(driver).open("http://0.0.0.0:8080/specs?guid=#{runner.guid}")
122
122
 
123
123
  runner.post(request, response)
124
124
  end
@@ -40,7 +40,7 @@ module JsSpec
40
40
  doc.at("link[@href='/core/JSSpec.css']").should exist
41
41
  doc.at("script[@src='/core/JSSpec.js']").should exist
42
42
  doc.at("script[@src='/core/JSSpecExtensions.js']").should exist
43
- doc.at("body").inner_html.should be_empty
43
+ doc.at("body/#js_spec_content").should_not be_nil
44
44
  end
45
45
  end
46
46
  end
@@ -14,35 +14,49 @@ module Thin
14
14
  end
15
15
  end
16
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']
17
+ describe "and the call is successful" do
18
+ describe "and the body is not empty" do
19
+ attr_reader :somedir_resource
20
+ before do
21
+ mock(app = Object.new).call(is_a(Hash)) do
22
+ [200, {}, 'The Body']
23
+ end
24
+ connection.app = app
25
+ end
26
+
27
+ it "sends the response to the socket and closes the connection" do
28
+ mock(connection).close_connection_after_writing
29
+ connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
30
+ result.should include("The Body")
22
31
  end
23
- connection.app = app
24
32
  end
25
33
 
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")
34
+ describe "and the body is empty" do
35
+ attr_reader :somedir_resource
36
+ before do
37
+ mock(app = Object.new).call(is_a(Hash)) do
38
+ [200, {}, []]
39
+ end
40
+ connection.app = app
41
+ end
42
+
43
+ it "keeps the connection open" do
44
+ dont_allow(connection).close_connection_after_writing
45
+ connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
46
+ end
30
47
  end
31
48
  end
32
49
 
33
- describe "when the response code is 0" do
34
- attr_reader :somedir_resource
35
- before do
50
+ describe "and the call raises an error" do
51
+ it "logs the error and closes the connection" do
36
52
  mock(app = Object.new).call(is_a(Hash)) do
37
- [0, {}, 'The Body']
53
+ raise "An Error"
38
54
  end
39
55
  connection.app = app
40
- end
56
+ mock(connection).log(anything).at_least(1)
57
+ mock(connection).close_connection
41
58
 
42
- it "does not send data to the socket and keeps it open" do
43
- dont_allow(connection).close_connection_after_writing
44
59
  connection.receive_data "GET /specs HTTP/1.1\r\nHost: _\r\n\r\n"
45
- result.should_not include("The Body")
46
60
  end
47
61
  end
48
62
  end
@@ -53,7 +53,7 @@ module Spec::Example::ExampleMethods
53
53
  stub(EventMachine).send_data do
54
54
  raise "Calls to EventMachine.send_data must be mocked or stubbed"
55
55
  end
56
- @connection = Thin::JsSpecConnection.new(UUID.new)
56
+ @connection = Thin::JsSpecConnection.new(Guid.new)
57
57
  stub(EventMachine).send_data {raise "EventMachine.send_data must be handled"}
58
58
  stub(EventMachine).close_connection {raise "EventMachine.close_connection must be handled"}
59
59
  @server = JsSpec::Server.instance
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Takita & Nathan Sobo
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-05 00:00:00 -07:00
12
+ date: 2008-04-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -54,13 +54,13 @@ files:
54
54
  - CHANGES
55
55
  - README
56
56
  - init.rb
57
+ - lib/js_spec/rack.rb
57
58
  - lib/js_spec/thin/backends/js_spec_server.rb
58
59
  - lib/js_spec/thin/js_spec_connection.rb
59
- - lib/js_spec/rack/response.rb
60
+ - lib/js_spec/rack/commonlogger.rb
60
61
  - lib/js_spec/resources/spec_file_runner.rb
61
62
  - lib/js_spec/resources/spec_runner.rb
62
63
  - lib/js_spec/resources/dir.rb
63
- - lib/js_spec/resources/runners/firefox1_runner.rb
64
64
  - lib/js_spec/resources/runners/firefox_runner.rb
65
65
  - lib/js_spec/resources/suite_finish.rb
66
66
  - lib/js_spec/resources/spec_dir_runner.rb
@@ -69,6 +69,9 @@ files:
69
69
  - lib/js_spec/resources/suite.rb
70
70
  - lib/js_spec/resources/runners.rb
71
71
  - lib/js_spec/rails_server.rb
72
+ - lib/js_spec/resources.rb
73
+ - lib/js_spec/thin.rb
74
+ - lib/js_spec/guid.rb
72
75
  - lib/js_spec/server.rb
73
76
  - lib/js_spec/client.rb
74
77
  - lib/js_spec.rb
@@ -89,7 +92,6 @@ files:
89
92
  - spec/integration/integration_spec.rb
90
93
  - spec/integration_suite.rb
91
94
  - spec/unit/thin/js_spec_connection_spec.rb
92
- - spec/unit/rack/response_spec.rb
93
95
  - spec/unit/js_spec/resources/spec_file_runner_spec.rb
94
96
  - spec/unit/js_spec/resources/file_spec.rb
95
97
  - spec/unit/js_spec/resources/spec_dir_runner_spec.rb
@@ -1,5 +0,0 @@
1
- Rack::Response.class_eval do
2
- def ready?
3
- status ? true : false
4
- end
5
- end
@@ -1,8 +0,0 @@
1
- module JsSpec
2
- module Resources
3
- class Runners
4
- class Firefox1Runner < FirefoxRunner
5
- end
6
- end
7
- end
8
- end
@@ -1,30 +0,0 @@
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