mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-10-26 11:08:40 +03:00
add specs
This commit is contained in:
parent
2cb9bc46ad
commit
321b493f83
@ -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()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user