Buckets:
| import { describe, expect, test } from "bun:test" | |
| import { invalidateFromWatcher } from "./watcher" | |
| describe("file watcher invalidation", () => { | |
| test("reloads open files and refreshes loaded parent on add", () => { | |
| const loads: string[] = [] | |
| const refresh: string[] = [] | |
| invalidateFromWatcher( | |
| { | |
| type: "file.watcher.updated", | |
| properties: { | |
| file: "src/new.ts", | |
| event: "add", | |
| }, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: (path) => path === "src/new.ts", | |
| loadFile: (path) => loads.push(path), | |
| node: () => undefined, | |
| isDirLoaded: (path) => path === "src", | |
| refreshDir: (path) => refresh.push(path), | |
| }, | |
| ) | |
| expect(loads).toEqual(["src/new.ts"]) | |
| expect(refresh).toEqual(["src"]) | |
| }) | |
| test("reloads files that are open in tabs", () => { | |
| const loads: string[] = [] | |
| invalidateFromWatcher( | |
| { | |
| type: "file.watcher.updated", | |
| properties: { | |
| file: "src/open.ts", | |
| event: "change", | |
| }, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: () => false, | |
| isOpen: (path) => path === "src/open.ts", | |
| loadFile: (path) => loads.push(path), | |
| node: () => ({ | |
| path: "src/open.ts", | |
| type: "file", | |
| name: "open.ts", | |
| absolute: "/repo/src/open.ts", | |
| ignored: false, | |
| }), | |
| isDirLoaded: () => false, | |
| refreshDir: () => {}, | |
| }, | |
| ) | |
| expect(loads).toEqual(["src/open.ts"]) | |
| }) | |
| test("refreshes only changed loaded directory nodes", () => { | |
| const refresh: string[] = [] | |
| invalidateFromWatcher( | |
| { | |
| type: "file.watcher.updated", | |
| properties: { | |
| file: "src", | |
| event: "change", | |
| }, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: () => false, | |
| loadFile: () => {}, | |
| node: () => ({ path: "src", type: "directory", name: "src", absolute: "/repo/src", ignored: false }), | |
| isDirLoaded: (path) => path === "src", | |
| refreshDir: (path) => refresh.push(path), | |
| }, | |
| ) | |
| invalidateFromWatcher( | |
| { | |
| type: "file.watcher.updated", | |
| properties: { | |
| file: "src/file.ts", | |
| event: "change", | |
| }, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: () => false, | |
| loadFile: () => {}, | |
| node: () => ({ | |
| path: "src/file.ts", | |
| type: "file", | |
| name: "file.ts", | |
| absolute: "/repo/src/file.ts", | |
| ignored: false, | |
| }), | |
| isDirLoaded: () => true, | |
| refreshDir: (path) => refresh.push(path), | |
| }, | |
| ) | |
| expect(refresh).toEqual(["src"]) | |
| }) | |
| test("ignores invalid or git watcher updates", () => { | |
| const refresh: string[] = [] | |
| invalidateFromWatcher( | |
| { | |
| type: "file.watcher.updated", | |
| properties: { | |
| file: ".git/index.lock", | |
| event: "change", | |
| }, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: () => true, | |
| loadFile: () => { | |
| throw new Error("should not load") | |
| }, | |
| node: () => undefined, | |
| isDirLoaded: () => true, | |
| refreshDir: (path) => refresh.push(path), | |
| }, | |
| ) | |
| invalidateFromWatcher( | |
| { | |
| type: "project.updated", | |
| properties: {}, | |
| }, | |
| { | |
| normalize: (input) => input, | |
| hasFile: () => false, | |
| loadFile: () => {}, | |
| node: () => undefined, | |
| isDirLoaded: () => true, | |
| refreshDir: (path) => refresh.push(path), | |
| }, | |
| ) | |
| expect(refresh).toEqual([]) | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 3.68 kB
- Xet hash:
- 873ebf3d02efcf8d61713325a6b52bcd5eb109c7f9d88d6040bed4488d99541f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.