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