mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-11-09 13:15:37 +03:00
89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
const Gutter = require('../src/gutter');
|
|
const GutterContainer = require('../src/gutter-container');
|
|
|
|
describe('GutterContainer', () => {
|
|
let gutterContainer = null;
|
|
const fakeTextEditor = {
|
|
scheduleComponentUpdate() {}
|
|
};
|
|
|
|
beforeEach(() => {
|
|
gutterContainer = new GutterContainer(fakeTextEditor);
|
|
});
|
|
|
|
describe('when initialized', () =>
|
|
it('it has no gutters', () => {
|
|
expect(gutterContainer.getGutters().length).toBe(0);
|
|
}));
|
|
|
|
describe('::addGutter', () => {
|
|
it('creates a new gutter', () => {
|
|
const newGutter = gutterContainer.addGutter({
|
|
'test-gutter': 'test-gutter',
|
|
priority: 1
|
|
});
|
|
expect(gutterContainer.getGutters()).toEqual([newGutter]);
|
|
expect(newGutter.priority).toBe(1);
|
|
});
|
|
|
|
it('throws an error if the provided gutter name is already in use', () => {
|
|
const name = 'test-gutter';
|
|
gutterContainer.addGutter({ name });
|
|
expect(gutterContainer.addGutter.bind(null, { name })).toThrow();
|
|
});
|
|
|
|
it('keeps added gutters sorted by ascending priority', () => {
|
|
const gutter1 = gutterContainer.addGutter({ name: 'first', priority: 1 });
|
|
const gutter3 = gutterContainer.addGutter({ name: 'third', priority: 3 });
|
|
const gutter2 = gutterContainer.addGutter({
|
|
name: 'second',
|
|
priority: 2
|
|
});
|
|
expect(gutterContainer.getGutters()).toEqual([gutter1, gutter2, gutter3]);
|
|
});
|
|
});
|
|
|
|
describe('::removeGutter', () => {
|
|
let removedGutters;
|
|
|
|
beforeEach(function() {
|
|
gutterContainer = new GutterContainer(fakeTextEditor);
|
|
removedGutters = [];
|
|
gutterContainer.onDidRemoveGutter(gutterName =>
|
|
removedGutters.push(gutterName)
|
|
);
|
|
});
|
|
|
|
it('removes the gutter if it is contained by this GutterContainer', () => {
|
|
const gutter = gutterContainer.addGutter({
|
|
'test-gutter': 'test-gutter'
|
|
});
|
|
expect(gutterContainer.getGutters()).toEqual([gutter]);
|
|
gutterContainer.removeGutter(gutter);
|
|
expect(gutterContainer.getGutters().length).toBe(0);
|
|
expect(removedGutters).toEqual([gutter.name]);
|
|
});
|
|
|
|
it('throws an error if the gutter is not within this GutterContainer', () => {
|
|
const fakeOtherTextEditor = {};
|
|
const otherGutterContainer = new GutterContainer(fakeOtherTextEditor);
|
|
const gutter = new Gutter('gutter-name', otherGutterContainer);
|
|
expect(gutterContainer.removeGutter.bind(null, gutter)).toThrow();
|
|
});
|
|
});
|
|
|
|
describe('::destroy', () =>
|
|
it('clears its array of gutters and destroys custom gutters', () => {
|
|
const newGutter = gutterContainer.addGutter({
|
|
'test-gutter': 'test-gutter',
|
|
priority: 1
|
|
});
|
|
const newGutterSpy = jasmine.createSpy();
|
|
newGutter.onDidDestroy(newGutterSpy);
|
|
|
|
gutterContainer.destroy();
|
|
expect(newGutterSpy).toHaveBeenCalled();
|
|
expect(gutterContainer.getGutters()).toEqual([]);
|
|
}));
|
|
});
|