ruvim 0.3.0 → 0.6.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.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/AGENTS.md +68 -7
  3. data/README.md +30 -7
  4. data/Rakefile +7 -0
  5. data/benchmark/cext_compare.rb +165 -0
  6. data/benchmark/chunked_load.rb +256 -0
  7. data/benchmark/file_load.rb +140 -0
  8. data/benchmark/hotspots.rb +178 -0
  9. data/docs/binding.md +18 -1
  10. data/docs/command.md +156 -10
  11. data/docs/config.md +10 -2
  12. data/docs/done.md +23 -0
  13. data/docs/spec.md +162 -25
  14. data/docs/todo.md +9 -0
  15. data/docs/tutorial.md +33 -1
  16. data/docs/vim_diff.md +31 -8
  17. data/ext/ruvim/extconf.rb +5 -0
  18. data/ext/ruvim/ruvim_ext.c +519 -0
  19. data/lib/ruvim/app.rb +246 -2525
  20. data/lib/ruvim/browser.rb +104 -0
  21. data/lib/ruvim/buffer.rb +43 -20
  22. data/lib/ruvim/cli.rb +6 -0
  23. data/lib/ruvim/command_invocation.rb +2 -2
  24. data/lib/ruvim/completion_manager.rb +708 -0
  25. data/lib/ruvim/dispatcher.rb +14 -8
  26. data/lib/ruvim/display_width.rb +91 -45
  27. data/lib/ruvim/editor.rb +74 -80
  28. data/lib/ruvim/ex_command_registry.rb +3 -1
  29. data/lib/ruvim/file_watcher.rb +243 -0
  30. data/lib/ruvim/gh/link.rb +207 -0
  31. data/lib/ruvim/git/blame.rb +255 -0
  32. data/lib/ruvim/git/branch.rb +112 -0
  33. data/lib/ruvim/git/commit.rb +102 -0
  34. data/lib/ruvim/git/diff.rb +129 -0
  35. data/lib/ruvim/git/grep.rb +107 -0
  36. data/lib/ruvim/git/handler.rb +125 -0
  37. data/lib/ruvim/git/log.rb +41 -0
  38. data/lib/ruvim/git/status.rb +103 -0
  39. data/lib/ruvim/global_commands.rb +351 -77
  40. data/lib/ruvim/highlighter.rb +4 -11
  41. data/lib/ruvim/input.rb +1 -0
  42. data/lib/ruvim/key_handler.rb +1510 -0
  43. data/lib/ruvim/keymap_manager.rb +7 -7
  44. data/lib/ruvim/lang/base.rb +5 -0
  45. data/lib/ruvim/lang/c.rb +116 -0
  46. data/lib/ruvim/lang/cpp.rb +107 -0
  47. data/lib/ruvim/lang/csv.rb +4 -1
  48. data/lib/ruvim/lang/diff.rb +43 -0
  49. data/lib/ruvim/lang/dockerfile.rb +36 -0
  50. data/lib/ruvim/lang/elixir.rb +85 -0
  51. data/lib/ruvim/lang/erb.rb +30 -0
  52. data/lib/ruvim/lang/go.rb +83 -0
  53. data/lib/ruvim/lang/html.rb +34 -0
  54. data/lib/ruvim/lang/javascript.rb +83 -0
  55. data/lib/ruvim/lang/json.rb +40 -0
  56. data/lib/ruvim/lang/lua.rb +76 -0
  57. data/lib/ruvim/lang/makefile.rb +36 -0
  58. data/lib/ruvim/lang/markdown.rb +3 -4
  59. data/lib/ruvim/lang/ocaml.rb +77 -0
  60. data/lib/ruvim/lang/perl.rb +91 -0
  61. data/lib/ruvim/lang/python.rb +85 -0
  62. data/lib/ruvim/lang/registry.rb +102 -0
  63. data/lib/ruvim/lang/ruby.rb +7 -0
  64. data/lib/ruvim/lang/rust.rb +95 -0
  65. data/lib/ruvim/lang/scheme.rb +5 -0
  66. data/lib/ruvim/lang/sh.rb +76 -0
  67. data/lib/ruvim/lang/sql.rb +52 -0
  68. data/lib/ruvim/lang/toml.rb +36 -0
  69. data/lib/ruvim/lang/tsv.rb +4 -1
  70. data/lib/ruvim/lang/typescript.rb +53 -0
  71. data/lib/ruvim/lang/yaml.rb +62 -0
  72. data/lib/ruvim/rich_view/json_renderer.rb +131 -0
  73. data/lib/ruvim/rich_view/jsonl_renderer.rb +57 -0
  74. data/lib/ruvim/rich_view/table_renderer.rb +3 -3
  75. data/lib/ruvim/rich_view.rb +30 -7
  76. data/lib/ruvim/screen.rb +135 -84
  77. data/lib/ruvim/stream/file_load.rb +85 -0
  78. data/lib/ruvim/stream/follow.rb +40 -0
  79. data/lib/ruvim/stream/git.rb +43 -0
  80. data/lib/ruvim/stream/run.rb +74 -0
  81. data/lib/ruvim/stream/stdin.rb +55 -0
  82. data/lib/ruvim/stream.rb +35 -0
  83. data/lib/ruvim/stream_mixer.rb +394 -0
  84. data/lib/ruvim/terminal.rb +18 -4
  85. data/lib/ruvim/text_metrics.rb +84 -65
  86. data/lib/ruvim/version.rb +1 -1
  87. data/lib/ruvim/window.rb +5 -5
  88. data/lib/ruvim.rb +31 -4
  89. data/test/app_command_test.rb +382 -0
  90. data/test/app_completion_test.rb +65 -16
  91. data/test/app_dot_repeat_test.rb +27 -3
  92. data/test/app_ex_command_test.rb +154 -0
  93. data/test/app_motion_test.rb +13 -12
  94. data/test/app_register_test.rb +2 -1
  95. data/test/app_scenario_test.rb +182 -8
  96. data/test/app_startup_test.rb +70 -27
  97. data/test/app_text_object_test.rb +2 -1
  98. data/test/app_unicode_behavior_test.rb +3 -2
  99. data/test/browser_test.rb +88 -0
  100. data/test/buffer_test.rb +24 -0
  101. data/test/cli_test.rb +77 -0
  102. data/test/clipboard_test.rb +67 -0
  103. data/test/command_invocation_test.rb +33 -0
  104. data/test/command_line_test.rb +118 -0
  105. data/test/config_dsl_test.rb +134 -0
  106. data/test/dispatcher_test.rb +74 -4
  107. data/test/display_width_test.rb +41 -0
  108. data/test/ex_command_registry_test.rb +106 -0
  109. data/test/file_watcher_test.rb +197 -0
  110. data/test/follow_test.rb +198 -0
  111. data/test/gh_link_test.rb +141 -0
  112. data/test/git_blame_test.rb +792 -0
  113. data/test/git_grep_test.rb +64 -0
  114. data/test/highlighter_test.rb +169 -0
  115. data/test/indent_test.rb +223 -0
  116. data/test/input_screen_integration_test.rb +1 -1
  117. data/test/keyword_chars_test.rb +85 -0
  118. data/test/lang_test.rb +634 -0
  119. data/test/markdown_renderer_test.rb +5 -5
  120. data/test/on_save_hook_test.rb +12 -8
  121. data/test/render_snapshot_test.rb +78 -0
  122. data/test/rich_view_test.rb +279 -23
  123. data/test/run_command_test.rb +307 -0
  124. data/test/screen_test.rb +68 -5
  125. data/test/search_option_test.rb +19 -0
  126. data/test/stream_test.rb +165 -0
  127. data/test/test_helper.rb +9 -0
  128. data/test/window_test.rb +59 -0
  129. metadata +68 -2
@@ -6,6 +6,8 @@ class AppCompletionTest < Minitest::Test
6
6
  def setup
7
7
  @app = RuVim::App.new
8
8
  @editor = @app.instance_variable_get(:@editor)
9
+ @key_handler = @app.instance_variable_get(:@key_handler)
10
+ @completion = @app.instance_variable_get(:@completion)
9
11
  end
10
12
 
11
13
  def test_app_starts_with_intro_buffer_without_path
@@ -20,7 +22,7 @@ class AppCompletionTest < Minitest::Test
20
22
  cmd = @editor.command_line
21
23
  cmd.replace_text("set nu")
22
24
 
23
- @app.send(:command_line_complete)
25
+ @completion.command_line_complete
24
26
 
25
27
  assert_equal "set number", cmd.text
26
28
  end
@@ -33,7 +35,7 @@ class AppCompletionTest < Minitest::Test
33
35
  @editor.current_window.cursor_x = 2
34
36
  @editor.enter_insert_mode
35
37
 
36
- @app.send(:handle_insert_key, :ctrl_n)
38
+ @key_handler.send(:handle_insert_key, :ctrl_n)
37
39
 
38
40
  assert_equal "foobar", b.line_at(0)
39
41
  assert_equal 6, @editor.current_window.cursor_x
@@ -45,7 +47,7 @@ class AppCompletionTest < Minitest::Test
45
47
  File.write(File.join(dir, "a.o"), "")
46
48
  @editor.set_option("wildignore", "*.o", scope: :global)
47
49
 
48
- matches = @app.send(:path_completion_candidates, File.join(dir, "a"))
50
+ matches = @completion.send(:path_completion_candidates, File.join(dir, "a"))
49
51
 
50
52
  assert_includes matches, File.join(dir, "a.rb")
51
53
  refute_includes matches, File.join(dir, "a.o")
@@ -57,7 +59,7 @@ class AppCompletionTest < Minitest::Test
57
59
  Dir.chdir(dir) do
58
60
  FileUtils.mkdir_p("lib")
59
61
 
60
- matches = @app.send(:path_completion_candidates, "li")
62
+ matches = @completion.send(:path_completion_candidates, "li")
61
63
 
62
64
  assert_includes matches, "lib/"
63
65
  end
@@ -70,7 +72,7 @@ class AppCompletionTest < Minitest::Test
70
72
  File.write(File.join(dir, "aaa.txt"), "")
71
73
  File.write(File.join(dir, "bbb.txt"), "")
72
74
 
73
- matches = @app.send(:path_completion_candidates, File.join(dir, ""))
75
+ matches = @completion.send(:path_completion_candidates, File.join(dir, ""))
74
76
 
75
77
  assert_includes matches, File.join(dir, ".git/")
76
78
  visible_idx = matches.index(File.join(dir, "aaa.txt"))
@@ -96,10 +98,10 @@ class AppCompletionTest < Minitest::Test
96
98
  cmd = @editor.command_line
97
99
  cmd.replace_text("e #{File.join(dir, "a")}")
98
100
 
99
- @app.send(:command_line_complete)
101
+ @completion.command_line_complete
100
102
  first = cmd.text.dup
101
103
  first_msg = @editor.message.dup
102
- @app.send(:command_line_complete)
104
+ @completion.command_line_complete
103
105
  second = cmd.text.dup
104
106
  second_msg = @editor.message.dup
105
107
 
@@ -125,10 +127,10 @@ class AppCompletionTest < Minitest::Test
125
127
  cmd = @editor.command_line
126
128
  cmd.replace_text("e #{File.join(dir, "a")}")
127
129
 
128
- @app.send(:command_line_complete)
130
+ @completion.command_line_complete
129
131
  assert_equal "e #{File.join(dir, "a")}", cmd.text
130
132
 
131
- @app.send(:command_line_complete)
133
+ @completion.command_line_complete
132
134
  assert([a, b].any? { |p| cmd.text.end_with?(p) })
133
135
  end
134
136
  end
@@ -148,9 +150,9 @@ class AppCompletionTest < Minitest::Test
148
150
  cmd = @editor.command_line
149
151
  cmd.replace_text("e #{File.join(dir, "a")}")
150
152
 
151
- @app.send(:command_line_complete)
153
+ @completion.command_line_complete
152
154
  first = cmd.text.dup
153
- @app.send(:command_line_complete)
155
+ @completion.command_line_complete
154
156
  second = cmd.text.dup
155
157
 
156
158
  refute_equal first, second
@@ -168,7 +170,7 @@ class AppCompletionTest < Minitest::Test
168
170
  cmd = @editor.command_line
169
171
  cmd.replace_text("se")
170
172
 
171
- @app.send(:command_line_complete)
173
+ @completion.command_line_complete
172
174
 
173
175
  assert_equal "se", cmd.text
174
176
  assert_includes @editor.message, "set"
@@ -186,11 +188,11 @@ class AppCompletionTest < Minitest::Test
186
188
  @editor.current_window.cursor_x = 2
187
189
  @editor.enter_insert_mode
188
190
 
189
- @app.send(:handle_insert_key, :ctrl_n)
191
+ @key_handler.send(:handle_insert_key, :ctrl_n)
190
192
  assert_equal "fo", b.line_at(0)
191
193
  assert_includes @editor.message, "..."
192
194
 
193
- @app.send(:handle_insert_key, :ctrl_n)
195
+ @key_handler.send(:handle_insert_key, :ctrl_n)
194
196
  assert_equal "foobar", b.line_at(0)
195
197
  end
196
198
 
@@ -203,11 +205,58 @@ class AppCompletionTest < Minitest::Test
203
205
  @editor.current_window.cursor_x = 2
204
206
  @editor.enter_insert_mode
205
207
 
206
- @app.send(:handle_insert_key, :ctrl_n)
208
+ @key_handler.send(:handle_insert_key, :ctrl_n)
207
209
  assert_equal "fo", b.line_at(0)
208
210
  assert_includes @editor.message, "["
209
211
 
210
- @app.send(:handle_insert_key, :ctrl_n)
212
+ @key_handler.send(:handle_insert_key, :ctrl_n)
211
213
  assert_equal "foobar", b.line_at(0)
212
214
  end
215
+
216
+ def test_git_subcommand_completion
217
+ @editor.materialize_intro_buffer!
218
+ @editor.enter_command_line_mode(":")
219
+ cmd = @editor.command_line
220
+ cmd.replace_text("git bl")
221
+
222
+ @completion.command_line_complete
223
+
224
+ # "bl" matches "blame", "blameback", "blamecommit", "blameprev", "branch"
225
+ # With multiple matches, wildmode applies (longest common prefix or cycle)
226
+ text = cmd.text
227
+ assert text.start_with?("git bl"), "Expected completion to keep 'git bl' prefix, got: #{text}"
228
+ end
229
+
230
+ def test_git_subcommand_completion_unique
231
+ @editor.materialize_intro_buffer!
232
+ @editor.enter_command_line_mode(":")
233
+ cmd = @editor.command_line
234
+ cmd.replace_text("git commi")
235
+
236
+ @completion.command_line_complete
237
+
238
+ assert_equal "git commit", cmd.text
239
+ end
240
+
241
+ def test_git_subcommand_completion_includes_external
242
+ @editor.materialize_intro_buffer!
243
+ @editor.enter_command_line_mode(":")
244
+ cmd = @editor.command_line
245
+ cmd.replace_text("git stas")
246
+
247
+ @completion.command_line_complete
248
+
249
+ assert_equal "git stash", cmd.text
250
+ end
251
+
252
+ def test_gh_subcommand_completion_includes_external
253
+ @editor.materialize_intro_buffer!
254
+ @editor.enter_command_line_mode(":")
255
+ cmd = @editor.command_line
256
+ cmd.replace_text("gh issu")
257
+
258
+ @completion.command_line_complete
259
+
260
+ assert_equal "gh issue", cmd.text
261
+ end
213
262
  end
@@ -4,13 +4,14 @@ class AppDotRepeatTest < Minitest::Test
4
4
  def setup
5
5
  @app = RuVim::App.new(clean: true)
6
6
  @editor = @app.instance_variable_get(:@editor)
7
+ @key_handler = @app.instance_variable_get(:@key_handler)
7
8
  @editor.materialize_intro_buffer!
8
9
  @buffer = @editor.current_buffer
9
10
  @win = @editor.current_window
10
11
  end
11
12
 
12
13
  def press(*keys)
13
- keys.each { |k| @app.send(:handle_normal_key, k) }
14
+ keys.each { |k| @key_handler.send(:handle_normal_key, k) }
14
15
  end
15
16
 
16
17
  def test_dot_repeats_x
@@ -57,11 +58,34 @@ class AppDotRepeatTest < Minitest::Test
57
58
  @win.cursor_x = 0
58
59
 
59
60
  press("s")
60
- @app.send(:handle_key, "X")
61
- @app.send(:handle_key, :escape)
61
+ @key_handler.handle("X")
62
+ @key_handler.handle(:escape)
62
63
  press("l")
63
64
  press(".")
64
65
 
65
66
  assert_equal "XbXd", @buffer.line_at(0)
66
67
  end
68
+
69
+ def test_dot_repeats_counted_x
70
+ @buffer.replace_all_lines!(["abcdefgh"])
71
+ @win.cursor_x = 0
72
+
73
+ @key_handler.handle("3")
74
+ press("x")
75
+ assert_equal "defgh", @buffer.line_at(0)
76
+
77
+ press(".")
78
+ assert_equal "gh", @buffer.line_at(0)
79
+ end
80
+
81
+ def test_dot_repeats_counted_dd
82
+ @buffer.replace_all_lines!(["a", "b", "c", "d", "e", "f"])
83
+
84
+ @key_handler.handle("2")
85
+ press("d", "d")
86
+ assert_equal ["c", "d", "e", "f"], @buffer.lines
87
+
88
+ press(".")
89
+ assert_equal ["e", "f"], @buffer.lines
90
+ end
67
91
  end
@@ -0,0 +1,154 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "test_helper"
4
+
5
+ class AppExCommandTest < Minitest::Test
6
+ def setup
7
+ @app = RuVim::App.new(clean: true)
8
+ @editor = @app.instance_variable_get(:@editor)
9
+ @key_handler = @app.instance_variable_get(:@key_handler)
10
+ @editor.materialize_intro_buffer!
11
+ end
12
+
13
+ def feed(*keys)
14
+ keys.each { |k| @key_handler.handle(k) }
15
+ end
16
+
17
+ def buf
18
+ @editor.current_buffer
19
+ end
20
+
21
+ def win
22
+ @editor.current_window
23
+ end
24
+
25
+ # --- :set ---
26
+
27
+ def test_set_number_on_off
28
+ feed(":", "s", "e", "t", " ", "n", "u", "m", "b", "e", "r", :enter)
29
+ assert @editor.get_option("number")
30
+
31
+ feed(":", "s", "e", "t", " ", "n", "o", "n", "u", "m", "b", "e", "r", :enter)
32
+ refute @editor.get_option("number")
33
+ end
34
+
35
+ def test_set_tabstop_value
36
+ feed(":", "s", "e", "t", " ", "t", "a", "b", "s", "t", "o", "p", "=", "8", :enter)
37
+ assert_equal 8, @editor.get_option("tabstop")
38
+ end
39
+
40
+ def test_set_option_query
41
+ feed(":", "s", "e", "t", " ", "n", "u", "m", "b", "e", "r", "?", :enter)
42
+ assert_equal :normal, @editor.mode
43
+ end
44
+
45
+ # --- :bindings ---
46
+
47
+ def test_bindings_command
48
+ feed(":", "b", "i", "n", "d", "i", "n", "g", "s", :enter)
49
+ assert_equal :normal, @editor.mode
50
+ end
51
+
52
+ def test_bindings_with_mode_filter
53
+ feed(":", "b", "i", "n", "d", "i", "n", "g", "s", " ", "n", :enter)
54
+ assert_equal :normal, @editor.mode
55
+ end
56
+
57
+ # --- :tabnew / :tabnext / :tabprev ---
58
+
59
+ def test_tabnext_tabprev_via_ex
60
+ feed(":", "t", "a", "b", "n", "e", "w", :enter)
61
+ feed(":", "t", "a", "b", "p", "r", "e", "v", :enter)
62
+ feed(":", "t", "a", "b", "n", "e", "x", "t", :enter)
63
+ assert_equal :normal, @editor.mode
64
+ end
65
+
66
+ # --- :bnext / :bprev ---
67
+
68
+ def test_bnext_bprev_via_ex
69
+ feed(":", "b", "n", "e", "x", "t", :enter)
70
+ feed(":", "b", "p", "r", "e", "v", :enter)
71
+ assert_equal :normal, @editor.mode
72
+ end
73
+
74
+ # --- :copen / :cclose / :cprev / :lclose / :lprev ---
75
+
76
+ def test_copen_and_cclose
77
+ feed(":", "c", "o", "p", "e", "n", :enter)
78
+ feed(":", "c", "c", "l", "o", "s", "e", :enter)
79
+ assert_equal :normal, @editor.mode
80
+ end
81
+
82
+ def test_cprev_with_empty_list
83
+ feed(":", "c", "p", "r", "e", "v", :enter)
84
+ assert_equal :normal, @editor.mode
85
+ end
86
+
87
+ def test_lclose_without_open
88
+ feed(":", "l", "c", "l", "o", "s", "e", :enter)
89
+ assert_equal :normal, @editor.mode
90
+ end
91
+
92
+ def test_lprev_with_empty_list
93
+ feed(":", "l", "p", "r", "e", "v", :enter)
94
+ assert_equal :normal, @editor.mode
95
+ end
96
+
97
+ # --- :args ---
98
+
99
+ def test_arglist_operations
100
+ feed(":", "a", "r", "g", "s", :enter)
101
+ assert_equal :normal, @editor.mode
102
+ end
103
+
104
+ # --- :wq ---
105
+
106
+ def test_wq_with_no_filename_shows_error
107
+ feed(":", "w", "q", :enter)
108
+ assert_equal :normal, @editor.mode
109
+ end
110
+
111
+ # --- :edit ---
112
+
113
+ def test_edit_no_file_reloads_or_errors
114
+ feed(":", "e", "d", "i", "t", :enter)
115
+ assert_equal :normal, @editor.mode
116
+ end
117
+
118
+ # --- :split / :vsplit + window focus ---
119
+
120
+ def test_window_focus_after_split
121
+ feed(":", "s", "p", "l", "i", "t", :enter)
122
+ original_win_id = @editor.current_window.id
123
+
124
+ feed(:ctrl_w, "w")
125
+ refute_equal original_win_id, @editor.current_window.id
126
+
127
+ feed(:ctrl_w, "j")
128
+ feed(:ctrl_w, "k")
129
+ assert_equal :normal, @editor.mode
130
+ end
131
+
132
+ def test_window_focus_left_right
133
+ feed(":", "v", "s", "p", "l", "i", "t", :enter)
134
+ feed(:ctrl_w, "h")
135
+ feed(:ctrl_w, "l")
136
+ assert_equal :normal, @editor.mode
137
+ end
138
+
139
+ # --- :b# (alternate buffer) ---
140
+
141
+ def test_buffer_alternate_hash
142
+ feed(":", "s", "p", "l", "i", "t", :enter)
143
+ feed(":", "b", "#", :enter)
144
+ assert_equal :normal, @editor.mode
145
+ end
146
+
147
+ # --- rich view toggle ---
148
+
149
+ def test_rich_toggle
150
+ buf.replace_all_lines!(["hello world"])
151
+ feed("g", "r")
152
+ assert_equal :normal, @editor.mode
153
+ end
154
+ end
@@ -4,11 +4,12 @@ class AppMotionTest < Minitest::Test
4
4
  def setup
5
5
  @app = RuVim::App.new(clean: true)
6
6
  @editor = @app.instance_variable_get(:@editor)
7
+ @key_handler = @app.instance_variable_get(:@key_handler)
7
8
  @editor.materialize_intro_buffer!
8
9
  end
9
10
 
10
11
  def press(*keys)
11
- keys.each { |k| @app.send(:handle_normal_key, k) }
12
+ keys.each { |k| @key_handler.send(:handle_normal_key, k) }
12
13
  end
13
14
 
14
15
  def test_find_char_and_repeat
@@ -59,14 +60,14 @@ class AppMotionTest < Minitest::Test
59
60
 
60
61
  @editor.current_window_view_height_hint = 5
61
62
 
62
- @app.send(:handle_normal_key, :pagedown)
63
+ @key_handler.send(:handle_normal_key, :pagedown)
63
64
  assert_equal 4, @editor.current_window.cursor_y
64
65
 
65
66
  @editor.pending_count = 2
66
- @app.send(:handle_normal_key, :pagedown)
67
+ @key_handler.send(:handle_normal_key, :pagedown)
67
68
  assert_equal 12, @editor.current_window.cursor_y
68
69
 
69
- @app.send(:handle_normal_key, :pageup)
70
+ @key_handler.send(:handle_normal_key, :pageup)
70
71
  assert_equal 8, @editor.current_window.cursor_y
71
72
  end
72
73
 
@@ -78,16 +79,16 @@ class AppMotionTest < Minitest::Test
78
79
 
79
80
  @editor.current_window_view_height_hint = 10
80
81
 
81
- @app.send(:handle_normal_key, :ctrl_d)
82
+ @key_handler.send(:handle_normal_key, :ctrl_d)
82
83
  assert_equal 5, @editor.current_window.cursor_y
83
84
 
84
- @app.send(:handle_normal_key, :ctrl_u)
85
+ @key_handler.send(:handle_normal_key, :ctrl_u)
85
86
  assert_equal 0, @editor.current_window.cursor_y
86
87
 
87
- @app.send(:handle_normal_key, :ctrl_f)
88
+ @key_handler.send(:handle_normal_key, :ctrl_f)
88
89
  assert_equal 9, @editor.current_window.cursor_y
89
90
 
90
- @app.send(:handle_normal_key, :ctrl_b)
91
+ @key_handler.send(:handle_normal_key, :ctrl_b)
91
92
  assert_equal 0, @editor.current_window.cursor_y
92
93
  end
93
94
 
@@ -100,11 +101,11 @@ class AppMotionTest < Minitest::Test
100
101
 
101
102
  @editor.current_window_view_height_hint = 10
102
103
 
103
- @app.send(:handle_normal_key, :ctrl_e)
104
+ @key_handler.send(:handle_normal_key, :ctrl_e)
104
105
  assert_equal 6, @editor.current_window.row_offset
105
106
  assert_equal 6, @editor.current_window.cursor_y
106
107
 
107
- @app.send(:handle_normal_key, :ctrl_y)
108
+ @key_handler.send(:handle_normal_key, :ctrl_y)
108
109
  assert_equal 5, @editor.current_window.row_offset
109
110
  assert_equal 6, @editor.current_window.cursor_y
110
111
  end
@@ -118,7 +119,7 @@ class AppMotionTest < Minitest::Test
118
119
  keymaps = @app.instance_variable_get(:@keymaps)
119
120
  keymaps.bind(:normal, ["<C-d>"], "cursor.down")
120
121
 
121
- @app.send(:handle_normal_key, :ctrl_d)
122
+ @key_handler.send(:handle_normal_key, :ctrl_d)
122
123
  assert_equal 1, @editor.current_window.cursor_y
123
124
  end
124
125
 
@@ -131,7 +132,7 @@ class AppMotionTest < Minitest::Test
131
132
  keymaps = @app.instance_variable_get(:@keymaps)
132
133
  keymaps.bind(:normal, ["<PageDown>"], "cursor.down")
133
134
 
134
- @app.send(:handle_normal_key, :pagedown)
135
+ @key_handler.send(:handle_normal_key, :pagedown)
135
136
  assert_equal 1, @editor.current_window.cursor_y
136
137
  end
137
138
 
@@ -4,12 +4,13 @@ class AppRegisterTest < Minitest::Test
4
4
  def setup
5
5
  @app = RuVim::App.new(clean: true)
6
6
  @editor = @app.instance_variable_get(:@editor)
7
+ @key_handler = @app.instance_variable_get(:@key_handler)
7
8
  @editor.materialize_intro_buffer!
8
9
  @buffer = @editor.current_buffer
9
10
  end
10
11
 
11
12
  def press(*keys)
12
- keys.each { |k| @app.send(:handle_normal_key, k) }
13
+ keys.each { |k| @key_handler.send(:handle_normal_key, k) }
13
14
  end
14
15
 
15
16
  def test_yy_updates_register_zero