mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-12-29 03:43:16 +08:00
63 lines
2.1 KiB
JavaScript
63 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")
|
|
});
|
|
});
|
|
});
|