AXElements 1.0.0.alpha5 → 1.0.0.alpha6

Sign up to get free protection for your applications and to get access to all the features.
@@ -159,7 +159,9 @@ module Accessibility::Element
159
159
  # @return [Array<AXUIElementRef>]
160
160
  def children
161
161
  STATS.increment :Children
162
- attribute KAXChildrenAttribute
162
+ ptr = Pointer.new :id
163
+ code = AXUIElementCopyAttributeValue(self, KAXChildrenAttribute, ptr)
164
+ code.zero? ? ptr.value.to_ruby : []
163
165
  end
164
166
 
165
167
  ##
@@ -738,7 +738,7 @@ module Accessibility::DSL
738
738
  # @param id [String]
739
739
  # @return [AX::Application,nil]
740
740
  def app_with_bundle_identifier id
741
- Accessibility.application_with_bundle_identifier id
741
+ AX::Application.new id
742
742
  end
743
743
  alias_method :app_with_bundle_id, :app_with_bundle_identifier
744
744
  alias_method :launch, :app_with_bundle_identifier
@@ -4,7 +4,7 @@
4
4
  # The main AXElements namespace.
5
5
  module Accessibility
6
6
  # @return [String]
7
- VERSION = '1.0.0.alpha5'
7
+ VERSION = '1.0.0.alpha6'
8
8
 
9
9
  # @return [String]
10
10
  CODE_NAME = 'ルナトーン'
@@ -198,6 +198,45 @@ class AX::Application < AX::Element
198
198
 
199
199
  # @group Actions
200
200
 
201
+ ##
202
+ # @note This is often async and may return before the action is completed
203
+ #
204
+ # Ask the app to quit
205
+ #
206
+ # @return [Boolean]
207
+ def terminate
208
+ perform :terminate
209
+ end
210
+
211
+ ##
212
+ # @note This is often async and may return before the action is completed
213
+ #
214
+ # Force the app to quit
215
+ #
216
+ # @return [Boolean]
217
+ def terminate!
218
+ perform :force_terminate
219
+ end
220
+
221
+ ##
222
+ # @note This is often async and may return before the action is completed
223
+ #
224
+ # Ask the app to hide itself
225
+ #
226
+ # @return [Boolean]
227
+ def hide
228
+ perform :hide
229
+ end
230
+
231
+ ##
232
+ # @note This is often async and may return before the action is completed
233
+ #
234
+ # As the app to unhide itself and bring to front
235
+ #
236
+ # @return [Boolean]
237
+ def unhide
238
+ perform :unhide
239
+ end
201
240
 
202
241
  # (see AX::Element#perform)
203
242
  def perform name
data/lib/ax/element.rb CHANGED
@@ -73,7 +73,7 @@ class AX::Element
73
73
  #
74
74
  # @return [Array<AX::Element>]
75
75
  def children
76
- attribute :children
76
+ @ref.children
77
77
  end
78
78
 
79
79
  ##
data/lib/mouse.rb CHANGED
@@ -172,6 +172,9 @@ module Mouse
172
172
  #
173
173
  # @param point [CGPoint]
174
174
  def double_click point = current_position
175
+ # some apps still expect to receive the single click event first
176
+ # and then the double click event
177
+ multi_click 1, point
175
178
  multi_click 2, point
176
179
  end
177
180
 
@@ -182,6 +185,9 @@ module Mouse
182
185
  #
183
186
  # @param point [CGPoint]
184
187
  def triple_click point = current_position
188
+ # some apps still expect to receive the single click event first
189
+ # and then the double and triple click events
190
+ double_click
185
191
  multi_click 3, point
186
192
  end
187
193
 
@@ -199,13 +199,9 @@ class TestAccessibilityDSL < MiniTest::Unit::TestCase
199
199
  app.main_window.set :position, orig_window_position if orig_window_position
200
200
  end
201
201
 
202
- def dummy_text
203
- 'Lorem ipsum dolor. Sit amet orci feugiat facilisis quis neque con quisque vestibulum condimentum nec velit laoreet eget. Dolor felis quis. Nulla mi urna ligula porta blandit tenetur et velit habitant rerum numquam. Erat ut eget.'
204
- end
205
-
206
202
  def test_triple_click
203
+ dummy_text = 'Lorem ipsum dolor.' * 15
207
204
  text_area.set :value, dummy_text
208
- dsl.click text_area
209
205
  dsl.triple_click text_area
210
206
  assert_equal dummy_text, text_area.selected_text
211
207
  ensure
@@ -13,6 +13,13 @@ class TestAXApplication < MiniTest::Unit::TestCase
13
13
  assert_equal app, AX::Application.new(running_app)
14
14
  end
15
15
 
16
+ def test_initialize_causing_app_to_launch
17
+ app = AX::Application.new('com.apple.Grab')
18
+ assert_kind_of AX::Application, app
19
+ ensure
20
+ app.terminate if app
21
+ end
22
+
16
23
  def test_can_set_focus_and_blur_app # lol, blur
17
24
  assert app.set :focused, false
18
25
  refute app.active?
@@ -24,6 +24,17 @@ class TestAXApplication < MiniTest::Unit::TestCase
24
24
  assert_match /\sfocused\[(?:✔|✘)\]/, app.inspect
25
25
  end
26
26
 
27
+ def tset_action_methods_forward_to_perform
28
+ def app.perform name
29
+ [:cracker_jacks, name]
30
+ end
31
+
32
+ assert_equal [:cracker_jacks, :terminate], app.terminate
33
+ assert_equal [:cracker_jacks, :force_terminate], app.terminate!
34
+ assert_equal [:cracker_jacks, :hide], app.hide
35
+ assert_equal [:cracker_jacks, :unhide], app.unhide
36
+ end
37
+
27
38
  def test_terminate
28
39
  got_called = false
29
40
  mock = Object.new
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: AXElements
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 6
5
- version: 1.0.0.alpha5
5
+ version: 1.0.0.alpha6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mark Rada