Mailspring/app/spec/undo-stack-spec.es6
2017-09-26 11:33:08 -07:00

64 lines
2.1 KiB
JavaScript

import UndoStack from '../src/undo-stack';
describe('UndoStack', function UndoStackSpecs() {
beforeEach(() => {
this.undoManager = new UndoStack();
});
afterEach(() => {
advanceClock(500);
});
describe('undo', () => {
it('can restore history items, and returns null when none are available', () => {
this.undoManager.save('A');
this.undoManager.save('B');
this.undoManager.save('C');
expect(this.undoManager.current()).toBe('C');
expect(this.undoManager.undo()).toBe('B');
expect(this.undoManager.current()).toBe('B');
expect(this.undoManager.undo()).toBe('A');
expect(this.undoManager.current()).toBe('A');
expect(this.undoManager.undo()).toBe(null);
expect(this.undoManager.current()).toBe('A');
});
it('limits the undo stack to the MAX_HISTORY_SIZE', () => {
this.undoManager._MAX_STACK_SIZE = 3;
this.undoManager.save('A');
this.undoManager.save('B');
this.undoManager.save('C');
this.undoManager.save('D');
expect(this.undoManager.current()).toBe('D');
expect(this.undoManager.undo()).toBe('C');
expect(this.undoManager.undo()).toBe('B');
expect(this.undoManager.undo()).toBe(null);
expect(this.undoManager.current()).toBe('B');
});
});
describe('undo followed by redo', () => {
it('can restore previously undone history items', () => {
this.undoManager.save('A');
this.undoManager.save('B');
this.undoManager.save('C');
expect(this.undoManager.current()).toBe('C');
expect(this.undoManager.undo()).toBe('B');
expect(this.undoManager.current()).toBe('B');
expect(this.undoManager.redo()).toBe('C');
expect(this.undoManager.current()).toBe('C');
});
it('cannot be used after pushing additional items', () => {
this.undoManager.save('A');
this.undoManager.save('B');
this.undoManager.save('C');
expect(this.undoManager.current()).toBe('C');
expect(this.undoManager.undo()).toBe('B');
this.undoManager.save('D');
expect(this.undoManager.redo()).toBe(null);
expect(this.undoManager.current()).toBe('D');
});
});
});