isomorfeus-puppetmaster 0.3.1 → 0.4.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.
@@ -14,18 +14,27 @@ module Isomorfeus
14
14
  def call(env)
15
15
  if env['PATH_INFO'] == '/__executor__' && env['REQUEST_METHOD'] == 'POST'
16
16
  request = Rack::Request.new(env)
17
+ response = nil
17
18
  unless request.body.nil?
18
- request_hash = Oj.load(request.body.read, {})
19
+ request_hash = Oj.load(request.body.read, mode: :strict)
19
20
  if request_hash['key'] != @@request_key
20
- Rack::Response.new(Oj.dump({ 'error' => 'wrong key given, execution denied' }, {}), 401, 'Content-Type' => 'application/json').finish
21
+ response = Rack::Response.new(Oj.dump({ 'error' => 'wrong key given, execution denied' }),
22
+ 401,
23
+ 'Content-Type' => 'application/json')
24
+ else
25
+ begin
26
+ result = TOPLEVEL_BINDING.eval('self').instance_eval(request_hash['code']) if request_hash['code']
27
+ response = Rack::Response.new(Oj.dump({ 'result' => result }),
28
+ 200,
29
+ 'Content-Type' => 'application/json')
30
+ rescue Exception => e
31
+ response = Rack::Response.new(Oj.dump({ 'error' => "#{e.class}: #{e.message}", 'backtrace' => e.backtrace.join("\n") }),
32
+ 200,
33
+ 'Content-Type' => 'application/json')
34
+ end
21
35
  end
22
- begin
23
- result = Object.instance_eval(request_hash['code']) if request_hash['code']
24
- rescue Exception => e
25
- Rack::Response.new(Oj.dump({ 'error' => "#{e.class}: #{e.message}" }, {}), 200, 'Content-Type' => 'application/json').finish
26
- end
27
- Rack::Response.new(Oj.dump({ 'result' => result }, {}), 200, 'Content-Type' => 'application/json').finish
28
36
  end
37
+ response.finish
29
38
  else
30
39
  @app.call(env)
31
40
  end
@@ -1,3 +1,3 @@
1
1
  module Isomorfeus
2
- PUPPETMASTER_VERSION = '0.3.1'
2
+ PUPPETMASTER_VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-puppetmaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2021-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.11
33
+ version: 0.3.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.11
40
+ version: 0.3.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: method_source
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: oj
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 3.11.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 3.11.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: opal
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: unparser
112
+ name: tty-which
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,19 +123,19 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: agoo
126
+ name: unparser
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - "~>"
129
+ - - ">="
116
130
  - !ruby/object:Gem::Version
117
- version: 2.11.3
118
- type: :development
131
+ version: '0'
132
+ type: :runtime
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - "~>"
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: 2.11.3
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: chunky_png
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: 0.30.0
159
+ version: 0.38.0
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: 0.30.0
166
+ version: 0.38.0
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: fastimage
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -164,20 +178,6 @@ dependencies:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: iodine
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: 0.7.36
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 0.7.36
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: irb
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -198,28 +198,28 @@ dependencies:
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '2.0'
201
+ version: '2.5'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '2.0'
208
+ version: '2.5'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: nokogiri
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: 1.10.1
215
+ version: 1.11.0
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: 1.10.1
222
+ version: 1.11.0
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: os
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -240,28 +240,28 @@ dependencies:
240
240
  requirements:
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
- version: 1.3.3
243
+ version: 2.4.0
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - ">="
249
249
  - !ruby/object:Gem::Version
250
- version: 1.3.3
250
+ version: 2.4.0
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: puma
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
255
  - - "~>"
256
256
  - !ruby/object:Gem::Version
257
- version: 4.2.1
257
+ version: 5.3.0
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
262
  - - "~>"
263
263
  - !ruby/object:Gem::Version
264
- version: 4.2.1
264
+ version: 5.3.0
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: rake
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -296,14 +296,14 @@ dependencies:
296
296
  requirements:
297
297
  - - "~>"
298
298
  - !ruby/object:Gem::Version
299
- version: '2.0'
299
+ version: 2.1.0
300
300
  type: :development
301
301
  prerelease: false
302
302
  version_requirements: !ruby/object:Gem::Requirement
303
303
  requirements:
304
304
  - - "~>"
305
305
  - !ruby/object:Gem::Version
306
- version: '2.0'
306
+ version: 2.1.0
307
307
  description: Acceptance testing for isomorfeus.
308
308
  email: jan@kursator.de
309
309
  executables: []
@@ -317,9 +317,6 @@ files:
317
317
  - lib/isomorfeus/puppetmaster/console_message.rb
318
318
  - lib/isomorfeus/puppetmaster/cookie.rb
319
319
  - lib/isomorfeus/puppetmaster/document.rb
320
- - lib/isomorfeus/puppetmaster/driver/jsdom.rb
321
- - lib/isomorfeus/puppetmaster/driver/jsdom_document.rb
322
- - lib/isomorfeus/puppetmaster/driver/jsdom_node.rb
323
320
  - lib/isomorfeus/puppetmaster/driver/puppeteer.rb
324
321
  - lib/isomorfeus/puppetmaster/driver/puppeteer_document.rb
325
322
  - lib/isomorfeus/puppetmaster/driver/puppeteer_node.rb
@@ -361,7 +358,7 @@ licenses:
361
358
  - MIT
362
359
  metadata:
363
360
  github_repo: ssh://github.com/isomorfeus/gems
364
- post_install_message:
361
+ post_install_message:
365
362
  rdoc_options: []
366
363
  require_paths:
367
364
  - lib
@@ -376,8 +373,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
373
  - !ruby/object:Gem::Version
377
374
  version: '0'
378
375
  requirements: []
379
- rubygems_version: 3.0.6
380
- signing_key:
376
+ rubygems_version: 3.2.15
377
+ signing_key:
381
378
  specification_version: 4
382
379
  summary: Acceptance testing for isomorfeus.
383
380
  test_files: []
@@ -1,373 +0,0 @@
1
- module Isomorfeus
2
- module Puppetmaster
3
- module Driver
4
- class Jsdom
5
- include Isomorfeus::Puppetmaster::Driver::JsdomDocument
6
- include Isomorfeus::Puppetmaster::Driver::JsdomNode
7
-
8
- VIEWPORT_DEFAULT_WIDTH = 1024
9
- VIEWPORT_DEFAULT_HEIGHT = 768
10
- VIEWPORT_MAX_WIDTH = 1366
11
- VIEWPORT_MAX_HEIGHT = 768
12
- TIMEOUT = 30 # seconds
13
- REACTION_TIMEOUT = 0.5
14
- EVENTS = {
15
- blur: ['FocusEvent', {}],
16
- focus: ['FocusEvent', {}],
17
- focusin: ['FocusEvent', { bubbles: true }],
18
- focusout: ['FocusEvent', { bubbles: true }],
19
- click: ['MouseEvent', { bubbles: true, cancelable: true }],
20
- dblckick: ['MouseEvent', { bubbles: true, cancelable: true }],
21
- mousedown: ['MouseEvent', { bubbles: true, cancelable: true }],
22
- mouseup: ['MouseEvent', { bubbles: true, cancelable: true }],
23
- mouseenter: ['MouseEvent', {}],
24
- mouseleave: ['MouseEvent', {}],
25
- mousemove: ['MouseEvent', { bubbles: true, cancelable: true }],
26
- mouseover: ['MouseEvent', { bubbles: true, cancelable: true }],
27
- mouseout: ['MouseEvent', { bubbles: true, cancelable: true }],
28
- context_menu: ['MouseEvent', { bubble: true, cancelable: true }],
29
- submit: ['Event', { bubbles: true, cancelable: true }],
30
- change: ['Event', { bubbles: true, cacnelable: false }],
31
- input: ['InputEvent', { bubbles: true, cacnelable: false }],
32
- wheel: ['WheelEvent', { bubbles: true, cancelable: true }]
33
- }.freeze
34
-
35
- attr_accessor :default_document
36
-
37
- def initialize(options = {})
38
- @app = options.delete(:app)
39
- @options = options.dup
40
- @canvas = @options.delete(:canvas) { false }
41
- @ignore_https_errors = !!@options.delete(:ignore_https_errors)
42
- @max_width = @options.delete(:max_width) { VIEWPORT_MAX_WIDTH }
43
- @max_height = @options.delete(:max_height) { VIEWPORT_MAX_HEIGHT }
44
- @width = @options.delete(:width) { VIEWPORT_DEFAULT_WIDTH > @max_width ? @max_width : VIEWPORT_DEFAULT_WIDTH }
45
- @height = @options.delete(:height) { VIEWPORT_DEFAULT_HEIGHT > @max_height ? @max_height : VIEWPORT_DEFAULT_HEIGHT }
46
- @timeout = @options.delete(:timeout) { TIMEOUT }
47
- @max_wait = @options.delete(:max_wait) { @timeout + 1 }
48
- @reaction_timeout = @options.delete(:reaction_timeout) { REACTION_TIMEOUT }
49
- @jsdom_timeout = @timeout * 1000
50
- @jsdom_reaction_timeout = @reaction_timeout * 1000
51
- @url_blacklist = @options.delete(:url_blacklist) { [] }
52
- @context = ExecJS.permissive_compile(jsdom_launch)
53
- page_handle, @browser = await_result
54
- @default_document = Isomorfeus::Puppetmaster::Document.new(self, page_handle, Isomorfeus::Puppetmaster::Response.new('status' => 200))
55
- end
56
-
57
- def self.document_handle_disposer(driver, handle)
58
- cjs = <<~JAVASCRIPT
59
- delete AllDomHandles[#{handle}];
60
- delete ConsoleMessages[#{handle}];
61
- JAVASCRIPT
62
- proc { driver.execute_script(cjs) }
63
- end
64
-
65
- def self.node_handle_disposer(driver, handle)
66
- cjs = <<~JAVASCRIPT
67
- if (AllElementHandles[#{handle}]) { AllElementHandles[#{handle}].dispose(); }
68
- delete AllElementHandles[#{handle}];
69
- JAVASCRIPT
70
- proc { driver.execute_script(cjs) }
71
- end
72
-
73
- def browser
74
- @browser
75
- end
76
-
77
- def document_handles
78
- @context.eval 'Object.keys(AllDomHandles)'
79
- end
80
-
81
- ##### frame, all todo
82
-
83
- def frame_all_text(frame)
84
- await <<~JAVASCRIPT
85
- LastResult = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
86
- return frame.contentDocument.documentElement.textContent;
87
- }, AllElementHandles[#{frame.handle}]);
88
- JAVASCRIPT
89
- end
90
-
91
- def frame_body(frame)
92
- node_data = await <<~JAVASCRIPT
93
- var tt = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
94
- node = frame.contentDocument.body;
95
- var name = node.nodeName;
96
- var tag = node.tagName.toLowerCase();
97
- var type = null;
98
- if (tag === 'input') { type = node.getAttribute('type'); }
99
- return [name, tag, type];
100
- }, AllElementHandles[#{frame.handle}]);
101
- LastResult = {handle: node_handle, name: tt[0], tag: tt[1], type: tt[2]};
102
- JAVASCRIPT
103
- if node_data
104
- node_data[:css_selector] = 'body'
105
- Isomorfeus::Puppetmaster::Node.new_by_tag(self, document, node_data)
106
- end
107
- end
108
-
109
- def frame_focus(frame)
110
- await <<~JAVASCRIPT
111
- await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
112
- frame.contentDocument.documentElement.focus();
113
- }, AllElementHandles[#{frame.handle}]);
114
- JAVASCRIPT
115
- end
116
-
117
- def frame_head(frame)
118
- node_data = await <<~JAVASCRIPT
119
- var tt = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
120
- node = frame.contentDocument.head;
121
- var name = node.nodeName;
122
- var tag = node.tagName.toLowerCase();
123
- var type = null;
124
- if (tag === 'input') { type = node.getAttribute('type'); }
125
- return [name, tag, type];
126
- }, AllElementHandles[#{frame.handle}]);
127
- LastResult = {handle: node_handle, name: tt[0], tag: tt[1], type: tt[2]};
128
- JAVASCRIPT
129
- if node_data
130
- node_data[:css_selector] = 'body'
131
- Isomorfeus::Puppetmaster::Node.new_by_tag(self, document, node_data)
132
- end
133
- end
134
-
135
- def frame_html(frame)
136
- await <<~JAVASCRIPT
137
- LastResult = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
138
- return frame.contentDocument.documentElement.outerHTML;
139
- }, AllElementHandles[#{frame.handle}]);
140
- JAVASCRIPT
141
- end
142
-
143
- def frame_title(frame)
144
- await <<~JAVASCRIPT
145
- LastResult = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
146
- return frame.contentDocument.title;
147
- }, AllElementHandles[#{frame.handle}]);
148
- JAVASCRIPT
149
- end
150
-
151
- def frame_url(frame)
152
- await <<~JAVASCRIPT
153
- LastResult = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
154
- return frame.contentDocument.location.href;
155
- }, AllElementHandles[#{frame.handle}]);
156
- JAVASCRIPT
157
- end
158
-
159
- def frame_visible_text(frame)
160
- # if node is AREA, check visibility of relevant image
161
- text = await <<~JAVASCRIPT
162
- LastResult = await AllElementHandles[#{frame.handle}].executionContext().evaluate((frame) => {
163
- var node = frame.contentDocument.body;
164
- var temp_node = node;
165
- while (temp_node) {
166
- style = window.getComputedStyle(node);
167
- if (style.display === "none" || style.visibility === "hidden" || parseFloat(style.opacity) === 0) { return ''; }
168
- temp_node = temp_node.parentElement;
169
- }
170
- if (node.nodeName == "TEXTAREA" || node instanceof SVGElement) { return node.textContent; }
171
- else { return node.innerText; }
172
- }, AllElementHandles[#{frame.handle}]);
173
- JAVASCRIPT
174
- text.gsub(/\A[[:space:]&&[^\u00a0]]+/, "").gsub(/[[:space:]&&[^\u00a0]]+\z/, "").gsub(/\n+/, "\n").tr("\u00a0", " ")
175
- end
176
-
177
- private
178
-
179
- def need_alt?(modifiers)
180
- (modifiers & %i[alt alt_left alt_right]).size > 0
181
- end
182
-
183
- def need_control?(modifiers)
184
- (modifiers & %i[control control_left control_rigth]).size > 0
185
- end
186
-
187
- def need_meta?(modifiers)
188
- (modifiers & %i[meta meta_left meta_right]).size > 0
189
- end
190
-
191
- def need_shift?(modifiers)
192
- (modifiers & %i[shift shift_left shift_right]).size > 0
193
- end
194
-
195
- def await(script)
196
- @context.eval <<~JAVASCRIPT
197
- (async () => {
198
- try {
199
- LastExecutionFinished = false;
200
- LastResult = null;
201
- LastErr = null;
202
- #{script}
203
- LastExecutionFinished = true;
204
- } catch(err) {
205
- LastResult = null;
206
- LastErr = err;
207
- LastExecutionFinished = true;
208
- }
209
- })()
210
- JAVASCRIPT
211
- await_result
212
- end
213
-
214
- def await_result
215
- start_time = Time.now
216
- while !execution_finished? && !timed_out?(start_time)
217
- sleep 0.01
218
- end
219
- get_result
220
- end
221
-
222
- def determine_error(message)
223
- if message.include?('Error: certificate has expired')
224
- Isomorfeus::Puppetmaster::CertificateError.new(message) unless @ignore_https_errors
225
- elsif message.include?('Error: getaddrinfo')
226
- Isomorfeus::Puppetmaster::DNSError.new(message)
227
- elsif message.include?('Unknown key: ')
228
- Isomorfeus::Puppetmaster::KeyError.new(message)
229
- elsif message.include?('Execution context was destroyed, most likely because of a navigation.')
230
- Isomorfeus::Puppetmaster::ExecutionContextError.new(message)
231
- elsif message.include?('Unable to find ')
232
- Isomorfeus::Puppetmaster::ElementNotFound.new(message)
233
- elsif (message.include?('SyntaxError:') && (message.include?('unknown pseudo-class selector') || message.include?('is not a valid selector'))) || message.include?('invalid xpath query')
234
- Isomorfeus::Puppetmaster::DOMException.new(message)
235
- else
236
- Isomorfeus::Puppetmaster::JavaScriptError.new(message)
237
- end
238
- end
239
-
240
- def execution_finished?
241
- @context.eval 'LastExecutionFinished'
242
- end
243
-
244
- def get_result
245
- res, err_msg = @context.eval 'GetLastResult()'
246
- raise determine_error(err_msg) if err_msg
247
- res
248
- end
249
-
250
- def jsdom_launch
251
- <<~JAVASCRIPT
252
- #{"const canvas = require('canvas');" if @canvas}
253
- const jsdom = require('jsdom');
254
- const Cookie = jsdom.toughCookie.Cookie;
255
- const MemoryCookieStore = jsdom.toughCookie.MemoryCookieStore;
256
- const { JSDOM } = jsdom;
257
-
258
- const JSDOMOptions = {pretendToBeVisual: true, resources: 'usable', runScripts: 'dangerously'};
259
-
260
- var LastResponse = null;
261
- var LastResult = null;
262
- var LastErr = null;
263
- var LastExecutionFinished = false;
264
- var LastHandleId = 0;
265
-
266
- var AllDomHandles = {};
267
- var AllElementHandles = {};
268
- var AllConsoleHandles = {};
269
- var ConsoleMessages = {};
270
-
271
- var ModalText = null;
272
- var ModalTextMatched = false;
273
-
274
- const GetLastResult = function() {
275
- if (LastExecutionFinished === true) {
276
- var err = LastErr;
277
- var res = LastResult;
278
-
279
- LastErr = null;
280
- LastRes = null;
281
- LastExecutionFinished = false;
282
-
283
- if (err) { return [null, err.toString() + "\\n" + err.stack]; }
284
- else { return [res, null]; }
285
-
286
- } else {
287
- return [null, (new Error('Last command did not yet finish execution!')).message];
288
- }
289
- };
290
-
291
- const DialogAcceptHandler = async (dialog) => {
292
- var msg = dialog.message()
293
- ModalTextMatched = (ModalText === msg);
294
- ModalText = msg;
295
- await dialog.accept();
296
- }
297
-
298
- const DialogDismissHandler = async (dialog) => {
299
- var msg = dialog.message()
300
- ModalTextMatched = (ModalText === msg);
301
- ModalText = msg;
302
- await dialog.dismiss();
303
- }
304
-
305
- const RegisterElementHandle = function(element_handle) {
306
- var entries = Object.entries(AllElementHandles);
307
- for(var i = 0; i < entries.length; i++) {
308
- if (entries[i][1] === element_handle) { return entries[i][0]; }
309
- }
310
- LastHandleId++;
311
- AllElementHandles[LastHandleId] = element_handle;
312
- return LastHandleId;
313
- };
314
-
315
- const RegisterElementHandleArray = function(element_handle_array) {
316
- var registered_handles = [];
317
- element_handle_array.forEach(function(handle){
318
- registered_handles.push(RegisterElementHandle(handle));
319
- });
320
- return registered_handles;
321
- };
322
-
323
- const RegisterCon = function(con) {
324
- var entries = Object.entries(ConsoleMessages);
325
- for(var i = 0; i < entries.length; i++) {
326
- if (entries[i][1] === con) { return entries[i][0]; }
327
- }
328
- LastHandleId++;
329
- AllConsoleHandles[LastHandleId] = con;
330
- ConsoleMessages[LastHandleId] = [];
331
- return LastHandleId;
332
- };
333
- const RegisterDom = function(dom, handle_id) {
334
- var entries = Object.entries(AllDomHandles);
335
- for(var i = 0; i < entries.length; i++) {
336
- if (entries[i][1] === dom) { return entries[i][0]; }
337
- }
338
- AllDomHandles[handle_id] = dom;
339
- return handle_id;
340
- };
341
-
342
- (async () => {
343
- try {
344
- var con = new jsdom.VirtualConsole();
345
- var jar = new jsdom.CookieJar(new MemoryCookieStore(), {rejectPublicSuffixes: false, looseMode: true});
346
- var handle_id = RegisterCon(con);
347
- con.on('error', (msg) => { ConsoleMessages[handle_id].push({level: 'error', location: '', text: msg}); });
348
- con.on('warn', (msg) => { ConsoleMessages[handle_id].push({level: 'warn', location: '', text: msg}); });
349
- con.on('info', (msg) => { ConsoleMessages[handle_id].push({level: 'info', location: '', text: msg}); });
350
- con.on('log', (msg) => { ConsoleMessages[handle_id].push({level: 'dir', location: '', text: msg}); });
351
- con.on('debug', (msg) => { ConsoleMessages[handle_id].push({level: 'dir', location: '', text: msg}); });
352
- var dom = new JSDOM('', Object.assign({}, JSDOMOptions, { virtualConsole: con }));
353
- var browser = dom.window.navigator.userAgent;
354
- LastResult = [RegisterDom(dom, handle_id), browser];
355
- LastExecutionFinished = true;
356
- } catch (err) {
357
- LastErr = err;
358
- LastExecutionFinished = true;
359
- }
360
- })();
361
- JAVASCRIPT
362
- end
363
-
364
- def timed_out?(start_time)
365
- if (Time.now - start_time) > @timeout
366
- raise "Command Execution timed out!"
367
- end
368
- false
369
- end
370
- end
371
- end
372
- end
373
- end