Open History to see the last commit
1import { expect, it, vi } from "vite-plus/test";
2
3const sink = vi.hoisted(() => ({
4 created: vi.fn(),
5 written: vi.fn<(line: string, options: unknown) => Promise<void>>(),
6 opened: vi.fn(),
7}));
8
9vi.mock("expo-file-system", () => ({
10 Paths: { document: "documents" },
11 File: class {
12 constructor(...args: unknown[]) {
13 sink.opened(...args);
14 }
15 create(options: unknown) {
16 sink.created(options);
17 }
18 write(line: string, options: unknown) {
19 return sink.written(line, options);
20 }
21 },
22}));
23
24it("leaves the filesystem untouched when Release tracing is disabled", async () => {
25 vi.resetModules();
26 sink.opened.mockClear();
27 vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "0");
28 try {
29 const { traceDiffHighlight } = await import("./nativeReviewDiffTrace");
30 traceDiffHighlight("viewport-start", { rows: 80 });
31 expect(sink.opened).not.toHaveBeenCalled();
32 } finally {
33 vi.unstubAllEnvs();
34 }
35});
36
37it("keeps object, function, and primitive identities stable without collisions", async () => {
38 vi.resetModules();
39 vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "1");
40 try {
41 const { diffHighlightTraceId } = await import("./nativeReviewDiffTrace");
42 const values = [{}, {}, () => {}, () => {}, null, undefined, "file", 1, "1", false];
43 const ids = values.map(diffHighlightTraceId);
44 expect(ids.every((id) => id > 0)).toBe(true);
45 expect(new Set(ids).size).toBe(values.length);
46 expect(values.map(diffHighlightTraceId)).toEqual(ids);
47 } finally {
48 vi.unstubAllEnvs();
49 }
50});
51
52it("serializes appends to a retrievable file and bounds a process to 1000 events", async () => {
53 vi.resetModules();
54 sink.opened.mockClear();
55 sink.created.mockClear();
56 sink.written.mockReset();
57 const firstWrite = Promise.withResolvers<void>();
58 const releaseFirst = Promise.withResolvers<void>();
59 const finished = Promise.withResolvers<void>();
60 sink.written.mockImplementation(async (line) => {
61 const { seq } = JSON.parse(line);
62 if (seq === 1) {
63 firstWrite.resolve();
64 await releaseFirst.promise;
65 }
66 if (seq === 1000) finished.resolve();
67 });
68 using warning = vi.spyOn(console, "warn").mockImplementation(() => {});
69 vi.stubEnv("EXPO_PUBLIC_T3_DIFF_TRACE", "1");
70 try {
71 const { diffHighlightTraceId, traceDiffHighlight } = await import("./nativeReviewDiffTrace");
72 const request = {};
73 expect(diffHighlightTraceId(request)).toBeGreaterThan(0);
74 for (let index = 0; index < 1001; index++)
75 traceDiffHighlight("viewport-start", { rows: index });
76 await firstWrite.promise;
77 expect(sink.written).toHaveBeenCalledTimes(1);
78 releaseFirst.resolve();
79 await finished.promise;
80 expect(sink.opened.mock.calls).toEqual([["documents", "t3-diff-highlight-trace.jsonl"]]);
81 expect(sink.created.mock.calls).toEqual([[{ overwrite: true, intermediates: true }]]);
82 expect(sink.written).toHaveBeenCalledTimes(1000);
83 expect(warning).toHaveBeenCalledTimes(1000);
84 expect(diffHighlightTraceId(request)).toBe(0);
85 expect(diffHighlightTraceId("file")).toBe(0);
86 expect(sink.written.mock.calls.map(([line]) => JSON.parse(line).seq)).toEqual(
87 Array.from({ length: 1000 }, (_, index) => index + 1),
88 );
89 expect(
90 sink.written.mock.calls.every(
91 ([line, options]) => line.endsWith("\n") && JSON.stringify(options) === '{"append":true}',
92 ),
93 ).toBe(true);
94 } finally {
95 releaseFirst.resolve();
96 vi.unstubAllEnvs();
97 }
98});