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 +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
|