Files
atom/packages/incompatible-packages/spec/incompatible-packages-spec.js
2019-02-25 12:19:44 +01:00

82 lines
2.4 KiB
JavaScript

/** @babel */
import path from 'path'
import IncompatiblePackagesComponent from '../lib/incompatible-packages-component'
import StatusIconComponent from '../lib/status-icon-component'
// This exists only so that CI passes on both Atom 1.6 and Atom 1.8+.
function findStatusBar () {
if (typeof atom.workspace.getFooterPanels === 'function') {
const footerPanels = atom.workspace.getFooterPanels()
if (footerPanels.length > 0) {
return footerPanels[0].getItem()
}
}
return atom.workspace.getBottomPanels()[0].getItem()
}
describe('Incompatible packages', () => {
let statusBar
beforeEach(() => {
atom.views.getView(atom.workspace)
waitsForPromise(() => atom.packages.activatePackage('status-bar'))
runs(() => {
statusBar = findStatusBar()
})
})
describe('when there are packages with incompatible native modules', () => {
beforeEach(() => {
let incompatiblePackage = atom.packages.loadPackage(
path.join(__dirname, 'fixtures', 'incompatible-package')
)
spyOn(incompatiblePackage, 'isCompatible').andReturn(false)
incompatiblePackage.incompatibleModules = []
waitsForPromise(() =>
atom.packages.activatePackage('incompatible-packages')
)
waits(1)
})
it('adds an icon to the status bar', () => {
let statusBarIcon = statusBar.getRightTiles()[0].getItem()
expect(statusBarIcon.constructor).toBe(StatusIconComponent)
})
describe('clicking the icon', () => {
it('displays the incompatible packages view in a pane', () => {
let statusBarIcon = statusBar.getRightTiles()[0].getItem()
statusBarIcon.element.dispatchEvent(new MouseEvent('click'))
let activePaneItem
waitsFor(() => (activePaneItem = atom.workspace.getActivePaneItem()))
runs(() => {
expect(activePaneItem.constructor).toBe(IncompatiblePackagesComponent)
})
})
})
})
describe('when there are no packages with incompatible native modules', () => {
beforeEach(() => {
waitsForPromise(() =>
atom.packages.activatePackage('incompatible-packages')
)
})
it('does not add an icon to the status bar', () => {
let statusBarItemClasses = statusBar
.getRightTiles()
.map(tile => tile.getItem().className)
expect(statusBarItemClasses).not.toContain('incompatible-packages')
})
})
})