const Gutter = require('../src/gutter'); describe('Gutter', () => { const fakeGutterContainer = { scheduleComponentUpdate() {} }; const name = 'name'; describe('::hide', () => it('hides the gutter if it is visible.', () => { const options = { name, visible: true }; const gutter = new Gutter(fakeGutterContainer, options); const events = []; gutter.onDidChangeVisible(gutter => events.push(gutter.isVisible())); expect(gutter.isVisible()).toBe(true); gutter.hide(); expect(gutter.isVisible()).toBe(false); expect(events).toEqual([false]); gutter.hide(); expect(gutter.isVisible()).toBe(false); // An event should only be emitted when the visibility changes. expect(events.length).toBe(1); })); describe('::show', () => it('shows the gutter if it is hidden.', () => { const options = { name, visible: false }; const gutter = new Gutter(fakeGutterContainer, options); const events = []; gutter.onDidChangeVisible(gutter => events.push(gutter.isVisible())); expect(gutter.isVisible()).toBe(false); gutter.show(); expect(gutter.isVisible()).toBe(true); expect(events).toEqual([true]); gutter.show(); expect(gutter.isVisible()).toBe(true); // An event should only be emitted when the visibility changes. expect(events.length).toBe(1); })); describe('::destroy', () => { let mockGutterContainer, mockGutterContainerRemovedGutters; beforeEach(() => { mockGutterContainerRemovedGutters = []; mockGutterContainer = { removeGutter(destroyedGutter) { mockGutterContainerRemovedGutters.push(destroyedGutter); } }; }); it('removes the gutter from its container.', () => { const gutter = new Gutter(mockGutterContainer, { name }); gutter.destroy(); expect(mockGutterContainerRemovedGutters).toEqual([gutter]); }); it('calls all callbacks registered on ::onDidDestroy.', () => { const gutter = new Gutter(mockGutterContainer, { name }); let didDestroy = false; gutter.onDidDestroy(() => { didDestroy = true; }); gutter.destroy(); expect(didDestroy).toBe(true); }); it('does not allow destroying the line-number gutter', () => { const gutter = new Gutter(mockGutterContainer, { name: 'line-number' }); expect(gutter.destroy).toThrow(); }); }); });