osaka 0.4.11 → 0.4.12

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c3111ee1c6b444321590382e2bca76f4341c674
4
- data.tar.gz: ab4b79b6eb693de745f8b0d13014301217aba48e
3
+ metadata.gz: b98f479a2e3a76f17e9727eacb616a4668126f06
4
+ data.tar.gz: 2cc8d297e7bc54fa57120ba557988582ffc27874
5
5
  SHA512:
6
- metadata.gz: 6925989beb9445a8356c78d08adef696fdf63a98e9f6193e8803b48cf5ca6993328e876812a3d0f77f8b1c96a0995a6868e56a6f2382dadde21fffcfdb10e35c
7
- data.tar.gz: 14554cb5bc06dbff9e95779a0f1651ce176582f0bbdc3c76b0765db757349239506311f09cc46835ef73a2b55155e71140ae9a7d643ac327127c70f2d3c40a4e
6
+ metadata.gz: f269e4e1d5fbf49387ffe48a7adfec8881f221e13b73800d550b9da99809af18bbc1e401f281ede9b9462588e97f21407acd2b0a4c81318e8815e0e9f27380be
7
+ data.tar.gz: f8ad1bf37387d5b294c7d86e39cd7aaf2e7fc104743abb1eb6c994d5a76d245a25228cfdabe4744b8c11f4436187161b67baa2f052da5e1a5750a4e6b513c641
@@ -195,6 +195,7 @@ module Osaka
195
195
  end
196
196
 
197
197
  def get!(element, location = "")
198
+ debug_print "Getting attribute '#{element}' of: #{construct_prefixed_location(location)}"
198
199
  system_event!("get #{element}#{construct_prefixed_location(location)}").strip
199
200
  end
200
201
 
@@ -223,7 +224,7 @@ module Osaka
223
224
 
224
225
  def standard_window_list
225
226
  window_list.collect { |window|
226
- if get!("subrole", at.window(window)) == "AXStandardWindow"
227
+ if exists?(at.window(window)) && get!("subrole", at.window(window)) == "AXStandardWindow"
227
228
  window
228
229
  end
229
230
  }.compact
data/lib/osaka/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Osaka
3
- VERSION = "0.4.11"
3
+ VERSION = "0.4.12"
4
4
  end
@@ -13,7 +13,7 @@ describe "Osaka::RemoteControl" do
13
13
  before (:each) do
14
14
  Osaka::ScriptRunner.enable_debug_prints
15
15
  end
16
-
16
+
17
17
  after (:each) do
18
18
  Osaka::ScriptRunner.disable_debug_prints
19
19
  end
@@ -22,19 +22,19 @@ describe "Osaka::RemoteControl" do
22
22
  expect_execute_osascript.and_return("An Error")
23
23
  expect(subject).to receive(:puts).with(/#{action}/)
24
24
  end
25
-
25
+
26
26
  it "Should be able to print warning messages" do
27
27
  expect(subject).to receive(:puts).with("Osaka WARNING while doing ThisAction: Message")
28
28
  subject.print_warning("ThisAction", "Message")
29
29
  end
30
-
30
+
31
31
  context "Query things from the OS" do
32
32
 
33
33
  it "Should be possible to check whether an application is still running" do
34
34
  expect_execute_osascript("tell application \"System Events\"; (name of processes) contains \"#{name}\"; end tell").and_return("false")
35
35
  expect(subject.running?).to be false
36
36
  end
37
-
37
+
38
38
  it "Can get the OS version (lion)" do
39
39
  expect_execute_osascript("system version of (system info)").and_return("10.7.4\n")
40
40
  expect(subject.mac_version).to eq :lion
@@ -55,42 +55,42 @@ describe "Osaka::RemoteControl" do
55
55
  expect_execute_osascript("system version of (system info)").and_return("1\n")
56
56
  expect(subject.mac_version).to eq :other
57
57
  end
58
- end
58
+ end
59
59
 
60
60
  context "Able to compare different remote controls" do
61
-
61
+
62
62
  it "Should be able to clone controls" do
63
63
  subject.set_current_window "Window"
64
64
  new_control = subject.clone
65
65
  expect(new_control).to eq subject
66
- expect(new_control).not_to be subject
66
+ expect(new_control).not_to be subject
67
67
  end
68
-
68
+
69
69
  it "Should be having different current window instances when cloning" do
70
70
  subject.set_current_window "Window"
71
71
  new_control = subject.clone
72
72
  new_control.set_current_window "Not the same"
73
73
  expect(subject.current_window_name).not_to be new_control.current_window_name
74
-
74
+
75
75
  end
76
-
76
+
77
77
  it "Should be able to compare objects using names" do
78
78
  expect(subject).to eq Osaka::RemoteControl.new(name)
79
79
  expect(subject).not_to eq Osaka::RemoteControl.new("otherName")
80
80
  end
81
-
81
+
82
82
  it "Should be able to compare objects using window" do
83
83
  equal_object = Osaka::RemoteControl.new(name)
84
84
  unequal_object = Osaka::RemoteControl.new(name)
85
85
  equal_object.set_current_window("Window")
86
86
  subject.set_current_window("Window")
87
87
  unequal_object.set_current_window "Another Window"
88
-
88
+
89
89
  expect(subject).to eq equal_object
90
90
  expect(subject).not_to eq unequal_object
91
91
  end
92
92
  end
93
-
93
+
94
94
  context "Basic control functionality of telling and sending system events" do
95
95
 
96
96
  quoted_name = "\"#{name}\""
@@ -116,9 +116,9 @@ describe "Osaka::RemoteControl" do
116
116
  subject.system_event("quit")
117
117
  end
118
118
  end
119
-
119
+
120
120
  context "Check whether things exist or not" do
121
-
121
+
122
122
  it "Should be able to check whether a location exists" do
123
123
  expect_execute_osascript(/exists button 1/).and_return("true\n")
124
124
  expect(subject.exists?(at.button(1))).to be true
@@ -129,9 +129,9 @@ describe "Osaka::RemoteControl" do
129
129
  expect(subject.not_exists?(at.window(1))).to be true
130
130
  end
131
131
  end
132
-
132
+
133
133
  context "Waiting and doing until elements exist or not" do
134
-
134
+
135
135
  it "Should be able to wait for only one location to exist" do
136
136
  expect_exists?(at.button(1)).and_return(false, false, true)
137
137
  expect(subject.wait_until_exists!(at.button(1))).to eq at.button(1)
@@ -142,7 +142,7 @@ describe "Osaka::RemoteControl" do
142
142
  expect_exists?(at.button(1)).and_return(false, false, true)
143
143
  expect(subject.wait_until_exists(at.button(1))).to eq at.button(1)
144
144
  end
145
-
145
+
146
146
  it "Should be able to wait until multiple locations exists and return the one that happened" do
147
147
  expect_exists?(at.button(1)).and_return(false, false, false)
148
148
  expect_exists?(at.sheet(5)).and_return(false, false, true)
@@ -155,29 +155,29 @@ describe "Osaka::RemoteControl" do
155
155
  expect_exists?(at.sheet(5)).and_return(false, true)
156
156
  expect(subject.wait_until_exists(at.button(1), at.sheet(5))).to eq at.sheet(5)
157
157
  end
158
-
158
+
159
159
  it "Should be able to wait for one location to NOT exist" do
160
160
  expect_not_exists?(at.button(1)).and_return(false, false, true)
161
- expect(subject.wait_until_not_exists!(at.button(1))).to eq at.button(1)
161
+ expect(subject.wait_until_not_exists!(at.button(1))).to eq at.button(1)
162
162
  end
163
163
 
164
164
  it "Should be able to wait for one location to NOT exist (with activate)" do
165
165
  expect_activate
166
166
  expect_not_exists?(at.button(4)).and_return(false, true)
167
- expect(subject.wait_until_not_exists(at.button(4))).to eq at.button(4)
167
+ expect(subject.wait_until_not_exists(at.button(4))).to eq at.button(4)
168
168
  end
169
-
169
+
170
170
  it "Should be able to loop over some script until something happens" do
171
171
  expect(Timeout).to receive(:timeout).with(10).and_yield
172
172
  expect_execute_osascript.and_return("false", "false", "true")
173
173
  expect_activate.twice
174
-
175
-
174
+
175
+
176
176
  subject.until_exists!(at.window(1)) {
177
177
  subject.activate
178
178
  }
179
179
  end
180
-
180
+
181
181
  it "Should print a proper error message when it times out while waiting for something" do
182
182
  expect(Timeout).to receive(:timeout).with(10).and_raise(Timeout::Error.new)
183
183
  expect { subject.until_exists!(at.window(1)) }.to raise_error(Osaka::TimeoutError, "Timed out while waiting for: window 1")
@@ -200,17 +200,17 @@ describe "Osaka::RemoteControl" do
200
200
  expect_execute_and_warning_for("activate")
201
201
  subject.activate
202
202
  end
203
-
203
+
204
204
  it "Should be able to launch and deal with the warning" do
205
205
  expect_execute_and_warning_for("launch")
206
- subject.launch
206
+ subject.launch
207
207
  end
208
208
  end
209
-
210
-
209
+
210
+
211
211
 
212
212
  context "Can send keystrokes to the application" do
213
-
213
+
214
214
  it "Should be able to generate keystroke events" do
215
215
  expect_execute_osascript(/keystroke "p"/).and_return("")
216
216
  subject.keystroke!("p")
@@ -230,17 +230,17 @@ describe "Osaka::RemoteControl" do
230
230
  expect_activate
231
231
  expect_focus
232
232
  expect_keystroke!("a")
233
- subject.keystroke("a")
233
+ subject.keystroke("a")
234
234
  end
235
235
 
236
236
  it "Should be able to do keystrokes with command down" do
237
237
  expect_execute_osascript(/keystroke "p" using {command down}/).and_return("")
238
- subject.keystroke!("p", :command)
238
+ subject.keystroke!("p", :command)
239
239
  end
240
240
 
241
241
  it "Should be able to do keystrokes with option and command down" do
242
242
  expect_execute_osascript(/keystroke "p" using {option down, command down}/).and_return("")
243
- subject.keystroke!("p", [ :option, :command ])
243
+ subject.keystroke!("p", [ :option, :command ])
244
244
  end
245
245
 
246
246
  it "Should be able to do a keystroke and wait until something happen in one easy line" do
@@ -254,11 +254,11 @@ describe "Osaka::RemoteControl" do
254
254
  expect_focus
255
255
  expect_execute_osascript(/keystroke "p"/).and_return("")
256
256
  expect_execute_osascript(/exists window 1/).and_return("true")
257
- subject.keystroke("p").wait_until_exists!(at.window(1))
257
+ subject.keystroke("p").wait_until_exists!(at.window(1))
258
258
  end
259
-
259
+
260
260
  end
261
-
261
+
262
262
  context "Can send mouse clicks to the application" do
263
263
 
264
264
  it "Should be able to do clicks" do
@@ -269,7 +269,7 @@ describe "Osaka::RemoteControl" do
269
269
  it "Should be able to do click and activate" do
270
270
  expect_activate
271
271
  expect_click!("button")
272
- subject.click("button")
272
+ subject.click("button")
273
273
  end
274
274
 
275
275
  it "Should be able to do clicks and wait until something happened in one easy line" do
@@ -288,18 +288,18 @@ describe "Osaka::RemoteControl" do
288
288
  it "Should be able to click on menu bar items" do
289
289
  expect_activate
290
290
  expect_click!(at.menu_item("Hey").menu(1).menu_bar_item("File").menu_bar(1))
291
- subject.click_menu_bar(at.menu_item("Hey"), "File")
291
+ subject.click_menu_bar(at.menu_item("Hey"), "File")
292
292
  end
293
-
293
+
294
294
  end
295
-
295
+
296
296
  context "Control should be able to set and get different application values" do
297
-
297
+
298
298
  it "Should be able to set a value to an element" do
299
299
  expect_system_event!(/set value of window 1 to "newvalue"/).and_return("")
300
300
  subject.set!("value", at.window(1), "newvalue")
301
301
  end
302
-
302
+
303
303
  it "Prints a warning when setting and element and output is received" do
304
304
  expect_execute_and_warning_for("set")
305
305
  subject.set!("value", at.window(1), "newvalue")
@@ -307,7 +307,7 @@ describe "Osaka::RemoteControl" do
307
307
 
308
308
  it "Should be able to set to boolean values" do
309
309
  expect_system_event!(/set value of window 1 to true/).and_return("")
310
- subject.set!("value", at.window(1), true)
310
+ subject.set!("value", at.window(1), true)
311
311
  end
312
312
 
313
313
  it "Should be able to get a value from an element" do
@@ -324,7 +324,7 @@ describe "Osaka::RemoteControl" do
324
324
  it "Should combine the location and the window" do
325
325
  subject.set_current_window("1")
326
326
  expect_system_event!(/get value of dialog 2 of window "1"/).and_return("1\n")
327
- expect(subject.get!("value", at.dialog(2))).to eq "1"
327
+ expect(subject.get!("value", at.dialog(2))).to eq "1"
328
328
  end
329
329
 
330
330
  it "Should be able to get values from the application itself" do
@@ -345,27 +345,30 @@ describe "Osaka::RemoteControl" do
345
345
 
346
346
  it "Should be able get an array with one window name when there is exactly one window" do
347
347
  expect_get_app!("windows").and_return("window one of application process process\n")
348
- expect(subject.window_list).to eq ["one"]
348
+ expect(subject.window_list).to eq ["one"]
349
349
  end
350
-
350
+
351
351
  it "Should be able to get a list of standard windows which is empty" do
352
352
  expect(subject).to receive(:window_list).and_return([])
353
353
  subject.standard_window_list
354
354
  end
355
-
355
+
356
356
  it "Should be able to get a list of all the standard windows when there are only standard windows " do
357
357
  expect(subject).to receive(:window_list).and_return(["window 1"])
358
+ expect_exists?(at.window("window 1")).and_return(true)
358
359
  expect_get!("subrole", at.window("window 1")).and_return("AXStandardWindow")
359
360
  expect(subject.standard_window_list).to eq ["window 1"]
360
361
  end
361
-
362
+
362
363
  it "Should be able to get a list of all the standard windows excluding the floating ones" do
363
364
  expect(subject).to receive(:window_list).and_return(["window", "float"])
365
+ expect_exists?(at.window("window")).and_return(true)
366
+ expect_exists?(at.window("float")).and_return(true)
364
367
  expect_get!("subrole", at.window("window")).and_return("AXStandardWindow")
365
368
  expect_get!("subrole", at.window("float")).and_return("AXFloatingWindow")
366
- expect(subject.standard_window_list).to eq ["window"]
369
+ expect(subject.standard_window_list).to eq ["window"]
367
370
  end
368
-
371
+
369
372
  it "Should be able to get the attributes of a window and parse the result" do
370
373
  expect_get!("attributes", at.window(1)).and_return("attribute AXRole of window 1 of application process ApplicationName, attribute AXRoleDescription of window 1 of application process ApplicationName, attribute AXSubrole of window 1 of application process ApplicationName")
371
374
  expect(subject.attributes(at.window(1))).to eq ["AXRole", "AXRoleDescription", "AXSubrole"]
@@ -375,7 +378,7 @@ describe "Osaka::RemoteControl" do
375
378
  expect_get!("attributes", at.window(1)).and_return("attribute AXRole of application process ApplicationName, attribute AXRoleDescription of application process ApplicationName")
376
379
  expect(subject.attributes(at.window(1))).to eq ["AXRole", "AXRoleDescription"]
377
380
  end
378
-
381
+
379
382
  end
380
383
 
381
384
  describe "Dealing with base locations and window lists" do
@@ -387,44 +390,44 @@ describe "Osaka::RemoteControl" do
387
390
 
388
391
  it "Should be able to get an array of multiple window names" do
389
392
  expect_get_app!("windows").and_return("window one of application process process, window two of application process process\n")
390
- expect(subject.window_list).to eq ["one", "two"]
393
+ expect(subject.window_list).to eq ["one", "two"]
391
394
  end
392
-
395
+
393
396
  it "Should be able to focus the currently active window" do
394
397
  subject.base_location = at.sheet(1).window("boo")
395
398
  expect_system_event!("set value of attribute \"AXMain\" of window \"boo\" to true")
396
399
  subject.focus!
397
400
  end
398
-
399
- it "Should initialize the current window when it is not focused yet" do
401
+
402
+ it "Should initialize the current window when it is not focused yet" do
400
403
  expect_window_list.and_return(["1"])
401
404
  expect_focus!
402
405
  subject.focus
403
406
  expect(subject.current_window_name).to eq "1"
404
407
  end
405
-
408
+
406
409
  it "Should be able to extract the current window name also when the base location has more than just a window " do
407
410
  subject.base_location = at.sheet(1).window("Window")
408
- expect(subject.current_window_name).to eq "Window"
411
+ expect(subject.current_window_name).to eq "Window"
409
412
  end
410
413
 
411
414
  it "Shouldn't initialize current window when it is already set" do
412
415
  subject.set_current_window("1")
413
416
  expect_not_exists?(at.window("1")).and_return(false)
414
417
  expect_focus!
415
-
418
+
416
419
  subject.focus
417
420
  expect(subject.base_location).to eq at.window("1")
418
421
  end
419
-
422
+
420
423
  it "Should re-initialize the current window when it doesn't exist anymore" do
421
424
  subject.set_current_window("1")
422
425
  expect_not_exists?(at.window("1")).and_return(true)
423
426
  expect_window_list.and_return(["2"])
424
427
  expect_focus!
425
-
428
+
426
429
  subject.focus
427
- expect(subject.current_window_name).to eq "2"
430
+ expect(subject.current_window_name).to eq "2"
428
431
  end
429
432
 
430
433
  it "Should focus the current window when it doesn't have focus" do
@@ -433,11 +436,11 @@ describe "Osaka::RemoteControl" do
433
436
  expect_focus!
434
437
  subject.focus
435
438
  end
436
-
439
+
437
440
  it "Shouldn't focus when there is no window set at all" do
438
441
  expect_window_list.and_return([""])
439
442
  subject.focus
440
443
  end
441
-
442
- end
444
+
445
+ end
443
446
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: osaka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.11
4
+ version: 0.4.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bas Vodde
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-21 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake