AXElements 1.0.0.beta4 → 6.0.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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/History.markdown +7 -0
  3. data/README.markdown +41 -29
  4. data/Rakefile +1 -6
  5. data/lib/accessibility/dsl.rb +17 -15
  6. data/lib/accessibility/pretty_printer.rb +40 -12
  7. data/lib/accessibility/system_info.rb +2 -0
  8. data/lib/accessibility/text_highlighter.rb +73 -0
  9. data/lib/accessibility/translator.rb +1 -0
  10. data/lib/accessibility/version.rb +1 -1
  11. data/lib/accessibility.rb +13 -114
  12. data/lib/ax/application.rb +54 -42
  13. data/lib/ax/element.rb +27 -7
  14. data/lib/ax/scroll_area.rb +1 -0
  15. data/lib/ax/systemwide.rb +5 -4
  16. data/lib/ax/text_area.rb +16 -0
  17. data/lib/ax/text_field.rb +10 -0
  18. data/lib/ax_elements/mri.rb +36 -1
  19. data/rakelib/ci.rake +9 -0
  20. data/rakelib/doc.rake +4 -13
  21. data/rakelib/ext.rake +1 -57
  22. data/rakelib/gem.rake +7 -23
  23. data/rakelib/test.rake +10 -17
  24. data/test/helper.rb +15 -18
  25. data/test/integration/accessibility/test_dsl.rb +9 -3
  26. data/test/integration/ax/test_application.rb +1 -1
  27. data/test/integration/ax/test_text_area.rb +62 -0
  28. data/test/integration/ax/test_text_field.rb +49 -0
  29. data/test/sanity/accessibility/test_dsl.rb +1 -0
  30. data/test/sanity/accessibility/test_errors.rb +1 -1
  31. data/test/sanity/accessibility/test_pretty_printer.rb +6 -1
  32. data/test/sanity/accessibility/test_qualifier.rb +1 -1
  33. data/test/sanity/accessibility/test_system_info.rb +109 -0
  34. data/test/sanity/accessibility/test_translator.rb +1 -1
  35. data/test/sanity/accessibility/test_version.rb +2 -2
  36. data/test/sanity/ax_elements/test_nsarray_compat.rb +1 -1
  37. data/test/sanity/ax_elements/test_nsobject_inspect.rb +1 -1
  38. data/test/sanity/test_ax_elements.rb +1 -1
  39. metadata +34 -59
  40. data/ext/accessibility/key_coder/extconf.rb +0 -22
  41. data/ext/accessibility/key_coder/key_coder.c +0 -123
  42. data/lib/accessibility/string.rb +0 -502
  43. data/test/sanity/accessibility/test_string.rb +0 -238
@@ -1,238 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require 'test/runner'
4
- require 'accessibility/string'
5
-
6
- class TestAccessibilityStringLexer < MiniTest::Unit::TestCase
7
-
8
- def lex string
9
- Accessibility::String::Lexer.new(string).lex
10
- end
11
-
12
- def test_lex_simple_string
13
- assert_equal [], lex('')
14
- assert_equal ['"',"J","u","s","t"," ","W","o","r","k","s",'"',"™"], lex('"Just Works"™')
15
- assert_equal ["M","i","l","k",","," ","s","h","a","k","e","."], lex("Milk, shake.")
16
- assert_equal ["D","B","7"], lex("DB7")
17
- end
18
-
19
- def test_lex_single_custom_escape
20
- assert_equal [["\\CMD"]], lex("\\CMD")
21
- assert_equal [["\\1"]], lex("\\1")
22
- assert_equal [["\\F1"]], lex("\\F1")
23
- assert_equal [["\\*"]], lex("\\*")
24
- end
25
-
26
- def test_lex_hotkey_custom_escape
27
- assert_equal [["\\COMMAND",[","]]], lex("\\COMMAND+,")
28
- assert_equal [["\\COMMAND",["\\SHIFT",["s"]]]], lex("\\COMMAND+\\SHIFT+s")
29
- assert_equal [["\\COMMAND",["\\+"]]], lex("\\COMMAND+\\+")
30
- assert_equal [["\\FN",["\\F10"]]], lex("\\FN+\\F10")
31
- end
32
-
33
- def test_lex_ruby_escapes
34
- assert_equal ["\n","\r","\t","\b"], lex("\n\r\t\b")
35
- assert_equal ["O","n","e","\n","T","w","o"], lex("One\nTwo")
36
- assert_equal ["L","i","e","\b","\b","\b","d","e","l","i","s","h"], lex("Lie\b\b\bdelish")
37
- end
38
-
39
- def test_lex_complex_string
40
- assert_equal ["T","e","s","t",["\\CMD",["s"]]], lex("Test\\CMD+s")
41
- assert_equal ["Z","O","M","G"," ","1","3","3","7","!","!","1"], lex("ZOMG 1337!!1")
42
- assert_equal ["F","u","u","!","@","#","%",["\\CMD",["a"]],"\b"], lex("Fuu!@#%\\CMD+a \b")
43
- assert_equal [["\\CMD",["a"]],"\b","A","l","l"," ","g","o","n","e","!"], lex("\\CMD+a \bAll gone!")
44
- end
45
-
46
- def test_lex_backslash # make sure we handle these edge cases predictably
47
- assert_equal ["\\"], lex("\\")
48
- assert_equal ["\\"," "], lex("\\ ")
49
- assert_equal ["\\","h","m","m"], lex("\\hmm")
50
- assert_equal [["\\HMM"]], lex("\\HMM") # the one missed case
51
- end
52
-
53
- def test_lex_plus_escape
54
- assert_equal [["\\+"]], lex("\\+")
55
- end
56
-
57
- def test_lex_bad_custom_escape_sequence
58
- assert_raises ArgumentError do
59
- lex("\\COMMAND+")
60
- end
61
- end
62
-
63
- end
64
-
65
-
66
- class TestAccessibilityStringEventGenerator < MiniTest::Unit::TestCase
67
-
68
- def gen tokens
69
- Accessibility::String::EventGenerator.new(tokens).generate
70
- end
71
-
72
- def map; @@map ||= KeyCoder.dynamic_mapping; end
73
-
74
- def t; true; end
75
- def f; false; end
76
-
77
- def a; @@a ||= map['a']; end
78
- def c; @@c ||= map['c']; end
79
- def e; @@e ||= map['e']; end
80
- def h; @@h ||= map['h']; end
81
- def i; @@i ||= map['i']; end
82
- def k; @@k ||= map['k']; end
83
- def m; @@m ||= map["m"]; end
84
-
85
- def two; @@two ||= map['2']; end
86
- def four; @@four ||= map['4']; end
87
-
88
- def retern; @@retern ||= map["\r"]; end
89
- def tab; @@tab ||= map["\t"]; end
90
- def space; @@space ||= map["\s"]; end
91
-
92
- def dash; @@dash ||= map["-"]; end
93
- def comma; @@comma ||= map[","]; end
94
- def apos; @@apos ||= map["'"]; end
95
- def at; @@at ||= map["2"]; end
96
- def paren; @@paren ||= map["9"]; end
97
- def chev; @@chev ||= map["."]; end
98
-
99
- def sigma; @@sigma ||= map["w"]; end
100
- def tm; @@tm ||= map["2"]; end
101
- def gbp; @@gbp ||= map["3"]; end
102
- def omega; @@omega ||= map["z"]; end
103
-
104
- def bslash; @@blash ||= map["\\"]; end
105
-
106
- # key code for the left shift key
107
- def sd; [56,t]; end
108
- def su; [56,f]; end
109
-
110
- # key code for the left option key
111
- def od; [58,t]; end
112
- def ou; [58,f]; end
113
-
114
- # key code for the left command key
115
- def cd; [0x37,t]; end
116
- def cu; [0x37,f]; end
117
-
118
- # key code for right arrow key
119
- def rd; [0x7c,t]; end
120
- def ru; [0x7c,f]; end
121
-
122
- # key code for left control key
123
- def ctrld; [0x3B,t]; end
124
- def ctrlu; [0x3B,f]; end
125
-
126
-
127
- def test_generate_lowercase
128
- assert_equal [[a,t],[a,f]], gen(['a'])
129
- assert_equal [[c,t],[c,f],[k,t],[k,f]], gen(['c','k'])
130
- assert_equal [[e,t],[e,f],[e,t],[e,f]], gen(['e','e'])
131
- assert_equal [[c,t],[c,f],[a,t],[a,f],[k,t],[k,f],[e,t],[e,f]], gen(['c','a','k','e'])
132
- end
133
-
134
- def test_generate_uppercase
135
- assert_equal [sd,[a,t],[a,f],su], gen(['A'])
136
- assert_equal [sd,[c,t],[c,f],[k,t],[k,f],su], gen(['C','K'])
137
- assert_equal [sd,[e,t],[e,f],[e,t],[e,f],su], gen(['E','E'])
138
- assert_equal [sd,[c,t],[c,f],[a,t],[a,f],[k,t],[k,f],su], gen(['C','A','K'])
139
- end
140
-
141
- def test_generate_numbers
142
- assert_equal [[two,t],[two,f]], gen(['2'])
143
- assert_equal [[four,t],[four,f],[two,t],[two,f]], gen(['4','2'])
144
- assert_equal [[two,t],[two,f],[two,t],[two,f]], gen(['2','2'])
145
- end
146
-
147
- def test_generate_ruby_escapes
148
- assert_equal [[retern,t],[retern,f]], gen(["\r"])
149
- assert_equal [[retern,t],[retern,f]], gen(["\n"])
150
- assert_equal [[tab,t],[tab,f]], gen(["\t"])
151
- assert_equal [[space,t],[space,f]], gen(["\s"])
152
- assert_equal [[space,t],[space,f]], gen([" "])
153
- end
154
-
155
- def test_generate_symbols
156
- assert_equal [[dash,t],[dash,f]], gen(["-"])
157
- assert_equal [[comma,t],[comma,f]], gen([","])
158
- assert_equal [[apos,t],[apos,f]], gen(["'"])
159
- assert_equal [sd,[at,t],[at,f],su], gen(["@"])
160
- assert_equal [sd,[paren,t],[paren,f],su], gen(["("])
161
- assert_equal [sd,[chev,t],[chev,f],su], gen([">"])
162
- end
163
-
164
- def test_generate_unicode # holding option
165
- assert_equal [od,[sigma,t],[sigma,f],ou], gen(["∑"])
166
- assert_equal [od,[tm,t],[tm,f],ou], gen(["™"])
167
- assert_equal [od,[gbp,t],[gbp,f],ou], gen(["£"])
168
- assert_equal [od,[omega,t],[omega,f],ou], gen(["Ω"])
169
- assert_equal [od,[tm,t],[tm,f],[gbp,t],[gbp,f],ou], gen(["™","£"])
170
- end
171
-
172
- def test_generate_backslashes
173
- assert_equal [[bslash,t],[bslash,f]], gen(["\\"])
174
- assert_equal [[bslash,t],[bslash,f],[space,t],[space,f]], gen(["\\"," "])
175
- assert_equal [[bslash,t],[bslash,f],[h,t],[h,f],[m,t],[m,f]], gen(["\\",'h','m'])
176
- # is this the job of the parser or the lexer?
177
- assert_equal [[bslash,t],[bslash,f],sd,[h,t],[h,f],[m,t],[m,f],su], gen([["\\HM"]])
178
- end
179
-
180
- def test_generate_a_custom_escape
181
- assert_equal [cd,cu], gen([["\\COMMAND"]])
182
- assert_equal [cd,cu], gen([["\\CMD"]])
183
- assert_equal [ctrld,ctrlu], gen([["\\CONTROL"]])
184
- assert_equal [ctrld,ctrlu], gen([["\\CTRL"]])
185
- end
186
-
187
- def test_generate_hotkey
188
- assert_equal [ctrld,[a,t],[a,f],ctrlu], gen([["\\CONTROL",["a"]]])
189
- assert_equal [cd,sd,rd,ru,su,cu], gen([["\\COMMAND",['\SHIFT',['\->']]]])
190
- end
191
-
192
- def test_generate_real_use # a regression
193
- assert_equal [ctrld,[a,t],[a,f],ctrlu,[h,t],[h,f]], gen([["\\CTRL",["a"]],"h"])
194
- end
195
-
196
- def test_bails_for_unmapped_token
197
- # cannot generate snowmen :(
198
- e = assert_raises(ArgumentError) { gen(["☃"]) }
199
- assert_match /bail/i, e.message
200
- end
201
-
202
- def test_generate_arbitrary_nested_array_sequence
203
- assert_equal [[c,t],[a,t],[k,t],[e,t],[e,f],[k,f],[a,f],[c,f]], gen([["c",["a",["k",["e"]]]]])
204
- end
205
-
206
- def test_generate_command_A
207
- assert_equal [cd,sd,[a,t],[a,f],su,cu], gen([["\\COMMAND",["A"]]])
208
- end
209
-
210
- end
211
-
212
-
213
- # NOTE: DO NOT TEST POSTING EVENTS HERE
214
- # We only want to test posting events if all the tests in this file pass,
215
- # otherwise the posted events may be unpredictable depending on what fails.
216
- # Test event posting in the integration tests.
217
- class TestAccessibilityString < MiniTest::Unit::TestCase
218
- include Accessibility::String
219
-
220
- # basic test to make sure the lexer and generator get along
221
- def test_keyboard_events_for
222
- events = keyboard_events_for 'cheezburger'
223
- assert_kind_of Array, events
224
- refute_empty events
225
-
226
- assert_equal true, events[0][1]
227
- assert_equal false, events[1][1]
228
- end
229
-
230
- def test_dynamic_map_initialized
231
- refute_empty Accessibility::String::EventGenerator::MAPPING
232
- end
233
-
234
- def test_can_parse_empty_string
235
- assert_equal [], keyboard_events_for('')
236
- end
237
-
238
- end