]> git.r.bdr.sh - rbdr/dotfiles/blame - atom/packages/vim-mode/spec/prefixes-spec.coffee
Update atoms
[rbdr/dotfiles] / atom / packages / vim-mode / spec / prefixes-spec.coffee
CommitLineData
24c7594d
BB
1helpers = require './spec-helper'
2
3describe "Prefixes", ->
4 [editor, editorElement, vimState] = []
5
6 beforeEach ->
7 vimMode = atom.packages.loadPackage('vim-mode')
8 vimMode.activateResources()
9
10 helpers.getEditorElement (element) ->
11 editorElement = element
12 editor = editorElement.getModel()
13 vimState = editorElement.vimState
455f099b
BB
14 vimState.activateNormalMode()
15 vimState.resetNormalMode()
24c7594d
BB
16
17 keydown = (key, options={}) ->
18 options.element ?= editorElement
19 helpers.keydown(key, options)
20
21 describe "Repeat", ->
22 describe "with operations", ->
23 beforeEach ->
24 editor.setText("123456789abc")
25 editor.setCursorScreenPosition([0, 0])
26
27 it "repeats N times", ->
28 keydown('3')
29 keydown('x')
30
31 expect(editor.getText()).toBe '456789abc'
32
33 it "repeats NN times", ->
34 keydown('1')
35 keydown('0')
36 keydown('x')
37
38 expect(editor.getText()).toBe 'bc'
39
40 describe "with motions", ->
41 beforeEach ->
42 editor.setText('one two three')
43 editor.setCursorScreenPosition([0, 0])
44
45 it "repeats N times", ->
46 keydown('d')
47 keydown('2')
48 keydown('w')
49
50 expect(editor.getText()).toBe 'three'
51
52 describe "in visual mode", ->
53 beforeEach ->
54 editor.setText('one two three')
55 editor.setCursorScreenPosition([0, 0])
56
57 it "repeats movements in visual mode", ->
58 keydown("v")
59 keydown("2")
60 keydown("w")
61
62 expect(editor.getCursorScreenPosition()).toEqual [0, 9]
63
64 describe "Register", ->
65 describe "the a register", ->
66 it "saves a value for future reading", ->
67 vimState.setRegister('a', text: 'new content')
68 expect(vimState.getRegister("a").text).toEqual 'new content'
69
70 it "overwrites a value previously in the register", ->
71 vimState.setRegister('a', text: 'content')
72 vimState.setRegister('a', text: 'new content')
73 expect(vimState.getRegister("a").text).toEqual 'new content'
74
75 describe "the B register", ->
76 it "saves a value for future reading", ->
77 vimState.setRegister('B', text: 'new content')
78 expect(vimState.getRegister("b").text).toEqual 'new content'
79 expect(vimState.getRegister("B").text).toEqual 'new content'
80
81 it "appends to a value previously in the register", ->
82 vimState.setRegister('b', text: 'content')
83 vimState.setRegister('B', text: 'new content')
84 expect(vimState.getRegister("b").text).toEqual 'contentnew content'
85
86 it "appends linewise to a linewise value previously in the register", ->
87 vimState.setRegister('b', {type: 'linewise', text: 'content\n'})
88 vimState.setRegister('B', text: 'new content')
89 expect(vimState.getRegister("b").text).toEqual 'content\nnew content\n'
90
91 it "appends linewise to a character value previously in the register", ->
92 vimState.setRegister('b', text: 'content')
93 vimState.setRegister('B', {type: 'linewise', text: 'new content\n'})
94 expect(vimState.getRegister("b").text).toEqual 'content\nnew content\n'
95
96
97 describe "the * register", ->
98 describe "reading", ->
99 it "is the same the system clipboard", ->
100 expect(vimState.getRegister('*').text).toEqual 'initial clipboard content'
101 expect(vimState.getRegister('*').type).toEqual 'character'
102
103 describe "writing", ->
104 beforeEach ->
105 vimState.setRegister('*', text: 'new content')
106
107 it "overwrites the contents of the system clipboard", ->
108 expect(atom.clipboard.read()).toEqual 'new content'
109
110 # FIXME: once linux support comes out, this needs to read from
111 # the correct clipboard. For now it behaves just like the * register
112 # See :help x11-cut-buffer and :help registers for more details on how these
113 # registers work on an X11 based system.
114 describe "the + register", ->
115 describe "reading", ->
116 it "is the same the system clipboard", ->
117 expect(vimState.getRegister('*').text).toEqual 'initial clipboard content'
118 expect(vimState.getRegister('*').type).toEqual 'character'
119
120 describe "writing", ->
121 beforeEach ->
122 vimState.setRegister('*', text: 'new content')
123
124 it "overwrites the contents of the system clipboard", ->
125 expect(atom.clipboard.read()).toEqual 'new content'
126
127 describe "the _ register", ->
128 describe "reading", ->
129 it "is always the empty string", ->
130 expect(vimState.getRegister("_").text).toEqual ''
131
132 describe "writing", ->
133 it "throws away anything written to it", ->
134 vimState.setRegister('_', text: 'new content')
135 expect(vimState.getRegister("_").text).toEqual ''
136
137 describe "the % register", ->
138 beforeEach ->
139 spyOn(editor, 'getURI').andReturn('/Users/atom/known_value.txt')
140
141 describe "reading", ->
142 it "returns the filename of the current editor", ->
143 expect(vimState.getRegister('%').text).toEqual '/Users/atom/known_value.txt'
144
145 describe "writing", ->
146 it "throws away anything written to it", ->
147 vimState.setRegister('%', "new content")
148 expect(vimState.getRegister('%').text).toEqual '/Users/atom/known_value.txt'
455f099b
BB
149
150 describe "the ctrl-r command in insert mode", ->
151 beforeEach ->
152 editor.setText "02\n"
153 editor.setCursorScreenPosition [0, 0]
154 vimState.setRegister('"', text: '345')
155 vimState.setRegister('a', text: 'abc')
156 atom.clipboard.write "clip"
157 keydown 'a'
158 editor.insertText '1'
159
160 it "inserts contents of the unnamed register with \"", ->
161 keydown 'r', ctrl: true
162 keydown '"'
163 expect(editor.getText()).toBe '013452\n'
164
165 describe "when useClipboardAsDefaultRegister enabled", ->
166 it "inserts contents from clipboard with \"", ->
167 atom.config.set 'vim-mode.useClipboardAsDefaultRegister', true
168 keydown 'r', ctrl: true
169 keydown '"'
170 expect(editor.getText()).toBe '01clip2\n'
171
172 it "inserts contents of the 'a' register", ->
173 keydown 'r', ctrl: true
174 keydown 'a'
175 expect(editor.getText()).toBe '01abc2\n'
176
177 it "is cancelled with the escape key", ->
178 keydown 'r', ctrl: true
179 keydown 'escape'
180 expect(editor.getText()).toBe '012\n'
181 expect(vimState.mode).toBe "insert"
182 expect(editor.getCursorScreenPosition()).toEqual [0, 2]