mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-11-10 22:23:32 +08:00
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import CursorHistory from "../../../js/hooks/session/cursor_history";
|
|
|
|
test("goBack returns when there's at least one cell", () => {
|
|
const cursorHistory = new CursorHistory();
|
|
const entry = { cellId: "c1", line: 1, offset: 1 };
|
|
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
expect(cursorHistory.getCurrent()).toStrictEqual(null);
|
|
|
|
cursorHistory.push(entry.cellId, entry.line, entry.offset);
|
|
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
expect(cursorHistory.getCurrent()).toStrictEqual(entry);
|
|
});
|
|
|
|
describe("push", () => {
|
|
test("does not add duplicated cells", () => {
|
|
const cursorHistory = new CursorHistory();
|
|
const entry = { cellId: "c1", line: 1, offset: 1 };
|
|
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
|
|
cursorHistory.push(entry.cellId, entry.line, entry.offset);
|
|
cursorHistory.push(entry.cellId, entry.line, 2);
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
|
|
cursorHistory.push(entry.cellId, 2, entry.offset);
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
});
|
|
|
|
test("removes oldest entries and keep it with a maximum of 20 entries", () => {
|
|
const cursorHistory = new CursorHistory();
|
|
|
|
for (let i = 0; i <= 19; i++) {
|
|
const value = i + 1;
|
|
cursorHistory.push(`123${value}`, value, 1);
|
|
}
|
|
|
|
const firstEntry = cursorHistory.get(0);
|
|
cursorHistory.push("231", 1, 1);
|
|
|
|
// Navigates to the bottom of the stack
|
|
for (let i = 0; i <= 18; i++) {
|
|
cursorHistory.goBack();
|
|
}
|
|
|
|
cursorHistory
|
|
.getEntries()
|
|
.forEach((entry) => expect(entry).not.toStrictEqual(firstEntry));
|
|
});
|
|
|
|
test("rewrites the subsequent cells if go back and saves a new cell", () => {
|
|
const cursorHistory = new CursorHistory();
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
|
|
cursorHistory.push("c1", 1, 1);
|
|
cursorHistory.push("c2", 1, 1);
|
|
cursorHistory.push("c3", 2, 1);
|
|
|
|
expect(cursorHistory.canGoBack()).toBe(true);
|
|
|
|
// Go back to cell id c2
|
|
cursorHistory.goBack();
|
|
expect(cursorHistory.canGoBack()).toBe(true);
|
|
|
|
// Go back to cell id c1
|
|
cursorHistory.goBack();
|
|
expect(cursorHistory.canGoBack()).toBe(false);
|
|
|
|
// Removes the subsequent cells from stack
|
|
// and adds this cell to the stack
|
|
cursorHistory.push("c4", 1, 1);
|
|
expect(cursorHistory.canGoForward()).toBe(false);
|
|
});
|
|
});
|
|
|
|
test("removeAllFromCell removes the cells with given id", () => {
|
|
const cursorHistory = new CursorHistory();
|
|
const cellId = "123456789";
|
|
|
|
cursorHistory.push("123", 1, 1);
|
|
cursorHistory.push("456", 1, 1);
|
|
cursorHistory.push(cellId, 1, 1);
|
|
cursorHistory.push("1234", 1, 1);
|
|
cursorHistory.push(cellId, 1, 1);
|
|
cursorHistory.push("8901", 1, 1);
|
|
cursorHistory.push(cellId, 1, 1);
|
|
|
|
cursorHistory.removeAllFromCell(cellId);
|
|
expect(cursorHistory.canGoForward()).toBe(false);
|
|
expect(cursorHistory.getCurrent()).toStrictEqual({
|
|
cellId: "8901",
|
|
line: 1,
|
|
offset: 1,
|
|
});
|
|
});
|