capybara-envjs 0.1.0.pre2 → 0.1.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.
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