AXTyper 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,8 +3,8 @@
3
3
  --verbose
4
4
  --markup markdown
5
5
  --markup-provider redcarpet
6
- --readme README.markdown.typer
6
+ --readme README.typer.markdown
7
7
  lib/**/*.rb
8
- ext/**/*.m
8
+ ext/**/*{.m,.c}
9
9
  -
10
10
  docs/KeyboardEvents.markdown
@@ -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
- * Redistributions of source code must retain the above copyright
56
- notice, this list of conditions and the following disclaimer.
57
- * Redistributions in binary form must reproduce the above copyright
58
- notice, this list of conditions and the following disclaimer in the
59
- documentation and/or other materials provided with the distribution.
60
- * Neither the name of Marketcircle Inc. nor the names of its
61
- contributors may be used to endorse or promote products derived
62
- from this software without specific prior written permission.
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} mixin exposes keyboard events through the
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::ESCAPES}. Some escapes have an alias,
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, also known as hot
80
- keys, you must start with the custom escape sequence for the
81
- combination and instead of ending with a space you should put a `+`
82
- character to chain the next key. The entire sequence should be ended
83
- with a space or nil. Some common examples are opening a file or
84
- quitting an application:
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 -fblocks'
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
- rb_keycoder_dynamic_mapping()
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
- layout,
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; key_code < 65; key_code++)
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
- rb_keycoder_post_event(VALUE self, VALUE event)
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 rb_cKeyCoder = rb_define_class("KeyCoder", rb_cObject);
85
- rb_define_singleton_method(rb_cKeyCoder, "dynamic_mapping", rb_keycoder_dynamic_mapping, 0);
86
- rb_define_singleton_method(rb_cKeyCoder, "post_event", rb_keycoder_post_event, 1);
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
  }
@@ -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
- "\\ESCAPE" => 0x35,
192
- "\\ESC" => 0x35,
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
- "\\CAPS" => 0x39,
197
+ "\\SHIFT" => 0x38,
198
198
  "\\CAPSLOCK" => 0x39,
199
- "\\OPTION" => 0x3A,
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
- "\\FUNCTION" => 0x3F,
211
- "\\FN" => 0x3F,
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
- "\\Decimal" => 0x41,
255
+ "\\DECIMAL" => 0x41,
260
256
  "\\." => 0x41,
261
- "\\Plus" => 0x45,
257
+ "\\PLUS" => 0x45,
262
258
  "\\+" => 0x45,
263
- "\\Multiply" => 0x43,
259
+ "\\MULTIPLY" => 0x43,
264
260
  "\\*" => 0x43,
265
- "\\Minus" => 0x4E,
261
+ "\\MINUS" => 0x4E,
266
262
  "\\-" => 0x4E,
267
- "\\Divide" => 0x4B,
263
+ "\\DIVIDE" => 0x4B,
268
264
  "\\/" => 0x4B,
269
- "\\Equals" => 0x51,
265
+ "\\EQUALS" => 0x51,
270
266
  "\\=" => 0x51,
271
- "\\Enter" => 0x4C,
272
- "\\Clear" => 0x47,
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
- if code = CUSTOM[head] || SHIFTED[head] || OPTIONED[head] || MAPPING[head]
434
- add [code, true]
435
- gen_all tail
436
- add [code, false]
437
- else # handling a special case
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 SHIFT_DOWN
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 OPTION_DOWN
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, true]
467
+ OPTION_DOWN = [58, true]
470
468
  # @private
471
469
  OPTION_UP = [58, false]
472
470
  # @private
473
- SHIFT_DOWN = [56, true]
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,6 +1,6 @@
1
1
  module Accessibility
2
2
  # @return [String]
3
- VERSION = '0.7.0'
3
+ VERSION = '0.7.1'
4
4
 
5
5
  # @return [String]
6
6
  CODE_NAME = 'Clefairy'
@@ -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], gen(['A'])
135
- assert_equal [sd,[c,t],[c,f],su,sd,[k,t],[k,f],su], gen(['C','K'])
136
- assert_equal [sd,[e,t],[e,f],su,sd,[e,t],[e,f],su], gen(['E','E'])
137
- assert_equal [sd,[c,t],[c,f],su,sd,[a,t],[a,f],su,sd,[k,t],[k,f],su], gen(['C','A','K'])
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], gen(["∑"])
165
- assert_equal [od,[tm,t],[tm,f],ou], gen(["™"])
166
- assert_equal [od,[gbp,t],[gbp,f],ou], gen(["£"])
167
- assert_equal [od,[omega,t],[omega,f],ou], gen(["Ω"])
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]], gen(["\\"])
172
- assert_equal [[bslash,t],[bslash,f],[space,t],[space,f]], gen(["\\"," "])
173
- assert_equal [[bslash,t],[bslash,f],[h,t],[h,f],[m,t],[m,f]], gen(["\\",'h','m'])
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],su,sd,[m,t],[m,f],su], gen([["\\HM"]])
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
- e = assert_raises ArgumentError do
196
- gen(["☃"]) # cannot generate snowmen :(
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, events[0][1]
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.0
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-29 00:00:00 Z
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.typer
73
- - .yardopts.typer
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/unit/accessibility/test_string.rb
80
+ - test/sanity/accessibility/test_string.rb
81
81
  - test/runner.rb
82
- - README.markdown.typer
83
- - .yardopts.typer
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/unit/accessibility/test_string.rb
111
+ - test/sanity/accessibility/test_string.rb
112
112
  - test/runner.rb