summaryrefslogtreecommitdiffhomepage
path: root/src/features/tabs/tabs.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/tabs/tabs.test.ts')
-rw-r--r--src/features/tabs/tabs.test.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/features/tabs/tabs.test.ts b/src/features/tabs/tabs.test.ts
index 3034e76..5effa9b 100644
--- a/src/features/tabs/tabs.test.ts
+++ b/src/features/tabs/tabs.test.ts
@@ -6,6 +6,7 @@ import {
createTab,
deriveTitle,
initialState,
+ isStuckToEnd,
newDraft,
selectTab,
setModel,
@@ -189,3 +190,26 @@ describe("deriveTitle", () => {
expect(result).toBe(`${"a".repeat(40)}\u2026`);
});
});
+
+describe("isStuckToEnd", () => {
+ it("is false when the strip does not overflow", () => {
+ expect(isStuckToEnd({ scrollLeft: 0, clientWidth: 500, scrollWidth: 500 })).toBe(false);
+ expect(isStuckToEnd({ scrollLeft: 0, clientWidth: 500, scrollWidth: 400 })).toBe(false);
+ });
+
+ it("is true when overflowing and scrolled to the left", () => {
+ expect(isStuckToEnd({ scrollLeft: 0, clientWidth: 500, scrollWidth: 1000 })).toBe(true);
+ });
+
+ it("is true when overflowing and scrolled to the middle", () => {
+ expect(isStuckToEnd({ scrollLeft: 250, clientWidth: 500, scrollWidth: 1000 })).toBe(true);
+ });
+
+ it("is false when overflowing but scrolled fully to the right", () => {
+ expect(isStuckToEnd({ scrollLeft: 500, clientWidth: 500, scrollWidth: 1000 })).toBe(false);
+ });
+
+ it("treats a 1px subpixel gap at the end as at-rest (epsilon)", () => {
+ expect(isStuckToEnd({ scrollLeft: 499, clientWidth: 500, scrollWidth: 1000 })).toBe(false);
+ });
+});