Merge pull request #118 from jazzpi/rework-commands
Rework command calling, improve :substitute
This commit is contained in:
commit
19f1a74812
3 changed files with 239 additions and 79 deletions
|
|
@ -12,27 +12,37 @@ describe "the commands", ->
|
|||
beforeEach ->
|
||||
vimMode = atom.packages.loadPackage('vim-mode')
|
||||
exMode = atom.packages.loadPackage('ex-mode')
|
||||
exMode.activate()
|
||||
waitsForPromise ->
|
||||
activationPromise = exMode.activate()
|
||||
helpers.activateExMode()
|
||||
activationPromise
|
||||
|
||||
runs ->
|
||||
spyOn(exMode.mainModule.globalExState, 'setVim').andCallThrough()
|
||||
|
||||
waitsForPromise ->
|
||||
vimMode.activate().then ->
|
||||
helpers.activateExMode().then ->
|
||||
dir = path.join(os.tmpdir(), "atom-ex-mode-spec-#{uuid.v4()}")
|
||||
dir2 = path.join(os.tmpdir(), "atom-ex-mode-spec-#{uuid.v4()}")
|
||||
fs.makeTreeSync(dir)
|
||||
fs.makeTreeSync(dir2)
|
||||
atom.project.setPaths([dir, dir2])
|
||||
vimMode.activate()
|
||||
|
||||
helpers.getEditorElement (element) ->
|
||||
atom.commands.dispatch(element, 'ex-mode:open')
|
||||
keydown('escape')
|
||||
editorElement = element
|
||||
editor = editorElement.getModel()
|
||||
vimState = vimMode.mainModule.getEditorState(editor)
|
||||
exState = exMode.mainModule.exStates.get(editor)
|
||||
vimState.activateNormalMode()
|
||||
vimState.resetNormalMode()
|
||||
editor.setText("abc\ndef\nabc\ndef")
|
||||
waitsFor ->
|
||||
exMode.mainModule.globalExState.setVim.calls.length > 0
|
||||
|
||||
runs ->
|
||||
dir = path.join(os.tmpdir(), "atom-ex-mode-spec-#{uuid.v4()}")
|
||||
dir2 = path.join(os.tmpdir(), "atom-ex-mode-spec-#{uuid.v4()}")
|
||||
fs.makeTreeSync(dir)
|
||||
fs.makeTreeSync(dir2)
|
||||
atom.project.setPaths([dir, dir2])
|
||||
|
||||
helpers.getEditorElement (element) ->
|
||||
atom.commands.dispatch(element, "ex-mode:open")
|
||||
keydown('escape')
|
||||
editorElement = element
|
||||
editor = editorElement.getModel()
|
||||
vimState = vimMode.mainModule.getEditorState(editor)
|
||||
exState = exMode.mainModule.exStates.get(editor)
|
||||
vimState.activateNormalMode()
|
||||
vimState.resetNormalMode()
|
||||
editor.setText("abc\ndef\nabc\ndef")
|
||||
|
||||
afterEach ->
|
||||
fs.removeSync(dir)
|
||||
|
|
@ -355,7 +365,7 @@ describe "the commands", ->
|
|||
submitNormalModeInputText('wq wq-2')
|
||||
expect(Ex.write)
|
||||
.toHaveBeenCalled()
|
||||
expect(Ex.write.calls[0].args[1].trim()).toEqual('wq-2')
|
||||
expect(Ex.write.calls[0].args[0].args.trim()).toEqual('wq-2')
|
||||
waitsFor((-> Ex.quit.wasCalled), "the :quit command to be called", 100)
|
||||
|
||||
describe ":xit", ->
|
||||
|
|
@ -565,6 +575,103 @@ describe "the commands", ->
|
|||
it "can't be delimited by '\"'", -> test '"'
|
||||
it "can't be delimited by '|'", -> test '|'
|
||||
|
||||
describe "empty replacement", ->
|
||||
beforeEach ->
|
||||
editor.setText('abcabc\nabcabc')
|
||||
|
||||
it "removes the pattern without modifiers", ->
|
||||
keydown(':')
|
||||
submitNormalModeInputText(":substitute/abc//")
|
||||
expect(editor.getText()).toEqual('abc\nabcabc')
|
||||
|
||||
it "removes the pattern with modifiers", ->
|
||||
keydown(':')
|
||||
submitNormalModeInputText(":substitute/abc//g")
|
||||
expect(editor.getText()).toEqual('\nabcabc')
|
||||
|
||||
describe "replacing with escape sequences", ->
|
||||
beforeEach ->
|
||||
editor.setText('abc,def,ghi')
|
||||
|
||||
test = (escapeChar, escaped) ->
|
||||
keydown(':')
|
||||
submitNormalModeInputText(":substitute/,/\\#{escapeChar}/g")
|
||||
expect(editor.getText()).toEqual("abc#{escaped}def#{escaped}ghi")
|
||||
|
||||
it "replaces with a tab", -> test('t', '\t')
|
||||
it "replaces with a linefeed", -> test('n', '\n')
|
||||
it "replaces with a carriage return", -> test('r', '\r')
|
||||
|
||||
describe "case sensitivity", ->
|
||||
describe "respects the smartcase setting", ->
|
||||
beforeEach ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case sensitive search if smartcase is off and the pattern is lowercase", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', false)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/abc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaABC\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case sensitive search if smartcase is off and the pattern is uppercase", ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/ABC/ghi/g')
|
||||
expect(editor.getText()).toEqual('abcaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case insensitive search if smartcase is on and the pattern is lowercase", ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', true)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/abc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case sensitive search if smartcase is on and the pattern is uppercase", ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/ABC/ghi/g')
|
||||
expect(editor.getText()).toEqual('abcaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
describe "\\c and \\C in the pattern", ->
|
||||
beforeEach ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case insensitive search if smartcase is off and \c is in the pattern", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', false)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/abc\\c/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "doesn't matter where in the pattern \\c is", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', false)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/a\\cbc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "uses case sensitive search if smartcase is on, \\C is in the pattern and the pattern is lowercase", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', true)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/a\\Cbc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaABC\ndefdDEF\nabcaABC')
|
||||
|
||||
it "overrides \\C with \\c if \\C comes first", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', true)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/a\\Cb\\cc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "overrides \\C with \\c if \\c comes first", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', true)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/a\\cb\\Cc/ghi/g')
|
||||
expect(editor.getText()).toEqual('ghiaghi\ndefdDEF\nabcaABC')
|
||||
|
||||
it "overrides an appended /i flag with \\C", ->
|
||||
atom.config.set('vim-mode.useSmartcaseForSearch', true)
|
||||
keydown(':')
|
||||
submitNormalModeInputText(':substitute/ab\\Cc/ghi/gi')
|
||||
expect(editor.getText()).toEqual('ghiaABC\ndefdDEF\nabcaABC')
|
||||
|
||||
describe "capturing groups", ->
|
||||
beforeEach ->
|
||||
editor.setText('abcaABC\ndefdDEF\nabcaABC')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue