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 +5 -0
- data/Rakefile +3 -3
- data/lib/capybara/driver/envjs_driver.rb +101 -56
- data/spec/driver/envjs_driver_spec.rb +0 -1
- metadata +11 -14
data/CHANGELOG.rdoc
CHANGED
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
|
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.
|
19
|
-
['envjs', '>= 0.
|
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
|
-
|
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"
|
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
|
-
|
120
|
-
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
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
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
url
|
157
|
-
|
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
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
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
|
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
|
-
|
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
|
234
|
-
true
|
235
|
-
end
|
236
|
-
|
237
|
-
def has_shortcircuit_timeout
|
282
|
+
def has_shortcircuit_timeout?
|
238
283
|
true
|
239
284
|
end
|
240
285
|
|
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:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
|
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-
|
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
|
-
-
|
32
|
-
version: 0.3.
|
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
|
-
-
|
45
|
-
-
|
46
|
-
version: 0.
|
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
|
-
-
|
141
|
-
|
142
|
-
- 1
|
143
|
-
version: 1.3.1
|
139
|
+
- 0
|
140
|
+
version: "0"
|
144
141
|
requirements: []
|
145
142
|
|
146
143
|
rubyforge_project: capybara-envjs
|