add specs

This commit is contained in:
Benjamin Gray 2019-02-18 20:57:52 +11:00
parent 2cb9bc46ad
commit 321b493f83

View File

@ -27,25 +27,21 @@ describe('GrammarSelector', () => {
describe('when grammar-selector:show is triggered', () =>
it('displays a list of all the available grammars', async () => {
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
const grammarView = atom.workspace.getModalPanels()[0].getItem().element
const grammarView = (await getGrammarView(editor)).element
// -1 for removing nullGrammar, +1 for adding "Auto Detect"
// Tree-sitter names the regex and JSDoc grammars
expect(grammarView.querySelectorAll('li').length).toBe(atom.grammars.grammars.filter(g => g.name).length)
expect(grammarView.querySelectorAll('li')[0].textContent).toBe('Auto Detect')
expect(grammarView.textContent.includes('source.a')).toBe(false)
grammarView.querySelectorAll('li').forEach(li => expect(li.textContent).not.toBe(atom.grammars.nullGrammar.name))
expect(grammarView.textContent.includes("Tree-sitter")).toBe(true) // check we are showing and labelling Tree-sitter grammars
})
)
describe('when a grammar is selected', () =>
it('sets the new grammar on the editor', async () => {
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
const grammarView = atom.workspace.getModalPanels()[0].getItem()
const grammarView = await getGrammarView(editor)
grammarView.props.didConfirmSelection(textGrammar)
expect(editor.getGrammar()).toBe(textGrammar)
})
@ -53,17 +49,11 @@ describe('GrammarSelector', () => {
describe('when auto-detect is selected', () =>
it('restores the auto-detected grammar on the editor', async () => {
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
let grammarView = atom.workspace.getModalPanels()[0].getItem()
let grammarView = await getGrammarView(editor)
grammarView.props.didConfirmSelection(textGrammar)
expect(editor.getGrammar()).toBe(textGrammar)
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
grammarView = atom.workspace.getModalPanels()[0].getItem()
grammarView = await getGrammarView(editor)
grammarView.props.didConfirmSelection(grammarView.items[0])
expect(editor.getGrammar()).toBe(jsGrammar)
})
@ -72,10 +62,7 @@ describe('GrammarSelector', () => {
describe("when the editor's current grammar is the null grammar", () =>
it('displays Auto Detect as the selected grammar', async () => {
editor.setGrammar(atom.grammars.nullGrammar)
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
const grammarView = atom.workspace.getModalPanels()[0].getItem().element
const grammarView = (await getGrammarView(editor)).element
expect(grammarView.querySelector('li.active').textContent).toBe('Auto Detect')
})
)
@ -85,10 +72,7 @@ describe('GrammarSelector', () => {
editor = await atom.workspace.open()
expect(editor.getGrammar()).not.toBe(jsGrammar)
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
const grammarView = atom.workspace.getModalPanels()[0].getItem()
const grammarView = await getGrammarView(editor)
grammarView.props.didConfirmSelection(jsGrammar)
expect(editor.getGrammar()).toBe(jsGrammar)
})
@ -170,6 +154,52 @@ describe('GrammarSelector', () => {
})
)
describe('when toggling hideDuplicateTextMateGrammars', () => {
it('shows only the Tree-sitter if true and both exist', async () => {
// the main JS grammar has both a TextMate and Tree-sitter implementation
atom.config.set('grammar-selector.hideDuplicateTextMateGrammars', true)
const grammarView = await getGrammarView(editor)
const observedNames = new Set()
grammarView.element.querySelectorAll('li').forEach(li => {
const name = li.getAttribute('data-grammar')
expect(observedNames.has(name)).toBe(false)
observedNames.add(name)
})
// check the seen JS is actually the Tree-sitter one
const list = atom.workspace.getModalPanels()[0].item
for (const item of list.items) {
if (item.name === "JavaScript") {
expect(item.constructor.name === "TreeSitterGrammar")
}
}
})
it('shows both if false', async () => {
atom.config.set('grammar-selector.hideDuplicateTextMateGrammars', false)
const grammarView = await getGrammarView(editor)
let jsCount = 0
grammarView.element.querySelectorAll('li').forEach(li => {
const name = li.getAttribute('data-grammar')
if (name === "JavaScript") jsCount++
})
expect(jsCount).toBe(2)
})
})
describe('for every Tree-sitter grammar', () => {
it('adds a label to identify it as Tree-sitter', async () => {
const grammarView = await getGrammarView(editor)
const elements = grammarView.element.querySelectorAll('li')
const listItems = atom.workspace.getModalPanels()[0].item.items
for (let i = 0; i < listItems.length; i++) {
if (listItems[i].constructor.name === "TreeSitterGrammar") {
expect(elements[i].childNodes[1].childNodes[0].className.startsWith('grammar-selector-parser')).toBe(true)
}
}
})
})
describe('when clicked', () =>
it('shows the grammar selector modal', () => {
const eventHandler = jasmine.createSpy('eventHandler')
@ -193,3 +223,9 @@ function getTooltipText (element) {
const [tooltip] = atom.tooltips.findTooltips(element)
return tooltip.getTitle()
}
async function getGrammarView (editor) {
atom.commands.dispatch(editor.getElement(), 'grammar-selector:show')
await SelectListView.getScheduler().getNextUpdatePromise()
return atom.workspace.getModalPanels()[0].getItem()
}