mirror of
https://github.com/atom/atom.git
synced 2026-02-19 02:44:29 -05:00
Move EditorCommand helpers elsewhere
RootView and Editor now have helpers that support binding events to callbacks, binding a callback to all current and future editors, and replacing the selected text via a transforming callback.
This commit is contained in:
@@ -1828,3 +1828,55 @@ describe "Editor", ->
|
||||
editor.pageUp()
|
||||
expect(editor.getCursor().getScreenPosition().row).toBe(0)
|
||||
expect(editor.getFirstVisibleScreenRow()).toBe(0)
|
||||
|
||||
describe ".replaceSelectedText()", ->
|
||||
it "doesn't call the replace function when the selection is empty", ->
|
||||
replaced = false
|
||||
edited = false
|
||||
replacer = (text) ->
|
||||
replaced = true
|
||||
'new'
|
||||
|
||||
editor.moveCursorToTop()
|
||||
edited = editor.replaceSelectedText(replacer)
|
||||
expect(replaced).toBe false
|
||||
expect(edited).toBe false
|
||||
|
||||
it "returns true when transformed text is non-empty", ->
|
||||
replaced = false
|
||||
edited = false
|
||||
replacer = (text) ->
|
||||
replaced = true
|
||||
'new'
|
||||
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
edited = editor.replaceSelectedText(replacer)
|
||||
expect(replaced).toBe true
|
||||
expect(edited).toBe true
|
||||
|
||||
it "returns false when transformed text is null", ->
|
||||
replaced = false
|
||||
edited = false
|
||||
replacer = (text) ->
|
||||
replaced = true
|
||||
null
|
||||
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
edited = editor.replaceSelectedText(replacer)
|
||||
expect(replaced).toBe true
|
||||
expect(edited).toBe false
|
||||
|
||||
it "returns false when transformed text is undefined", ->
|
||||
replaced = false
|
||||
edited = false
|
||||
replacer = (text) ->
|
||||
replaced = true
|
||||
undefined
|
||||
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
edited = editor.replaceSelectedText(replacer)
|
||||
expect(replaced).toBe true
|
||||
expect(edited).toBe false
|
||||
|
||||
@@ -690,3 +690,31 @@ describe "RootView", ->
|
||||
expect(fs.read(buffer1.getPath())).toBe("edited1")
|
||||
expect(buffer2.isModified()).toBe(false)
|
||||
expect(fs.read(buffer2.getPath())).toBe("edited2")
|
||||
|
||||
fdescribe ".eachEditor(callback)", ->
|
||||
beforeEach ->
|
||||
rootView.attachToDom()
|
||||
|
||||
it "invokes the callback for existing editor", ->
|
||||
count = 0
|
||||
callbackEditor = null
|
||||
callback = (editor) ->
|
||||
callbackEditor = editor
|
||||
count++
|
||||
rootView.eachEditor(callback)
|
||||
expect(count).toBe 1
|
||||
expect(callbackEditor).toBe rootView.getActiveEditor()
|
||||
|
||||
it "invokes the callback for new editor", ->
|
||||
count = 0
|
||||
callbackEditor = null
|
||||
callback = (editor) ->
|
||||
callbackEditor = editor
|
||||
count++
|
||||
|
||||
rootView.eachEditor(callback)
|
||||
count = 0
|
||||
callbackEditor = null
|
||||
rootView.getActiveEditor().splitRight()
|
||||
expect(count).toBe 1
|
||||
expect(callbackEditor).toBe rootView.getActiveEditor()
|
||||
|
||||
@@ -1,140 +0,0 @@
|
||||
EditorCommand = require 'editor-command'
|
||||
LowerCaseCommand = require 'lowercase-command'
|
||||
UpperCaseCommand = require 'uppercase-command'
|
||||
RootView = require 'root-view'
|
||||
fs = require 'fs'
|
||||
|
||||
describe "EditorCommand", ->
|
||||
[rootView, editor, path] = []
|
||||
|
||||
beforeEach ->
|
||||
rootView = new RootView
|
||||
rootView.open(require.resolve 'fixtures/sample.js')
|
||||
|
||||
rootView.focus()
|
||||
editor = rootView.getActiveEditor()
|
||||
|
||||
afterEach ->
|
||||
rootView.remove()
|
||||
|
||||
describe "@replaceSelectedText()", ->
|
||||
it "returns true when transformed text is non-empty", ->
|
||||
transformed = false
|
||||
edited = false
|
||||
class CustomCommand extends EditorCommand
|
||||
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'custom', =>
|
||||
edited = @replaceSelectedText editor, (text) ->
|
||||
transformed = true
|
||||
'new'
|
||||
|
||||
CustomCommand.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
editor.trigger 'custom'
|
||||
expect(transformed).toBe true
|
||||
expect(edited).toBe true
|
||||
|
||||
it "returns false when transformed text is null", ->
|
||||
transformed = false
|
||||
edited = false
|
||||
class CustomCommand extends EditorCommand
|
||||
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'custom', =>
|
||||
edited = @replaceSelectedText editor, (text) ->
|
||||
transformed = true
|
||||
null
|
||||
|
||||
CustomCommand.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
editor.trigger 'custom'
|
||||
expect(transformed).toBe true
|
||||
expect(edited).toBe false
|
||||
|
||||
it "returns false when transformed text is undefined", ->
|
||||
transformed = false
|
||||
edited = false
|
||||
class CustomCommand extends EditorCommand
|
||||
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'custom', =>
|
||||
edited = @replaceSelectedText editor, (text) ->
|
||||
transformed = true
|
||||
undefined
|
||||
|
||||
CustomCommand.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
editor.trigger 'custom'
|
||||
expect(transformed).toBe true
|
||||
expect(edited).toBe false
|
||||
|
||||
describe "custom sub-class", ->
|
||||
it "removes vowels from selected text", ->
|
||||
class VowelRemover extends EditorCommand
|
||||
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'devowel', =>
|
||||
@replaceSelectedText editor, (text) ->
|
||||
text.replace(/[aeiouy]/gi, '')
|
||||
|
||||
VowelRemover.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
editor.trigger 'devowel'
|
||||
expect(editor.lineForBufferRow(0)).toBe 'vr qcksrt = fnctn () {'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'vr qcksrt = fnctn () {'
|
||||
expect(editor.getCursorBufferPosition()).toBe(editor.getSelection().getBufferRange().end)
|
||||
|
||||
it "maintains reversed selections", ->
|
||||
class VowelRemover extends EditorCommand
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'devowel', =>
|
||||
@replaceSelectedText editor, (text) ->
|
||||
text.replace(/[aeiouy]/gi, '')
|
||||
|
||||
VowelRemover.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.moveCursorToEndOfLine()
|
||||
editor.selectToBeginningOfLine()
|
||||
editor.trigger 'devowel'
|
||||
expect(editor.lineForBufferRow(0)).toBe 'vr qcksrt = fnctn () {'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'vr qcksrt = fnctn () {'
|
||||
expect(editor.getCursorBufferPosition()).toBe(editor.getSelection().getBufferRange().start)
|
||||
|
||||
it "doesn't transform empty selections", ->
|
||||
callbackCount = 0
|
||||
class CustomCommand extends EditorCommand
|
||||
@onEditor: (editor) ->
|
||||
@register editor, 'meta-V', 'custom', =>
|
||||
@replaceSelectedText editor, (text) ->
|
||||
callbackCount++
|
||||
text
|
||||
|
||||
CustomCommand.activate(rootView)
|
||||
editor.moveCursorToTop()
|
||||
editor.selectToEndOfLine()
|
||||
editor.trigger 'custom'
|
||||
expect(callbackCount).toBe 1
|
||||
editor.clearSelections()
|
||||
editor.trigger 'custom'
|
||||
expect(callbackCount).toBe 1
|
||||
|
||||
describe "LowerCaseCommand", ->
|
||||
it "replaces the selected text with all lower case characters", ->
|
||||
LowerCaseCommand.activate(rootView)
|
||||
editor.setSelectedBufferRange([[11,14], [11,19]])
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'Array'
|
||||
editor.trigger 'lowercase'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'array'
|
||||
|
||||
describe "UpperCaseCommand", ->
|
||||
it "replaces the selected text with all upper case characters", ->
|
||||
UpperCaseCommand.activate(rootView)
|
||||
editor.setSelectedBufferRange([[0,0], [0,3]])
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'var'
|
||||
editor.trigger 'uppercase'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'VAR'
|
||||
23
spec/extensions/lowercase-command-spec.coffee
Normal file
23
spec/extensions/lowercase-command-spec.coffee
Normal file
@@ -0,0 +1,23 @@
|
||||
LowerCaseCommand = require 'lowercase-command'
|
||||
RootView = require 'root-view'
|
||||
fs = require 'fs'
|
||||
|
||||
describe "LowerCaseCommand", ->
|
||||
[rootView, editor, path] = []
|
||||
|
||||
beforeEach ->
|
||||
rootView = new RootView
|
||||
rootView.open(require.resolve 'fixtures/sample.js')
|
||||
|
||||
rootView.focus()
|
||||
editor = rootView.getActiveEditor()
|
||||
|
||||
afterEach ->
|
||||
rootView.remove()
|
||||
|
||||
it "replaces the selected text with all lower case characters", ->
|
||||
LowerCaseCommand.activate(rootView)
|
||||
editor.setSelectedBufferRange([[11,14], [11,19]])
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'Array'
|
||||
editor.trigger 'lowercase'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'array'
|
||||
23
spec/extensions/uppercase-command-spec.coffee
Normal file
23
spec/extensions/uppercase-command-spec.coffee
Normal file
@@ -0,0 +1,23 @@
|
||||
UpperCaseCommand = require 'uppercase-command'
|
||||
RootView = require 'root-view'
|
||||
fs = require 'fs'
|
||||
|
||||
describe "UpperCaseCommand", ->
|
||||
[rootView, editor, path] = []
|
||||
|
||||
beforeEach ->
|
||||
rootView = new RootView
|
||||
rootView.open(require.resolve 'fixtures/sample.js')
|
||||
|
||||
rootView.focus()
|
||||
editor = rootView.getActiveEditor()
|
||||
|
||||
afterEach ->
|
||||
rootView.remove()
|
||||
|
||||
it "replaces the selected text with all upper case characters", ->
|
||||
UpperCaseCommand.activate(rootView)
|
||||
editor.setSelectedBufferRange([[0,0], [0,3]])
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'var'
|
||||
editor.trigger 'uppercase'
|
||||
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'VAR'
|
||||
Reference in New Issue
Block a user