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