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.
- checksums.yaml +7 -0
- data/History.markdown +7 -0
- data/README.markdown +41 -29
- data/Rakefile +1 -6
- data/lib/accessibility/dsl.rb +17 -15
- data/lib/accessibility/pretty_printer.rb +40 -12
- data/lib/accessibility/system_info.rb +2 -0
- data/lib/accessibility/text_highlighter.rb +73 -0
- data/lib/accessibility/translator.rb +1 -0
- data/lib/accessibility/version.rb +1 -1
- data/lib/accessibility.rb +13 -114
- data/lib/ax/application.rb +54 -42
- data/lib/ax/element.rb +27 -7
- data/lib/ax/scroll_area.rb +1 -0
- data/lib/ax/systemwide.rb +5 -4
- data/lib/ax/text_area.rb +16 -0
- data/lib/ax/text_field.rb +10 -0
- data/lib/ax_elements/mri.rb +36 -1
- data/rakelib/ci.rake +9 -0
- data/rakelib/doc.rake +4 -13
- data/rakelib/ext.rake +1 -57
- data/rakelib/gem.rake +7 -23
- data/rakelib/test.rake +10 -17
- data/test/helper.rb +15 -18
- data/test/integration/accessibility/test_dsl.rb +9 -3
- data/test/integration/ax/test_application.rb +1 -1
- data/test/integration/ax/test_text_area.rb +62 -0
- data/test/integration/ax/test_text_field.rb +49 -0
- data/test/sanity/accessibility/test_dsl.rb +1 -0
- data/test/sanity/accessibility/test_errors.rb +1 -1
- data/test/sanity/accessibility/test_pretty_printer.rb +6 -1
- data/test/sanity/accessibility/test_qualifier.rb +1 -1
- data/test/sanity/accessibility/test_system_info.rb +109 -0
- data/test/sanity/accessibility/test_translator.rb +1 -1
- data/test/sanity/accessibility/test_version.rb +2 -2
- data/test/sanity/ax_elements/test_nsarray_compat.rb +1 -1
- data/test/sanity/ax_elements/test_nsobject_inspect.rb +1 -1
- data/test/sanity/test_ax_elements.rb +1 -1
- metadata +34 -59
- data/ext/accessibility/key_coder/extconf.rb +0 -22
- data/ext/accessibility/key_coder/key_coder.c +0 -123
- data/lib/accessibility/string.rb +0 -502
- 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
|