Open History to see the last commit
1import * as NodeModule from "node:module";
2import * as NodeURL from "node:url";
3import { defineConfig, normalizePath } from "vite-plus";
4import "vite-plus/test/config";
5
6const reactTests = [
7 "src/features/threads/git/GitBranchesSheet.test.tsx",
8 "src/features/threads/new-task-flow-provider.test.tsx",
9 "src/features/layout/workspace/workspace-tabs-state.test.ts",
10 "src/state/use-thread-pr.demand.test.tsx",
11 "src/features/threads/git/GitBranchesSheet.occupancy.test.tsx",
12 "src/features/files/useFileTreeEntries.test.tsx",
13 "src/features/files/thread-file-navigator-pane.test.tsx",
14 "src/features/files/source-file-document.test.ts",
15 "src/features/projects/AddProjectScreen.test.ts",
16 "src/lib/useMediaVideoPlayback.test.tsx",
17 "src/features/pull-requests/usePullRequestEnvironmentFallback.test.tsx",
18 "src/lib/filePreview.test.ts",
19 "src/features/threads/thread-inspector-navigation.test.tsx",
20 "src/features/diffs/nativeReviewDiffSurface.test.tsx",
21 "src/features/pull-requests/usePullRequestDiff.test.tsx",
22 "src/components/ProjectFavicon.test.tsx",
23 "src/components/ui/Dialog.android.test.tsx",
24 "src/features/pull-requests/usePullRequestList.test.tsx",
25 "src/components/ui/AppBar.android.test.tsx",
26 "src/features/files/ZipArchiveView.test.tsx",
27 "src/features/pull-requests/guide/useReviewGuide.test.tsx",
28 "src/features/settings/SettingsServerControlsRouteScreen.test.tsx",
29 "src/features/settings/components/BranchNamingSettings.test.tsx",
30 "src/features/settings/components/SettingsDragHandle.test.tsx",
31 "src/features/threads/ThreadMarkdownImage.test.tsx",
32 "src/components/ui/FilePreviewSession.test.tsx",
33 "src/features/threads/UsageLimitRecoveryCard.test.tsx",
34 "src/features/threads/PendingUserInputCard.test.tsx",
35 "src/features/threads/NewTaskDraftRouteScreen.test.tsx",
36 "src/native/NativeHeaderToolbar.test.tsx",
37 "src/components/ComposerEditor.ios.test.tsx",
38 "src/native/V5StackHeader.ios.test.tsx",
39 "src/native/useRetryingImageSource.test.tsx",
40 "src/state/queries.debounce.test.tsx",
41 "src/state/use-selected-thread-git-state.test.tsx",
42 "src/features/terminal/useTerminalExitNavigation.test.tsx",
43 "src/features/threads/use-thread-list-now.test.tsx",
44 "src/features/threads/useThreadListV2.test.tsx",
45 "src/features/home/home-list-options.test.tsx",
46 "src/features/home/home-route-visibility.test.tsx",
47 "src/features/layout/workspace/useSearchScrollRestoration.test.tsx",
48 "src/features/connection/ConnectionsNewRouteScreen.test.tsx",
49 "src/features/devices/device-stream.browser.test.ts",
50 "src/features/keyboard/keyboardControllerState.test.tsx",
51];
52
53const sourceRoot = `${normalizePath(NodeURL.fileURLToPath(new URL("./src", import.meta.url)))}/`;
54const require = NodeModule.createRequire(import.meta.url);
55const babel: {
56 transformAsync: (
57 code: string,
58 options: Record<string, unknown>,
59 ) => Promise<{ code?: string | null; map?: object | null } | null>;
60} = require("@babel/core");
61const babelConfig = require("./babel.config.js")({ cache: () => {} });
62const testPlatform = process.env.T3_MOBILE_TEST_PLATFORM === "android" ? "android" : "ios";
63
64export default defineConfig({
65 test: {
66 hookTimeout: 60_000,
67 testTimeout: 60_000,
68 projects: [
69 {
70 extends: true,
71 test: {
72 name: "unit",
73 include: ["**/*.test.{ts,tsx,mjs}"],
74 exclude: ["**/node_modules/**", ...reactTests],
75 setupFiles: [
76 "../../packages/shared/src/testing/longTempDir.ts",
77 "../../packages/shared/src/testing/providerEnv.ts",
78 ],
79 },
80 },
81 {
82 extends: true,
83 plugins: [
84 {
85 name: `mobile-release-react-compiler-${testPlatform}`,
86 enforce: "pre",
87 async transform(code, id) {
88 if (
89 !normalizePath(id).startsWith(sourceRoot) ||
90 !/\.tsx?$/.test(id) ||
91 /\.test\.tsx?$/.test(id)
92 ) {
93 return;
94 }
95 const result = await babel.transformAsync(code, {
96 ...babelConfig,
97 presets: babelConfig.presets.map(([name, options]: [string, object]) => [
98 require.resolve(name),
99 // Vite runs in Node; inline Babel helpers instead of Metro runtime imports.
100 { ...options, enableBabelRuntime: false },
101 ]),
102 filename: id,
103 babelrc: false,
104 configFile: false,
105 sourceMaps: true,
106 caller: {
107 name: "metro",
108 bundler: "metro",
109 platform: testPlatform,
110 isDev: false,
111 isServer: false,
112 isNodeModule: false,
113 supportsStaticESM: true,
114 supportsReactCompiler: true,
115 },
116 });
117 if (result?.code) return { code: result.code, map: result.map };
118 },
119 },
120 ],
121 test: {
122 name: "react",
123 include: reactTests,
124 // Native components mock React Native and render through react-dom in these tests.
125 environment: "jsdom",
126 setupFiles: ["../../packages/shared/src/testing/providerEnv.ts"],
127 },
128 },
129 ],
130 },
131});