diff --git a/spec/atom/root-view-spec.coffee b/spec/atom/root-view-spec.coffee index 8d1042d3d..f4eca6f0a 100644 --- a/spec/atom/root-view-spec.coffee +++ b/spec/atom/root-view-spec.coffee @@ -38,49 +38,54 @@ describe "RootView", -> rootView.addPane $('
') expect(rootView.vertical.children().length).toBe 2 - describe ".toggleFileFinder()", -> - describe "when there is a project", -> - it "shows the FileFinder when it is not on screen and hides it when it is", -> - runs -> + describe "the file finder", -> + describe "when the toggle-file-finder event is triggered", -> + describe "when there is a project", -> + it "shows the FileFinder when it is not on screen and hides it when it is", -> + runs -> + $('#jasmine-content').append(rootView) + expect(rootView.find('.file-finder')).not.toExist() + + waitsForPromise -> + rootView.resultOfTrigger 'toggle-file-finder' + + runs -> + expect(rootView.find('.file-finder')).toExist() + expect(rootView.find('.file-finder input:focus')).toExist() + rootView.trigger 'toggle-file-finder' + + expect(rootView.find('.editor textarea:focus')).toExist() + expect(rootView.find('.file-finder')).not.toExist() + + it "shows all relative file paths for the current project", -> + waitsForPromise -> + rootView.resultOfTrigger 'toggle-file-finder' + + waitsForPromise -> + project.getFilePaths().done (paths) -> + expect(rootView.fileFinder.urlList.children('li').length).toBe paths.length + + for path in paths + relativePath = path.replace(project.url, '') + expect(rootView.fileFinder.urlList.find("li:contains(#{relativePath}):not(:contains(#{project.url}))")).toExist() + + describe "when there is no project", -> + beforeEach -> + rootView = RootView.build() + + it "does not open the FileFinder", -> + expect(rootView.editor.buffer.url).toBeUndefined() expect(rootView.find('.file-finder')).not.toExist() - - waitsForPromise -> - rootView.resultOfTrigger 'toggle-file-finder' - - runs -> - expect(rootView.find('.file-finder')).toExist() rootView.trigger 'toggle-file-finder' expect(rootView.find('.file-finder')).not.toExist() - it "shows all relative file paths for the current project", -> - waitsForPromise -> - rootView.resultOfTrigger 'toggle-file-finder' - - waitsForPromise -> - project.getFilePaths().done (paths) -> - expect(rootView.fileFinder.urlList.children('li').length).toBe paths.length - - for path in paths - relativePath = path.replace(project.url, '') - expect(rootView.fileFinder.urlList.find("li:contains(#{relativePath}):not(:contains(#{project.url}))")).toExist() - - describe "when there is no project", -> - beforeEach -> - rootView = RootView.build() - - it "does not open the FileFinder", -> - expect(rootView.editor.buffer.url).toBeUndefined() - expect(rootView.find('.file-finder')).not.toExist() - rootView.trigger 'toggle-file-finder' - expect(rootView.find('.file-finder')).not.toExist() - - describe "when a path is selected in the file finder", -> - it "opens the file associated with that path in the editor", -> - waitsForPromise -> rootView.resultOfTrigger 'toggle-file-finder' - runs -> - firstLi = rootView.fileFinder.find('li:first') - rootView.fileFinder.trigger 'select' - expect(rootView.editor.buffer.url).toBe(project.url + firstLi.text()) + describe "when a path is selected in the file finder", -> + it "opens the file associated with that path in the editor", -> + waitsForPromise -> rootView.resultOfTrigger 'toggle-file-finder' + runs -> + firstLi = rootView.fileFinder.find('li:first') + rootView.fileFinder.trigger 'select' + expect(rootView.editor.buffer.url).toBe(project.url + firstLi.text()) describe "global keymap wiring", -> commandHandler = null diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index 554ce73c0..cdaf7a4a8 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -7,6 +7,7 @@ BindingSet = require 'binding-set' afterEach -> (new Native).resetMainMenu() atom.globalKeymap.reset() + $('#jasmine-content').empty() window.atom = new (require 'app') diff --git a/src/atom/editor.coffee b/src/atom/editor.coffee index 1cc8f8c4d..7bae90f3a 100644 --- a/src/atom/editor.coffee +++ b/src/atom/editor.coffee @@ -37,7 +37,7 @@ class Editor extends Template @aceEditor.setTheme(require "ace/theme/twilight") @aceEditor.setKeyboardHandler handleKeyboard: (data, hashId, keyString, keyCode, event) => - if event and @keyEventHandler?.handleKeyEvent(event) + if event and @keyEventHandler and @keyEventHandler.handleKeyEvent(event) == false { command: { exec: -> }} else null @@ -45,6 +45,9 @@ class Editor extends Template getAceSession: -> @aceEditor.getSession() + focus: -> + @aceEditor.focus() + save: -> if @buffer.url @buffer.save() diff --git a/src/atom/root-view.coffee b/src/atom/root-view.coffee index a79944846..c0704cc2f 100644 --- a/src/atom/root-view.coffee +++ b/src/atom/root-view.coffee @@ -32,6 +32,9 @@ class RootView extends Template @on 'toggle-file-finder', => @toggleFileFinder() + @on 'focusout', (e) => + @editor.focus() unless e.target is @editor.find('textarea')[0] + createProject: (url) -> if url @project = new Project(fs.directory(url))