AXTyper 0.7.0 → 0.7.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.
- data/{.yardopts.typer → .yardopts_typer} +2 -2
- data/{README.markdown.typer → README.typer.markdown} +9 -8
- data/docs/KeyboardEvents.markdown +12 -9
- data/ext/accessibility/key_coder/extconf.rb +1 -1
- data/ext/accessibility/key_coder/key_coder.c +34 -8
- data/lib/accessibility/string.rb +49 -51
- data/lib/accessibility/version.rb +1 -1
- data/test/{unit → sanity}/accessibility/test_string.rb +21 -16
- metadata +8 -8
@@ -52,14 +52,15 @@ All rights reserved.
|
|
52
52
|
|
53
53
|
Redistribution and use in source and binary forms, with or without
|
54
54
|
modification, are permitted provided that the following conditions are met:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
55
|
+
|
56
|
+
* Redistributions of source code must retain the above copyright
|
57
|
+
notice, this list of conditions and the following disclaimer.
|
58
|
+
* Redistributions in binary form must reproduce the above copyright
|
59
|
+
notice, this list of conditions and the following disclaimer in the
|
60
|
+
documentation and/or other materials provided with the distribution.
|
61
|
+
* Neither the name of Marketcircle Inc. nor the names of its
|
62
|
+
contributors may be used to endorse or promote products derived
|
63
|
+
from this software without specific prior written permission.
|
63
64
|
|
64
65
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
65
66
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
@@ -19,7 +19,7 @@ typing just make more sense when writing tests or scripts.
|
|
19
19
|
|
20
20
|
## Typing with the DSL
|
21
21
|
|
22
|
-
The {Accessibility::DSL}
|
22
|
+
The {Accessibility::DSL} mix-in exposes keyboard events through the
|
23
23
|
`type` method. A simple example would look like this:
|
24
24
|
|
25
25
|
type "Hello, #{ENV['USER']}! How are you today?\n"
|
@@ -70,18 +70,18 @@ the string__, as in this example:
|
|
70
70
|
type "\\PAGEDOWN notice the space afterwards\\PAGEUP but not before"
|
71
71
|
|
72
72
|
The full list of supported custom escape sequences is listed in
|
73
|
-
{Accessibility::StringParser::
|
73
|
+
{Accessibility::StringParser::CUSTOM}. Some escapes have an alias,
|
74
74
|
such as the right arrow key which can be escaped as `"\\RIGHT"` or as
|
75
75
|
`"\\->"`.
|
76
76
|
|
77
77
|
### Hot Keys
|
78
78
|
|
79
|
-
To support pressing multiple keys at the same time
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
To support pressing multiple keys at the same time (i.e. hot keys), you
|
80
|
+
must start with the custom escape sequence for the combination and
|
81
|
+
instead of ending with a space you should put a `+` character to chain
|
82
|
+
the next key. The entire sequence should be ended with a space or
|
83
|
+
nil. Some common examples are opening a file or quitting an
|
84
|
+
application:
|
85
85
|
|
86
86
|
type "\\COMMAND+o"
|
87
87
|
type "\\CONTROL+a Typing at the start of the line"
|
@@ -93,6 +93,10 @@ You might also note that `CMD+SHIFT+s` could also be:
|
|
93
93
|
|
94
94
|
Since a capital `S` will cause the shift key to be held down.
|
95
95
|
|
96
|
+
One caveat with hot keys is that you cannot use `"\\COMMAND+ "` to
|
97
|
+
represent command and space combination, you will need to use
|
98
|
+
`"\\COMMAND+\s"` instead.
|
99
|
+
|
96
100
|
## Protips
|
97
101
|
|
98
102
|
In order make sure that certain sequences of characters are properly
|
@@ -116,4 +120,3 @@ possible values. An example of using it would be:
|
|
116
120
|
|
117
121
|
KEY_RATE=SLOW irb -rubygems -rax_elements
|
118
122
|
KEY_RATE=0.25 rspec gui_spec.rb
|
119
|
-
|
@@ -6,7 +6,7 @@ $LIBS << ' -framework Cocoa -framework Carbon -framework ApplicationServices'
|
|
6
6
|
if RUBY_ENGINE == 'macruby'
|
7
7
|
$CFLAGS << ' -fobjc-gc'
|
8
8
|
else
|
9
|
-
$CFLAGS << ' -DNOT_MACRUBY
|
9
|
+
$CFLAGS << ' -DNOT_MACRUBY'
|
10
10
|
end
|
11
11
|
|
12
12
|
create_makefile('accessibility/key_coder')
|
@@ -10,10 +10,24 @@
|
|
10
10
|
#import <Cocoa/Cocoa.h>
|
11
11
|
#import <Carbon/Carbon.h>
|
12
12
|
#import <ApplicationServices/ApplicationServices.h>
|
13
|
+
|
13
14
|
#include "ruby.h"
|
14
15
|
|
16
|
+
|
17
|
+
/*
|
18
|
+
* Generate the mapping of characters to key codes for keys that can be
|
19
|
+
* remapped based on keyboard layout. Changing the keyboard layout at
|
20
|
+
* runtime will cause the returned hash to be different.
|
21
|
+
*
|
22
|
+
* @example
|
23
|
+
*
|
24
|
+
* KeyCoder.dynamic_mapping => { "a" => 0, "b" => 24, ... }
|
25
|
+
*
|
26
|
+
* @return [Hash{String=>Number}]
|
27
|
+
*/
|
28
|
+
|
15
29
|
static VALUE
|
16
|
-
|
30
|
+
keycoder_dynamic_mapping()
|
17
31
|
{
|
18
32
|
|
19
33
|
VALUE map = rb_hash_new();
|
@@ -31,8 +45,7 @@ rb_keycoder_dynamic_mapping()
|
|
31
45
|
UniCharCount string_length = 0;
|
32
46
|
UInt32 dead_key_state = 0;
|
33
47
|
UCKeyTranslate(
|
34
|
-
|
35
|
-
key_code,
|
48
|
+
layout,key_code,
|
36
49
|
kUCKeyActionDown,
|
37
50
|
0,
|
38
51
|
LMGetKbdType(), // kb type
|
@@ -48,7 +61,7 @@ rb_keycoder_dynamic_mapping()
|
|
48
61
|
};
|
49
62
|
|
50
63
|
// skip 65-92 since they are hard coded and do not change
|
51
|
-
for (int key_code = 0;
|
64
|
+
for (int key_code = 0; key_code < 65; key_code++)
|
52
65
|
key_coder(key_code);
|
53
66
|
for (int key_code = 93; key_code < 127; key_code++)
|
54
67
|
key_coder(key_code);
|
@@ -64,8 +77,21 @@ rb_keycoder_dynamic_mapping()
|
|
64
77
|
}
|
65
78
|
|
66
79
|
|
80
|
+
/*
|
81
|
+
* Post the given event to the system and return `true`. This method
|
82
|
+
* will also add a small (9000 microsecond) delay after posting to
|
83
|
+
* ensure that keyboard actions do not go too fast.
|
84
|
+
*
|
85
|
+
* @example
|
86
|
+
*
|
87
|
+
* KeyCoder.post_event [0, true] -> true
|
88
|
+
*
|
89
|
+
* @param [Array(Number, Boolean)]
|
90
|
+
* @return [true]
|
91
|
+
*/
|
92
|
+
|
67
93
|
static VALUE
|
68
|
-
|
94
|
+
keycoder_post_event(VALUE self, VALUE event)
|
69
95
|
{
|
70
96
|
VALUE code = rb_ary_entry(event, 0);
|
71
97
|
VALUE state = rb_ary_entry(event, 1);
|
@@ -81,7 +107,7 @@ rb_keycoder_post_event(VALUE self, VALUE event)
|
|
81
107
|
void
|
82
108
|
Init_key_coder()
|
83
109
|
{
|
84
|
-
VALUE
|
85
|
-
rb_define_singleton_method(
|
86
|
-
rb_define_singleton_method(
|
110
|
+
VALUE cKeyCoder = rb_define_class("KeyCoder", rb_cObject);
|
111
|
+
rb_define_singleton_method(cKeyCoder, "dynamic_mapping", keycoder_dynamic_mapping, 0);
|
112
|
+
rb_define_singleton_method(cKeyCoder, "post_event", keycoder_post_event, 1);
|
87
113
|
}
|
data/lib/accessibility/string.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'accessibility/version'
|
4
4
|
require 'accessibility/key_coder'
|
5
|
-
framework 'ApplicationServices' if defined? MACRUBY_VERSION
|
6
5
|
|
7
6
|
##
|
8
7
|
# Parses strings of human readable text into a series of events meant to
|
@@ -95,7 +94,7 @@ module Accessibility::String
|
|
95
94
|
loop do
|
96
95
|
char = @chars[@index]
|
97
96
|
if char == PLUS
|
98
|
-
if @chars[@index-1] == CUSTOM_ESCAPE
|
97
|
+
if @chars[@index-1] == CUSTOM_ESCAPE # \\+ case
|
99
98
|
@index += 1
|
100
99
|
return custom_subseq start
|
101
100
|
else
|
@@ -134,9 +133,6 @@ module Accessibility::String
|
|
134
133
|
|
135
134
|
|
136
135
|
##
|
137
|
-
# @todo Add a method to generate just keydown or just keyup events.
|
138
|
-
# Requires separating code lookup from event creation.
|
139
|
-
#
|
140
136
|
# Generate a sequence of keyboard events given a sequence of tokens.
|
141
137
|
# The token format is defined by the {Lexer} class output; it is best
|
142
138
|
# to use that class to generate the tokens.
|
@@ -188,27 +184,27 @@ module Accessibility::String
|
|
188
184
|
#
|
189
185
|
# @return [Hash{String=>Fixnum}]
|
190
186
|
CUSTOM = {
|
191
|
-
"\\
|
192
|
-
"\\
|
187
|
+
"\\FUNCTION" => 0x3F, # Standard Control Keys
|
188
|
+
"\\FN" => 0x3F,
|
189
|
+
"\\CONTROL" => 0x3B,
|
190
|
+
"\\CTRL" => 0x3B,
|
191
|
+
"\\OPTION" => 0x3A,
|
192
|
+
"\\OPT" => 0x3A,
|
193
|
+
"\\ALT" => 0x3A,
|
193
194
|
"\\COMMAND" => 0x37,
|
194
195
|
"\\CMD" => 0x37,
|
195
|
-
"\\SHIFT" => 0x38,
|
196
196
|
"\\LSHIFT" => 0x38,
|
197
|
-
"\\
|
197
|
+
"\\SHIFT" => 0x38,
|
198
198
|
"\\CAPSLOCK" => 0x39,
|
199
|
-
"\\
|
200
|
-
"\\OPT" => 0x3A,
|
201
|
-
"\\ALT" => 0x3A,
|
202
|
-
"\\CONTROL" => 0x3B,
|
203
|
-
"\\CTRL" => 0x3B,
|
204
|
-
"\\RSHIFT" => 0x3C,
|
199
|
+
"\\CAPS" => 0x39,
|
205
200
|
"\\ROPTION" => 0x3D,
|
206
201
|
"\\ROPT" => 0x3D,
|
207
202
|
"\\RALT" => 0x3D,
|
208
203
|
"\\RCONTROL" => 0x3E,
|
209
204
|
"\\RCTRL" => 0x3E,
|
210
|
-
"\\
|
211
|
-
"\\
|
205
|
+
"\\RSHIFT" => 0x3C,
|
206
|
+
"\\ESCAPE" => 0x35, # Top Row Keys
|
207
|
+
"\\ESC" => 0x35,
|
212
208
|
"\\VOLUMEUP" => 0x48,
|
213
209
|
"\\VOLUP" => 0x48,
|
214
210
|
"\\VOLUMEDOWN" => 0x49,
|
@@ -234,19 +230,19 @@ module Accessibility::String
|
|
234
230
|
"\\F18" => 0x4F,
|
235
231
|
"\\F19" => 0x50,
|
236
232
|
"\\F20" => 0x5A,
|
237
|
-
"\\HELP" => 0x72,
|
233
|
+
"\\HELP" => 0x72, # Island Keys
|
238
234
|
"\\HOME" => 0x73,
|
239
235
|
"\\END" => 0x77,
|
240
236
|
"\\PAGEUP" => 0x74,
|
241
237
|
"\\PAGEDOWN" => 0x79,
|
242
238
|
"\\DELETE" => 0x75,
|
243
|
-
"\\LEFT" => 0x7B,
|
239
|
+
"\\LEFT" => 0x7B, # Arrow Keys
|
244
240
|
"\\<-" => 0x7B,
|
245
241
|
"\\RIGHT" => 0x7C,
|
246
242
|
"\\->" => 0x7C,
|
247
243
|
"\\DOWN" => 0x7D,
|
248
244
|
"\\UP" => 0x7E,
|
249
|
-
"\\0" => 0x52,
|
245
|
+
"\\0" => 0x52, # Keypad Keys
|
250
246
|
"\\1" => 0x53,
|
251
247
|
"\\2" => 0x54,
|
252
248
|
"\\3" => 0x55,
|
@@ -256,20 +252,20 @@ module Accessibility::String
|
|
256
252
|
"\\7" => 0x59,
|
257
253
|
"\\8" => 0x5B,
|
258
254
|
"\\9" => 0x5C,
|
259
|
-
"\\
|
255
|
+
"\\DECIMAL" => 0x41,
|
260
256
|
"\\." => 0x41,
|
261
|
-
"\\
|
257
|
+
"\\PLUS" => 0x45,
|
262
258
|
"\\+" => 0x45,
|
263
|
-
"\\
|
259
|
+
"\\MULTIPLY" => 0x43,
|
264
260
|
"\\*" => 0x43,
|
265
|
-
"\\
|
261
|
+
"\\MINUS" => 0x4E,
|
266
262
|
"\\-" => 0x4E,
|
267
|
-
"\\
|
263
|
+
"\\DIVIDE" => 0x4B,
|
268
264
|
"\\/" => 0x4B,
|
269
|
-
"\\
|
265
|
+
"\\EQUALS" => 0x51,
|
270
266
|
"\\=" => 0x51,
|
271
|
-
"\\
|
272
|
-
"\\
|
267
|
+
"\\ENTER" => 0x4C,
|
268
|
+
"\\CLEAR" => 0x47,
|
273
269
|
}
|
274
270
|
|
275
271
|
##
|
@@ -382,7 +378,7 @@ module Accessibility::String
|
|
382
378
|
|
383
379
|
|
384
380
|
##
|
385
|
-
# Once {generate} is called, this contains the sequence of
|
381
|
+
# Once {#generate} is called, this contains the sequence of
|
386
382
|
# events.
|
387
383
|
#
|
388
384
|
# @return [Array<Array(Fixnum,Boolean)>]
|
@@ -401,7 +397,8 @@ module Accessibility::String
|
|
401
397
|
|
402
398
|
##
|
403
399
|
# Generate the events for the tokens the event generator
|
404
|
-
# was initialized with. Returns the generated events
|
400
|
+
# was initialized with. Returns the generated events, though
|
401
|
+
# you can also use {#events} to get the events later.
|
405
402
|
#
|
406
403
|
# @return [Array<Array(Fixnum,Boolean)>]
|
407
404
|
def generate
|
@@ -418,6 +415,8 @@ module Accessibility::String
|
|
418
415
|
@events[@index] = event
|
419
416
|
@index += 1
|
420
417
|
end
|
418
|
+
def previous_token; @events[@index-1] end
|
419
|
+
def rewind_index; @index -= 1 end
|
421
420
|
|
422
421
|
def gen_all tokens
|
423
422
|
tokens.each do |token|
|
@@ -430,47 +429,46 @@ module Accessibility::String
|
|
430
429
|
end
|
431
430
|
|
432
431
|
def gen_nested head, tail
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
gen_all head.split(EMPTY_STRING)
|
439
|
-
end
|
432
|
+
((code = CUSTOM[head]) && gen_dynamic(code, tail)) ||
|
433
|
+
((code = MAPPING[head]) && gen_dynamic(code, tail)) ||
|
434
|
+
((code = SHIFTED[head]) && gen_shifted(code, tail)) ||
|
435
|
+
((code = OPTIONED[head]) && gen_optioned(code, tail)) ||
|
436
|
+
gen_all(head.split(EMPTY_STRING)) # handling a special case :(
|
440
437
|
end
|
441
438
|
|
442
439
|
def gen_single token
|
443
|
-
((code = MAPPING[token]) && gen_dynamic(code)) ||
|
444
|
-
((code = SHIFTED[token]) && gen_shifted(code)) ||
|
445
|
-
((code = OPTIONED[token]) && gen_optioned(code)) ||
|
440
|
+
((code = MAPPING[token]) && gen_dynamic(code, nil)) ||
|
441
|
+
((code = SHIFTED[token]) && gen_shifted(code, nil)) ||
|
442
|
+
((code = OPTIONED[token]) && gen_optioned(code, nil)) ||
|
446
443
|
raise(ArgumentError, "#{token.inspect} has no mapping, bail!")
|
447
444
|
end
|
448
445
|
|
449
|
-
def gen_shifted code
|
450
|
-
add
|
451
|
-
gen_dynamic MAPPING[code]
|
446
|
+
def gen_shifted code, tail
|
447
|
+
previous_token == SHIFT_UP ? rewind_index : add(SHIFT_DOWN)
|
448
|
+
gen_dynamic MAPPING[code], tail
|
452
449
|
add SHIFT_UP
|
453
450
|
end
|
454
451
|
|
455
|
-
def gen_optioned code
|
456
|
-
add
|
457
|
-
gen_dynamic MAPPING[code]
|
452
|
+
def gen_optioned code, tail
|
453
|
+
previous_token == OPTION_UP ? rewind_index : add(OPTION_DOWN)
|
454
|
+
gen_dynamic MAPPING[code], tail
|
458
455
|
add OPTION_UP
|
459
456
|
end
|
460
457
|
|
461
|
-
def gen_dynamic code
|
458
|
+
def gen_dynamic code, tail
|
462
459
|
add [code, true]
|
460
|
+
gen_all tail if tail
|
463
461
|
add [code, false]
|
464
462
|
end
|
465
463
|
|
466
464
|
# @private
|
467
|
-
EMPTY_STRING =
|
465
|
+
EMPTY_STRING = ""
|
468
466
|
# @private
|
469
|
-
OPTION_DOWN = [58,
|
467
|
+
OPTION_DOWN = [58, true]
|
470
468
|
# @private
|
471
469
|
OPTION_UP = [58, false]
|
472
470
|
# @private
|
473
|
-
SHIFT_DOWN = [56,
|
471
|
+
SHIFT_DOWN = [56, true]
|
474
472
|
# @private
|
475
473
|
SHIFT_UP = [56, false]
|
476
474
|
end
|
@@ -480,7 +478,7 @@ end
|
|
480
478
|
|
481
479
|
##
|
482
480
|
# @note This will only work if a run loop is running
|
483
|
-
#
|
481
|
+
# framework 'ApplicationServices' if defined? MACRUBY_VERSION
|
484
482
|
# Register to be notified if the keyboard layout changes at runtime
|
485
483
|
# NSDistributedNotificationCenter.defaultCenter.addObserver Accessibility::String::EventGenerator,
|
486
484
|
# selector: 'regenerate_dynamic_mapping',
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
+
require 'test/runner'
|
3
4
|
require 'accessibility/string'
|
4
5
|
|
5
6
|
class TestAccessibilityStringLexer < MiniTest::Unit::TestCase
|
@@ -131,10 +132,10 @@ class TestAccessibilityStringEventGenerator < MiniTest::Unit::TestCase
|
|
131
132
|
end
|
132
133
|
|
133
134
|
def test_generate_uppercase
|
134
|
-
assert_equal [sd,[a,t],[a,f],su],
|
135
|
-
assert_equal [sd,[c,t],[c,f],
|
136
|
-
assert_equal [sd,[e,t],[e,f],
|
137
|
-
assert_equal [sd,[c,t],[c,f],
|
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'])
|
138
139
|
end
|
139
140
|
|
140
141
|
def test_generate_numbers
|
@@ -161,18 +162,19 @@ class TestAccessibilityStringEventGenerator < MiniTest::Unit::TestCase
|
|
161
162
|
end
|
162
163
|
|
163
164
|
def test_generate_unicode # holding option
|
164
|
-
assert_equal [od,[sigma,t],[sigma,f],ou],
|
165
|
-
assert_equal [od,[tm,t],[tm,f],ou],
|
166
|
-
assert_equal [od,[gbp,t],[gbp,f],ou],
|
167
|
-
assert_equal [od,[omega,t],[omega,f],ou],
|
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(["™","£"])
|
168
170
|
end
|
169
171
|
|
170
172
|
def test_generate_backslashes
|
171
|
-
assert_equal [[bslash,t],[bslash,f]],
|
172
|
-
assert_equal [[bslash,t],[bslash,f],[space,t],[space,f]],
|
173
|
-
assert_equal [[bslash,t],[bslash,f],[h,t],[h,f],[m,t],[m,f]],
|
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'])
|
174
176
|
# is this the job of the parser or the lexer?
|
175
|
-
assert_equal [[bslash,t],[bslash,f],sd,[h,t],[h,f],
|
177
|
+
assert_equal [[bslash,t],[bslash,f],sd,[h,t],[h,f],[m,t],[m,f],su], gen([["\\HM"]])
|
176
178
|
end
|
177
179
|
|
178
180
|
def test_generate_a_custom_escape
|
@@ -192,9 +194,8 @@ class TestAccessibilityStringEventGenerator < MiniTest::Unit::TestCase
|
|
192
194
|
end
|
193
195
|
|
194
196
|
def test_bails_for_unmapped_token
|
195
|
-
|
196
|
-
|
197
|
-
end
|
197
|
+
# cannot generate snowmen :(
|
198
|
+
e = assert_raises(ArgumentError) { gen(["☃"]) }
|
198
199
|
assert_match /bail/i, e.message
|
199
200
|
end
|
200
201
|
|
@@ -202,6 +203,10 @@ class TestAccessibilityStringEventGenerator < MiniTest::Unit::TestCase
|
|
202
203
|
assert_equal [[c,t],[a,t],[k,t],[e,t],[e,f],[k,f],[a,f],[c,f]], gen([["c",["a",["k",["e"]]]]])
|
203
204
|
end
|
204
205
|
|
206
|
+
def test_generate_command_A
|
207
|
+
assert_equal [cd,sd,[a,t],[a,f],su,cu], gen([["\\COMMAND",["A"]]])
|
208
|
+
end
|
209
|
+
|
205
210
|
end
|
206
211
|
|
207
212
|
|
@@ -218,7 +223,7 @@ class TestAccessibilityString < MiniTest::Unit::TestCase
|
|
218
223
|
assert_kind_of Array, events
|
219
224
|
refute_empty events
|
220
225
|
|
221
|
-
assert_equal true,
|
226
|
+
assert_equal true, events[0][1]
|
222
227
|
assert_equal false, events[1][1]
|
223
228
|
end
|
224
229
|
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: AXTyper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mark Rada
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03
|
12
|
+
date: 2012-04-03 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -69,18 +69,18 @@ executables: []
|
|
69
69
|
extensions:
|
70
70
|
- ext/accessibility/key_coder/extconf.rb
|
71
71
|
extra_rdoc_files:
|
72
|
-
- README.markdown
|
73
|
-
- .
|
72
|
+
- README.typer.markdown
|
73
|
+
- .yardopts_typer
|
74
74
|
- docs/KeyboardEvents.markdown
|
75
75
|
files:
|
76
76
|
- lib/accessibility/version.rb
|
77
77
|
- lib/accessibility/string.rb
|
78
78
|
- ext/accessibility/key_coder/key_coder.c
|
79
79
|
- ext/accessibility/key_coder/extconf.rb
|
80
|
-
- test/
|
80
|
+
- test/sanity/accessibility/test_string.rb
|
81
81
|
- test/runner.rb
|
82
|
-
- README.markdown
|
83
|
-
- .
|
82
|
+
- README.typer.markdown
|
83
|
+
- .yardopts_typer
|
84
84
|
- docs/KeyboardEvents.markdown
|
85
85
|
homepage: http://github.com/Marketcircle/AXElements
|
86
86
|
licenses:
|
@@ -108,5 +108,5 @@ signing_key:
|
|
108
108
|
specification_version: 3
|
109
109
|
summary: Keyboard simulation via accessibility
|
110
110
|
test_files:
|
111
|
-
- test/
|
111
|
+
- test/sanity/accessibility/test_string.rb
|
112
112
|
- test/runner.rb
|