From 321d424c444ef6a931a7d27fb93efef40b124751 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 8 Jan 2013 12:57:58 -0800 Subject: [PATCH] Support unsetting explicit grammar for path --- spec/app/grammar-view-spec.coffee | 49 +++++++++++++++++++++++++++++++ src/app/grammar-view.coffee | 10 +++++-- 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 spec/app/grammar-view-spec.coffee diff --git a/spec/app/grammar-view-spec.coffee b/spec/app/grammar-view-spec.coffee new file mode 100644 index 000000000..2b059ea8d --- /dev/null +++ b/spec/app/grammar-view-spec.coffee @@ -0,0 +1,49 @@ +RootView = require 'root-view' +GrammarView = require 'grammar-view' +_ = require 'underscore' + +describe "GrammarView", -> + [editor, rootView, textGrammar, jsGrammar] = [] + + beforeEach -> + path = require.resolve('fixtures/sample.js') + syntax.removeGrammarForPath(path) + rootView = new RootView(path) + editor = rootView.getActiveEditor() + rootView.attachToDom() + textGrammar = _.find syntax.grammars, (grammar) -> grammar.name is 'Plain Text' + expect(textGrammar).toBeTruthy() + jsGrammar = _.find syntax.grammars, (grammar) -> grammar.name is 'JavaScript' + expect(jsGrammar).toBeTruthy() + expect(editor.getGrammar()).toBe jsGrammar + + afterEach -> + rootView.deactivate() + + describe "when editor:select-grammar is toggled", -> + it "displays a list of all the available grammars", -> + editor.trigger 'editor:select-grammar' + grammarView = rootView.find('.grammar-view').view() + expect(grammarView).toExist() + grammars = syntax.grammars + expect(grammarView.list.children('li').length).toBe grammars.length + 1 + expect(grammarView.list.children('li:first').text()).toBe 'Auto Detect' + + describe "when a grammar is selected", -> + it "sets the new grammar on the editor", -> + editor.trigger 'editor:select-grammar' + grammarView = rootView.find('.grammar-view').view() + grammarView.confirmed(textGrammar) + expect(editor.getGrammar()).toBe textGrammar + + describe "when auto-detect is selected", -> + it "restores the auto-detected grammar on the editor", -> + editor.trigger 'editor:select-grammar' + grammarView = rootView.find('.grammar-view').view() + grammarView.confirmed(textGrammar) + expect(editor.getGrammar()).toBe textGrammar + + editor.trigger 'editor:select-grammar' + grammarView = rootView.find('.grammar-view').view() + grammarView.confirmed(grammarView.array[0]) + expect(editor.getGrammar()).toBe jsGrammar diff --git a/src/app/grammar-view.coffee b/src/app/grammar-view.coffee index 7c90ff4aa..1d57d5896 100644 --- a/src/app/grammar-view.coffee +++ b/src/app/grammar-view.coffee @@ -11,6 +11,7 @@ class GrammarView extends SelectList initialize: (@editor) -> @currentGrammar = @editor.getGrammar() @path = @editor.getPath() + @autoDetect = name: 'Auto Detect' requireStylesheet 'grammar-view.css' @command 'editor:select-grammar', => @cancel() @@ -30,7 +31,9 @@ class GrammarView extends SelectList @li grammar.name, class: grammarClass populate: -> - @setArray(syntax.grammars) + grammars = new Array(syntax.grammars...) + grammars.unshift(@autoDetect) + @setArray(grammars) cancelled: -> @miniEditor.setText('') @@ -38,7 +41,10 @@ class GrammarView extends SelectList confirmed: (grammar) -> @cancel() - syntax.addGrammarForPath(@path, grammar) + if grammar is @autoDetect + syntax.removeGrammarForPath(@path) + else + syntax.addGrammarForPath(@path, grammar) @editor.reloadGrammar() attach: ->