accessibility_core 0.1.2 → 0.3.1

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.
Files changed (42) hide show
  1. data/.yardopts +2 -0
  2. data/History.markdown +33 -0
  3. data/README.markdown +11 -0
  4. data/Rakefile +18 -49
  5. data/ext/accessibility/bridge/{ext/accessibility/bridge/bridge.c → bridge.c} +136 -56
  6. data/ext/accessibility/bridge/bridge.h +132 -0
  7. data/ext/accessibility/bridge/{ext/accessibility/bridge/extconf.rb → extconf.rb} +1 -1
  8. data/ext/accessibility/core/core.c +21 -3
  9. data/ext/accessibility/core/extconf.rb +7 -1
  10. data/ext/accessibility/extras/extconf.rb +28 -0
  11. data/ext/accessibility/extras/extras.c +842 -0
  12. data/ext/accessibility/extras/extras.h +1 -0
  13. data/ext/accessibility/highlighter/extconf.rb +9 -2
  14. data/ext/accessibility/highlighter/highlighter.c +291 -1
  15. data/{ext/accessibility/bridge/lib → lib}/accessibility/bridge.rb +3 -3
  16. data/{ext/accessibility/bridge/lib → lib}/accessibility/bridge/common.rb +0 -0
  17. data/{ext/accessibility/bridge/lib → lib}/accessibility/bridge/macruby.rb +17 -0
  18. data/{ext/accessibility/bridge/lib → lib}/accessibility/bridge/mri.rb +10 -7
  19. data/lib/accessibility/core.rb +1 -1
  20. data/lib/accessibility/core/macruby.rb +1 -1
  21. data/lib/accessibility/core/version.rb +1 -1
  22. data/lib/accessibility/extras.rb +5 -0
  23. data/lib/accessibility/extras/common.rb +19 -0
  24. data/lib/accessibility/highlighter.rb +8 -0
  25. data/lib/accessibility/highlighter/macruby.rb +85 -0
  26. data/test/helper.rb +18 -28
  27. metadata +33 -56
  28. data/ext/accessibility/bridge/lib/accessibility/bridge/version.rb +0 -6
  29. data/ext/accessibility/bridge/test/array_test.rb +0 -31
  30. data/ext/accessibility/bridge/test/boxed_test.rb +0 -23
  31. data/ext/accessibility/bridge/test/cfrange_test.rb +0 -21
  32. data/ext/accessibility/bridge/test/cgpoint_test.rb +0 -54
  33. data/ext/accessibility/bridge/test/cgrect_test.rb +0 -60
  34. data/ext/accessibility/bridge/test/cgsize_test.rb +0 -54
  35. data/ext/accessibility/bridge/test/helper.rb +0 -19
  36. data/ext/accessibility/bridge/test/nsstring_test.rb +0 -22
  37. data/ext/accessibility/bridge/test/nsurl_test.rb +0 -17
  38. data/ext/accessibility/bridge/test/object_test.rb +0 -19
  39. data/ext/accessibility/bridge/test/range_test.rb +0 -16
  40. data/ext/accessibility/bridge/test/string_test.rb +0 -35
  41. data/ext/accessibility/bridge/test/uri_test.rb +0 -15
  42. data/ext/accessibility/core/bridge.h +0 -1
@@ -0,0 +1,19 @@
1
+ class CGRect
2
+ ##
3
+ # Treats the rect as belonging to one co-ordinate system and then
4
+ # converts it to the other system
5
+ #
6
+ # This is useful because accessibility API's expect to work with
7
+ # the flipped co-ordinate system (origin in top left), but AppKit
8
+ # prefers to use the cartesian co-ordinate system (origin in bottom
9
+ # left).
10
+ #
11
+ # @return [CGRect]
12
+ def flip!
13
+ frame = ::NSScreen.screens.first.frame
14
+ screen_height = frame.origin.y + frame.size.height
15
+ self_max_y = self.origin.y + self.size.height
16
+ origin.y = screen_height - self_max_y
17
+ self
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ require 'accessibility/bridge'
2
+
3
+ if on_macruby?
4
+ require 'accessibility/highlighter/macruby'
5
+ else
6
+ require 'accessibility/highlighter/highlighter.bundle'
7
+ end
8
+
@@ -0,0 +1,85 @@
1
+ ##
2
+ # A screen highlighter for debugging
3
+ #
4
+ # When you initialize a highligter object it will highlight the given
5
+ # bounds on the screen.
6
+ #
7
+ # Highligter objects can have their colour configured at initialization,
8
+ # and can also have a timeout to automatically stop displaying.
9
+ #
10
+ # Options for setting up a highlighter are document in
11
+ # {Accessibility::Highlighter#initialize}.
12
+ #
13
+ # @example
14
+ #
15
+ # h = Accessibility::Highlighter.new [100,100,100,100]
16
+ # # when you are done...
17
+ # h.stop
18
+ #
19
+ class Accessibility::Highlighter < NSWindow
20
+
21
+ # @param bounds [CGRect]
22
+ # @param opts [Hash]
23
+ # @option opts [Number] :timeout
24
+ # @option opts [NSColor] :colour (NSColor.magentaColor)
25
+ def initialize bounds, opts = {}
26
+ color = opts[:colour] || opts[:color] || NSColor.magentaColor
27
+
28
+ bounds = bounds.to_rect
29
+ bounds.flip! # we assume the rect is in the other co-ordinate system
30
+
31
+ initWithContentRect bounds,
32
+ styleMask: NSBorderlessWindowMask,
33
+ backing: NSBackingStoreBuffered,
34
+ defer: true
35
+ setOpaque false
36
+ setAlphaValue 0.20
37
+ setLevel NSStatusWindowLevel
38
+ setBackgroundColor color
39
+ setIgnoresMouseEvents true
40
+ setFrame bounds, display: false
41
+ makeKeyAndOrderFront NSApp
42
+
43
+ if opts.has_key? :timeout
44
+ Dispatch::Queue.concurrent.after opts[:timeout] do
45
+ self.stop
46
+ end
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Tell the highlighter to stop displaying.
52
+ #
53
+ # @return [self]
54
+ def stop
55
+ close
56
+ end
57
+
58
+ ##
59
+ # Returns the color for the highlighter
60
+ #
61
+ # @return [NSColor]
62
+ def color
63
+ backgroundColor
64
+ end
65
+ alias_method :colour, :color
66
+
67
+ ##
68
+ # Return whether or not the highlighter is currently drawn on screen
69
+ def visible?
70
+ super
71
+ end
72
+
73
+ ##
74
+ # Return the rectangle on screen which the highlighter is occupying
75
+ #
76
+ # @return [CGRect]
77
+ def frame
78
+ super
79
+ end
80
+
81
+ end
82
+
83
+
84
+ # Initialize the shared application so that windows can be created
85
+ NSApplication.sharedApplication
@@ -1,37 +1,27 @@
1
- # We want to launch the test app and make sure it responds to
2
- # accessibility queries, but that is difficult to know at what
3
- # point it will start to respond, so we just sleep
4
- #
5
- # We also want to make it registers it's at_exit hook before
6
- # minitest does!
7
- APP_BUNDLE_PATH = File.expand_path './test/fixture/Release/AXElementsTester.app'
8
- APP_BUNDLE_IDENTIFIER = 'com.marketcircle.AXElementsTester'
9
-
10
- `open #{APP_BUNDLE_PATH}`
11
- sleep 3
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
12
3
 
13
- at_exit do
14
- `killall AXElementsTester`
4
+ if defined? MACRUBY_REVISION
5
+ def on_macruby?
6
+ true
7
+ end
8
+ else
9
+ def on_macruby?
10
+ false
11
+ end
15
12
  end
16
13
 
17
14
 
18
- require 'minitest/autorun'
19
- require 'minitest/pride'
20
- require 'accessibility/core'
21
-
22
15
  class MiniTest::Unit::TestCase
23
16
 
24
- PID = if on_macruby?
25
- NSWorkspace.sharedWorkspace.runningApplications.find do |app|
26
- app.bundleIdentifier == APP_BUNDLE_IDENTIFIER
27
- end.processIdentifier
28
- else
29
- # a bit fragile, need to find a better solution
30
- `ps aux | grep AXElementsTester`.chomp.split("\n").last.split(' ').at(1).to_i
31
- end
32
-
33
- # if this basic API doesn't work we might as well as give up right away
34
- APP = Accessibility::Element.application_for PID
17
+ if respond_to? :parallelize_me!
18
+ class << self
19
+ alias_method :try_to_parallelize!, :parallelize_me!
20
+ end
21
+ else
22
+ def self.try_to_parallelize!
23
+ end
24
+ end
35
25
 
36
26
  def rand_nums count, range = 1_000
37
27
  Array.new count do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: accessibility_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
12
+ date: 2012-12-25 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: accessibility_bridge
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 0.1.1
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 0.1.1
30
14
  - !ruby/object:Gem::Dependency
31
15
  name: yard
32
16
  requirement: !ruby/object:Gem::Requirement
@@ -59,25 +43,16 @@ dependencies:
59
43
  - - ~>
60
44
  - !ruby/object:Gem::Version
61
45
  version: 0.14.1
62
- - !ruby/object:Gem::Dependency
63
- name: rake-compiler
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 0.8.1
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 0.8.1
78
46
  description: ! 'accessibility_core is a wrapper around the OS X Accessibility framework.
79
47
 
80
48
 
49
+ Some other extras that are intended to help build higher level abstractions
50
+
51
+ have also been included. They are primarily wrappers around misc bits
52
+
53
+ of Cocoa, but include some speciality modules.
54
+
55
+
81
56
  Originally extracted from the AXElements project.
82
57
 
83
58
  '
@@ -85,42 +60,38 @@ email: markrada26@gmail.com
85
60
  executables: []
86
61
  extensions:
87
62
  - ext/accessibility/core/extconf.rb
63
+ - ext/accessibility/bridge/extconf.rb
64
+ - ext/accessibility/extras/extconf.rb
65
+ - ext/accessibility/highlighter/extconf.rb
88
66
  extra_rdoc_files: []
89
67
  files:
68
+ - lib/accessibility/bridge/common.rb
69
+ - lib/accessibility/bridge/macruby.rb
70
+ - lib/accessibility/bridge/mri.rb
71
+ - lib/accessibility/bridge.rb
90
72
  - lib/accessibility/core/macruby.rb
91
73
  - lib/accessibility/core/version.rb
92
74
  - lib/accessibility/core.rb
93
- - ext/accessibility/bridge/ext/accessibility/bridge/bridge.c
75
+ - lib/accessibility/extras/common.rb
76
+ - lib/accessibility/extras.rb
77
+ - lib/accessibility/highlighter/macruby.rb
78
+ - lib/accessibility/highlighter.rb
79
+ - ext/accessibility/bridge/bridge.c
94
80
  - ext/accessibility/core/core.c
81
+ - ext/accessibility/extras/extras.c
95
82
  - ext/accessibility/highlighter/highlighter.c
96
- - ext/accessibility/core/bridge.h
97
- - ext/accessibility/bridge/ext/accessibility/bridge/extconf.rb
98
- - ext/accessibility/bridge/lib/accessibility/bridge/common.rb
99
- - ext/accessibility/bridge/lib/accessibility/bridge/macruby.rb
100
- - ext/accessibility/bridge/lib/accessibility/bridge/mri.rb
101
- - ext/accessibility/bridge/lib/accessibility/bridge/version.rb
102
- - ext/accessibility/bridge/lib/accessibility/bridge.rb
103
- - ext/accessibility/bridge/test/array_test.rb
104
- - ext/accessibility/bridge/test/boxed_test.rb
105
- - ext/accessibility/bridge/test/cfrange_test.rb
106
- - ext/accessibility/bridge/test/cgpoint_test.rb
107
- - ext/accessibility/bridge/test/cgrect_test.rb
108
- - ext/accessibility/bridge/test/cgsize_test.rb
109
- - ext/accessibility/bridge/test/helper.rb
110
- - ext/accessibility/bridge/test/nsstring_test.rb
111
- - ext/accessibility/bridge/test/nsurl_test.rb
112
- - ext/accessibility/bridge/test/object_test.rb
113
- - ext/accessibility/bridge/test/range_test.rb
114
- - ext/accessibility/bridge/test/string_test.rb
115
- - ext/accessibility/bridge/test/uri_test.rb
83
+ - ext/accessibility/bridge/bridge.h
84
+ - ext/accessibility/extras/extras.h
85
+ - ext/accessibility/bridge/extconf.rb
116
86
  - ext/accessibility/core/extconf.rb
87
+ - ext/accessibility/extras/extconf.rb
117
88
  - ext/accessibility/highlighter/extconf.rb
118
89
  - Rakefile
119
90
  - README.markdown
120
91
  - History.markdown
121
92
  - .yardopts
122
93
  - test/helper.rb
123
- homepage: http://github.com/ferrous26/accessibility
94
+ homepage: http://github.com/AXElements/accessibility_core
124
95
  licenses:
125
96
  - BSD 3-clause
126
97
  post_install_message:
@@ -133,12 +104,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
104
  - - ! '>='
134
105
  - !ruby/object:Gem::Version
135
106
  version: '0'
107
+ segments:
108
+ - 0
109
+ hash: -1612632312201987392
136
110
  required_rubygems_version: !ruby/object:Gem::Requirement
137
111
  none: false
138
112
  requirements:
139
113
  - - ! '>='
140
114
  - !ruby/object:Gem::Version
141
115
  version: '0'
116
+ segments:
117
+ - 0
118
+ hash: -1612632312201987392
142
119
  requirements: []
143
120
  rubyforge_project:
144
121
  rubygems_version: 1.8.24
@@ -1,6 +0,0 @@
1
- module Accessibility
2
- module Bridge
3
- # @return [String]
4
- VERSION = '0.1.1'
5
- end
6
- end
@@ -1,31 +0,0 @@
1
- require 'test/helper'
2
-
3
- class ArrayTest < MiniTest::Unit::TestCase
4
-
5
- def test_to_point
6
- x, y = rand_nums 2
7
- p = [x, y].to_point
8
- assert_kind_of CGPoint, p
9
- assert_equal x, p.x
10
- assert_equal y, p.y
11
- end
12
-
13
- def test_to_size
14
- w, h = rand_nums 2
15
- s = [w, h].to_size
16
- assert_kind_of CGSize, s
17
- assert_equal w, s.width
18
- assert_equal h, s.height
19
- end
20
-
21
- def test_to_rect
22
- x, y, w, h = rand_nums 4
23
- r = [x, y, w, h].to_rect
24
- assert_kind_of CGRect, r
25
- assert_equal x, r.origin.x
26
- assert_equal y, r.origin.y
27
- assert_equal w, r.size.width
28
- assert_equal h, r.size.height
29
- end
30
-
31
- end
@@ -1,23 +0,0 @@
1
- require 'test/helper'
2
-
3
- if on_macruby?
4
-
5
- ##
6
- # Boxed is the common ancestor of all structs defined by bridge support
7
- # in MacRuby.
8
- class BoxedTest < MiniTest::Unit::TestCase
9
-
10
- def test_to_ax_raises_for_arbitrary_boxes
11
- assert_raises(NotImplementedError) { NSEdgeInsets.new.to_ax }
12
- end
13
-
14
- def test_to_ruby # bet you would never dare to abuse the parser like this!
15
- assert_equal CGPointZero, CGPointZero .to_ax.to_ruby
16
- assert_equal CGSize.new(10,10), CGSize.new(10, 10) .to_ax.to_ruby
17
- assert_equal CGRectMake(1,2,3,4), CGRectMake(1,2,3,4).to_ax.to_ruby
18
- assert_equal 1..10, CFRange.new(1, 10) .to_ax.to_ruby
19
- assert_equal Range.new(1,10), CFRange.new(1,10) .to_ax.to_ruby
20
- end
21
-
22
- end
23
- end
@@ -1,21 +0,0 @@
1
- require 'test/helper'
2
-
3
- if on_macruby?
4
- class CFRangeTest < MiniTest::Unit::TestCase
5
-
6
- def test_to_ax
7
- range = CFRange.new(5, 4)
8
- value = range.to_ax
9
- ptr = Pointer.new CFRange.type
10
- AXValueGetValue(value, 4, ptr)
11
- assert_equal range, ptr.value, 'range makes a value'
12
- end
13
-
14
- def test_cf_range_to_ruby_range_compatability
15
- assert_equal CFRangeMake(1,10).to_ax, (1..10 ).to_ax
16
- assert_equal CFRangeMake(1, 9).to_ax, (1...10 ).to_ax
17
- assert_equal CFRangeMake(0, 3).to_ax, (0..2 ).to_ax
18
- end
19
-
20
- end
21
- end
@@ -1,54 +0,0 @@
1
- require 'test/helper'
2
-
3
- class CGPointTest < MiniTest::Unit::TestCase
4
-
5
- def test_attributes
6
- p = CGPoint.new
7
- assert_respond_to p, :x
8
- assert_respond_to p, :y
9
- end
10
-
11
- def test_to_a
12
- p = CGPoint.new 1, 2
13
- assert_equal [1, 2], p.to_a
14
- end
15
-
16
- def test_to_point
17
- p = CGPoint.new
18
- assert_same p, p.to_point
19
-
20
- p = CGPoint.new 4, 2
21
- assert_same p, p.to_point
22
- end
23
-
24
- def test_initialize
25
- p = CGPoint.new
26
- assert_equal 0, p.x
27
- assert_equal 0, p.y
28
-
29
- x, y = rand_nums 2
30
- p = CGPoint.new x, y
31
- assert_equal x, p.x
32
- assert_equal y, p.y
33
-
34
- x, y = rand_floats 2
35
- p = CGPoint.new x, y
36
- assert_equal x, p.x
37
- assert_equal y, p.y
38
- end
39
-
40
- def test_inspect
41
- assert_match /Point x=1.0 y=2.0>/, CGPoint.new(1, 2).inspect
42
- assert_match /Point x=3.0 y=5.0>/, CGPoint.new(3, 5).inspect
43
- end
44
-
45
- if on_macruby?
46
- def test_to_ax
47
- value = CGPointZero.to_ax
48
- ptr = Pointer.new CGPoint.type
49
- AXValueGetValue(value, 1, ptr)
50
- assert_equal CGPointZero, ptr.value, 'point makes a value'
51
- end
52
- end
53
-
54
- end