AXElements 1.0.0.beta4 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
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