70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { sameFileIdentity, type FileIdentityStat } from "./file-identity.js";
|
|
|
|
function stat(dev: number | bigint, ino: number | bigint): FileIdentityStat {
|
|
return { dev, ino };
|
|
}
|
|
|
|
describe("sameFileIdentity", () => {
|
|
it.each([
|
|
{
|
|
name: "accepts exact dev+ino match",
|
|
left: stat(7, 11),
|
|
right: stat(7, 11),
|
|
platform: "linux" as const,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "rejects inode mismatch",
|
|
left: stat(7, 11),
|
|
right: stat(7, 12),
|
|
platform: "linux" as const,
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "rejects dev mismatch on non-windows",
|
|
left: stat(7, 11),
|
|
right: stat(8, 11),
|
|
platform: "linux" as const,
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "keeps dev strictness on linux when one side is zero",
|
|
left: stat(0, 11),
|
|
right: stat(8, 11),
|
|
platform: "linux" as const,
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "accepts win32 dev mismatch when either side is 0",
|
|
left: stat(0, 11),
|
|
right: stat(8, 11),
|
|
platform: "win32" as const,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "accepts win32 dev mismatch when right side is 0",
|
|
left: stat(7, 11),
|
|
right: stat(0, 11),
|
|
platform: "win32" as const,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "keeps dev strictness on win32 when both dev values are non-zero",
|
|
left: stat(7, 11),
|
|
right: stat(8, 11),
|
|
platform: "win32" as const,
|
|
expected: false,
|
|
},
|
|
{
|
|
name: "handles bigint stats",
|
|
left: stat(0n, 11n),
|
|
right: stat(8n, 11n),
|
|
platform: "win32" as const,
|
|
expected: true,
|
|
},
|
|
])("$name", ({ left, right, platform, expected }) => {
|
|
expect(sameFileIdentity(left, right, platform)).toBe(expected);
|
|
});
|
|
});
|