capybara-envjs 0.1.0.pre2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.1.0 / 2010-03-29
2
+
3
+ * updated to use stock capybara 3.6
4
+ * add support for both rack-test and external modes
5
+
1
6
  === 0.1.0.pre2 / 2010-02-25
2
7
 
3
8
  * initial commit
data/Rakefile CHANGED
@@ -9,14 +9,14 @@ Hoe.plugins.delete :rubyforge
9
9
 
10
10
  Hoe.spec 'capybara-envjs' do
11
11
  developer 'Steven Parkes', 'smparkes@smparkes.net'
12
- self.version = "0.1.0.pre2"
12
+ self.version = "0.1.0"
13
13
 
14
14
  self.readme_file = 'README.rdoc'
15
15
  self.extra_rdoc_files = Dir['*.rdoc']
16
16
 
17
17
  self.extra_deps = [
18
- ['capybara', '>= 0.3.0'],
19
- ['envjs', '>= 0.1.6']
18
+ ['capybara', '>= 0.3.6'],
19
+ ['envjs', '>= 0.3.0']
20
20
  ]
21
21
 
22
22
  self.extra_dev_deps = [
@@ -1,4 +1,25 @@
1
- require 'rack/test'
1
+ if false # for testing ... but seems okay
2
+ class Thread
3
+ def self.start
4
+ puts caller(0)
5
+ raise "hell"
6
+ end
7
+ def initialize *args
8
+ puts caller(0)
9
+ raise "hell"
10
+ end
11
+ end
12
+
13
+ module Timeout
14
+ def timeout *args
15
+ # p "!!! #{args.inspect}"
16
+ # puts caller(0)
17
+ return yield
18
+ raise "hell #{args.inspect}"
19
+ end
20
+ module_function :timeout
21
+ end
22
+ end
2
23
 
3
24
  class Capybara::Driver::Envjs < Capybara::Driver::Base
4
25
  class Node < Capybara::Node
@@ -38,7 +59,8 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
38
59
  node.innerText = value
39
60
  else
40
61
  case node.getAttribute("type")
41
- when "checkbox", "radio"; node.checked = value
62
+ when "checkbox", "radio"
63
+ node.click if node.checked != value
42
64
  else; node.setAttribute("value",value)
43
65
  end
44
66
  end
@@ -48,7 +70,6 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
48
70
  option_node = all_unfiltered("//option[text()='#{option}']") || all_unfiltered("//option[contains(.,'#{option}')]")
49
71
  option_node[0].node.selected = true
50
72
  rescue Exception => e
51
- # print e
52
73
  options = all_unfiltered(".//option").map { |o| "'#{o.text}'" }.join(', ')
53
74
  raise Capybara::OptionNotFound, "No such option '#{option}' in this select box. Available options: #{options}"
54
75
  end
@@ -62,7 +83,6 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
62
83
  option_node = (all_unfiltered("//option[text()='#{option}']") || all_unfiltered("//option[contains(.,'#{option}')]")).first
63
84
  option_node.node.selected = false
64
85
  rescue Exception => e
65
- # print e
66
86
  options = all_unfiltered(".//option").map { |o| "'#{o.text}'" }.join(', ')
67
87
  raise Capybara::OptionNotFound, "No such option '#{option}' in this select box. Available options: #{options}"
68
88
  end
@@ -113,68 +133,88 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
113
133
 
114
134
  end
115
135
 
116
- include ::Rack::Test::Methods
117
136
  attr_reader :app
137
+ attr_reader :app_host
118
138
 
119
- alias_method :response, :last_response
120
- alias_method :request, :last_request
139
+ def rack_test?
140
+ @rack_test
141
+ end
121
142
 
122
143
  def initialize(app)
123
- @app = app
124
144
 
125
- master_load = browser.master["load"]
126
145
 
127
- browser.master["load"] = proc do |*args|
128
- if args.size == 2 and args[1].to_s != "[object split_global]"
129
- file, window = *args
130
- get(file, {}, env)
131
- window["evaluate"].call response.body
132
- else
133
- master_load.call *args
146
+ @app_host = (ENV["CAPYBARA_APP_HOST"] || Capybara.app_host || "http://example.com")
147
+
148
+ @rack_test = @app_host =~ %r{^https?://[^.]*\.?example\.(com|org)}
149
+
150
+ if rack_test?
151
+ require 'rack/test'
152
+ class << self; self; end.instance_eval do
153
+ include ::Rack::Test::Methods
154
+ alias_method :response, :last_response
155
+ alias_method :request, :last_request
134
156
  end
135
157
  end
136
158
 
137
- browser["window"]["$envx"]["connection"] =
138
- browser.master["connection"] = @connection = proc do |*args|
139
- xhr, responseHandler, data = *args
140
- url = xhr.url.sub %r{^http://example.com}, ""
141
- params = data || {}
142
- method = xhr["method"].downcase.to_sym
143
- e = env;
144
- if method == :post or method == :put
145
- e.merge! "CONTENT_TYPE" => xhr.headers["Content-Type"]
146
- end
147
- if e["CONTENT_TYPE"] =~ %r{^multipart/form-data;}
148
- e["CONTENT_LENGTH"] ||= params.length
159
+ @app = app
160
+
161
+ master_load = browser.master["load"]
162
+
163
+ if rack_test?
164
+ browser.master["load"] = proc do |*args|
165
+ if args.size == 2 and args[1].to_s != "[object split_global]"
166
+ file, window = *args
167
+ get(file, {}, env)
168
+ window["evaluate"].call response.body
169
+ else
170
+ master_load.call *args
171
+ end
149
172
  end
150
- begin
151
- # puts "send #{method} #{url} #{params}"
152
- send method, url, params, e
153
- while response.status == 302
154
- params = {}
155
- method = :get
156
- url = response.location
157
- # puts "redirect #{method} #{url} #{params}"
173
+
174
+ browser["window"]["$envx"]["connection"] =
175
+ browser.master["connection"] = @connection = proc do |*args|
176
+ xhr, responseHandler, data = *args
177
+ url = xhr.url
178
+ if url.index(app_host) == 0
179
+ url.slice! 0..(app_host.length-1)
180
+ end
181
+ params = data || {}
182
+ method = xhr["method"].downcase.to_sym
183
+ e = env;
184
+ if method == :post or method == :put
185
+ e.merge! "CONTENT_TYPE" => xhr.headers["Content-Type"]
186
+ end
187
+ if e["CONTENT_TYPE"] =~ %r{^multipart/form-data;}
188
+ e["CONTENT_LENGTH"] ||= params.length
189
+ end
190
+ begin
191
+ # puts "send #{method} #{url} #{params}"
158
192
  send method, url, params, e
193
+ while response.status == 302
194
+ params = {}
195
+ method = :get
196
+ url = response.location
197
+ # puts "redirect #{method} #{url} #{params}"
198
+ send method, url, params, e
199
+ end
200
+ rescue Exception => e
201
+ print "got #{e} #{response.inspect}\n"
202
+ raise e
159
203
  end
160
- rescue Exception => e
161
- print "got #{e} #{response.inspect}\n"
162
- raise e
163
- end
164
- @source = response.body
165
- response.headers.each do |k,v|
166
- xhr.responseHeaders[k] = v
204
+ @source = response.body
205
+ response.headers.each do |k,v|
206
+ xhr.responseHeaders[k] = v
207
+ end
208
+ xhr.status = response.status
209
+ xhr.responseText = response.body
210
+ responseHandler.call
167
211
  end
168
- xhr.status = response.status
169
- xhr.responseText = response.body
170
- responseHandler.call
171
212
  end
172
213
  end
173
214
 
174
215
  def visit(path)
175
- # puts "visit #{path}"
176
216
  as_url = URI.parse path
177
- base = URI.parse "http://example.com"
217
+ base = URI.parse app_host
178
218
  path = (base + as_url).to_s
179
219
  browser["window"].location.href = path
180
220
  end
@@ -184,15 +224,24 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
184
224
  end
185
225
 
186
226
  def source
187
- @source
227
+ browser["window"].document.__original_text__
188
228
  end
189
229
 
190
230
  def body
191
231
  browser["window"].document.xml
192
232
  end
193
233
 
234
+ class Headers
235
+ def initialize hash
236
+ @hash = hash
237
+ end
238
+ def [] key
239
+ @hash[key.downcase]
240
+ end
241
+ end
242
+
194
243
  def response_headers
195
- response.headers
244
+ rack_test? ? response.headers : Headers.new(browser["window"]["document"]["__headers__"])
196
245
  end
197
246
 
198
247
  def find(selector)
@@ -223,18 +272,14 @@ class Capybara::Driver::Envjs < Capybara::Driver::Base
223
272
  unless @_browser
224
273
  require 'johnson/tracemonkey'
225
274
  require 'envjs/runtime'
226
- @_browser = Johnson::Runtime.new :size => 0x4000000
275
+ @_browser = Johnson::Runtime.new :size => Integer(ENV["JOHNSON_HEAP_SIZE"] || 0x4000000)
227
276
  @_browser.extend Envjs::Runtime
228
277
  end
229
278
 
230
279
  @_browser
231
280
  end
232
281
 
233
- def obeys_absolute_xpath
234
- true
235
- end
236
-
237
- def has_shortcircuit_timeout
282
+ def has_shortcircuit_timeout?
238
283
  true
239
284
  end
240
285
 
@@ -12,6 +12,5 @@ describe Capybara::Driver::Envjs do
12
12
  it_should_behave_like "driver"
13
13
  it_should_behave_like "driver with javascript support"
14
14
  it_should_behave_like "driver with header support"
15
- it_should_behave_like "driver with node path support"
16
15
 
17
16
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-envjs
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ prerelease: false
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
8
  - 0
9
- - pre2
10
- version: 0.1.0.pre2
9
+ version: 0.1.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Steven Parkes
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-02-25 00:00:00 -08:00
17
+ date: 2010-03-29 00:00:00 -07:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -28,8 +27,8 @@ dependencies:
28
27
  segments:
29
28
  - 0
30
29
  - 3
31
- - 0
32
- version: 0.3.0
30
+ - 6
31
+ version: 0.3.6
33
32
  type: :runtime
34
33
  version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
@@ -41,9 +40,9 @@ dependencies:
41
40
  - !ruby/object:Gem::Version
42
41
  segments:
43
42
  - 0
44
- - 1
45
- - 6
46
- version: 0.1.6
43
+ - 3
44
+ - 0
45
+ version: 0.3.0
47
46
  type: :runtime
48
47
  version_requirements: *id002
49
48
  - !ruby/object:Gem::Dependency
@@ -134,13 +133,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
133
  version: "0"
135
134
  required_rubygems_version: !ruby/object:Gem::Requirement
136
135
  requirements:
137
- - - ">"
136
+ - - ">="
138
137
  - !ruby/object:Gem::Version
139
138
  segments:
140
- - 1
141
- - 3
142
- - 1
143
- version: 1.3.1
139
+ - 0
140
+ version: "0"
144
141
  requirements: []
145
142
 
146
143
  rubyforge_project: capybara-envjs