Mailspring/spec/undo-stack-spec.es6
2016-05-24 19:04:20 -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")
});
});
});