mirror of
https://github.com/software-mansion/argent.git
synced 2026-09-14 19:27:14 +08:00
f288a461b0
## Summary The Electron support added in #247 is **generic Chromium/CDP under the hood**. The discovery layer probes the Chromium-default CDP port (`9222`) and any `ARGENT_*_PORTS` entries; the connection picks the first non-devtools page target; describe is a plain in-page DOM walker; input/screenshot/screencast/navigation/JS-debugger are all straight CDP. Nothing in that path is Electron-specific — the only Electron-specific piece is the *launcher* (`boot-electron.ts`, which resolves and spawns an Electron binary). So any Chromium-family runtime exposing a CDP endpoint — an Electron app, **or** Chrome/Brave/Edge/WebView2 launched with `--remote-debugging-port` — is discoverable and drivable through the same tool surface. This PR renames the platform discriminator (and everything keyed off it) from `electron` to `chromium` so the naming matches reality. ## What changed **Public/contract surface (clean hard rename, no back-compat aliases):** - Platform discriminator `"electron"` → `"chromium"`; device id `electron-cdp-<port>` → `chromium-cdp-<port>`. - `ToolCapability.electron` → `.chromium`; the capability-gate rejection now reads `Tool 'X' is not supported on chromium app`. - Env `ARGENT_ELECTRON_PORTS`(`_FILE`) → `ARGENT_CHROMIUM_PORTS`(`_FILE`); ports cache `~/.argent/electron-cdp-ports.json` → `chromium-cdp-ports.json`; HTTP surface `/electron-server/` → `/chromium-server/`. **Files / dirs / symbols:** - `src/electron-server/` → `src/chromium-server/`; blueprints `electron-cdp` / `electron-js-runtime-debugger` → `chromium-*`; `describe`/`open-url`/`launch-app` `platforms/electron.ts` → `chromium.ts`; `keyboard/electron-keys` → `chromium-keys`; `utils/electron-discovery` → `chromium-discovery`. - `ElectronServer`/`ElectronCdpApi`/`ElectronJsRuntimeDebugger`/`describeElectron`/`discoverElectronDevices`/`ELECTRON_ID_PREFIX`/… → `Chromium*` / `CHROMIUM_*`. Tests renamed to match. **Stays "electron" (the Electron-specific launcher):** - `boot-device` keeps the `electronAppPath` / `electronPort` / `electronArgs` inputs, and `boot-electron.ts` still resolves & spawns an Electron binary. It just yields a `chromium` device now (an Electron app *is* a Chromium/CDP runtime). **Skills:** `argent-device-interact`, `argent-metro-debugger`, `rules/argent.md`, and the RN-workflow reference were reframed to describe **Chromium (CDP)** availability — Electron apps *plus* any Chromium browser over CDP (auto-discovered on `9222` / `ARGENT_CHROMIUM_PORTS`) — instead of Electron only. ## Test plan - [x] `tsc --build` clean - [x] `typecheck:tests` clean - [x] **1116 vitest cases pass (126 files)** - [x] prettier clean on all changed/renamed files - [x] Full-repo sweep: every remaining "electron" mention is intentional (the launcher path + skill prose explaining Electron as one kind of Chromium/CDP app); `electronic` in LICENSE/COC untouched.
84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
import { dispatchByPlatform } from "../src/utils/cross-platform-tool";
|
|
import { NotImplementedOnPlatformError } from "../src/utils/capability";
|
|
import { __resetDepCacheForTests } from "../src/utils/check-deps";
|
|
import type { ToolCapability } from "@argent/registry";
|
|
|
|
const capability: ToolCapability = {
|
|
apple: { simulator: true, device: true },
|
|
android: { emulator: true, device: true, unknown: true },
|
|
chromium: { app: true },
|
|
};
|
|
|
|
const iosUdid = "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA";
|
|
const androidUdid = "emulator-5554";
|
|
const chromiumUdid = "chromium-cdp-19222";
|
|
|
|
beforeEach(() => {
|
|
__resetDepCacheForTests();
|
|
});
|
|
|
|
describe("dispatchByPlatform (chromium branch)", () => {
|
|
it("routes chromium udids to the chromium handler", async () => {
|
|
const ios = vi.fn().mockResolvedValue("ios");
|
|
const android = vi.fn().mockResolvedValue("android");
|
|
const chromium = vi.fn().mockResolvedValue("chromium");
|
|
const execute = dispatchByPlatform<
|
|
Record<string, never>,
|
|
Record<string, never>,
|
|
{ udid: string },
|
|
string,
|
|
Record<string, never>
|
|
>({
|
|
toolId: "test",
|
|
capability,
|
|
ios: { handler: ios },
|
|
android: { handler: android },
|
|
chromium: { handler: chromium },
|
|
});
|
|
expect(await execute({}, { udid: chromiumUdid })).toBe("chromium");
|
|
expect(ios).not.toHaveBeenCalled();
|
|
expect(android).not.toHaveBeenCalled();
|
|
expect(chromium).toHaveBeenCalledOnce();
|
|
});
|
|
|
|
it("still routes ios / android correctly when a chromium branch exists", async () => {
|
|
const ios = vi.fn().mockResolvedValue("ios");
|
|
const android = vi.fn().mockResolvedValue("android");
|
|
const chromium = vi.fn().mockResolvedValue("chromium");
|
|
const execute = dispatchByPlatform<
|
|
Record<string, never>,
|
|
Record<string, never>,
|
|
{ udid: string },
|
|
string,
|
|
Record<string, never>
|
|
>({
|
|
toolId: "test",
|
|
capability,
|
|
ios: { handler: ios },
|
|
android: { handler: android },
|
|
chromium: { handler: chromium },
|
|
});
|
|
expect(await execute({}, { udid: iosUdid })).toBe("ios");
|
|
expect(await execute({}, { udid: androidUdid })).toBe("android");
|
|
expect(chromium).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("throws NotImplementedOnPlatformError on chromium when no chromium branch is wired", async () => {
|
|
const execute = dispatchByPlatform<
|
|
Record<string, never>,
|
|
Record<string, never>,
|
|
{ udid: string },
|
|
string
|
|
>({
|
|
toolId: "ios-android-only",
|
|
capability,
|
|
ios: { handler: async () => "ios" },
|
|
android: { handler: async () => "android" },
|
|
});
|
|
await expect(execute({}, { udid: chromiumUdid })).rejects.toBeInstanceOf(
|
|
NotImplementedOnPlatformError
|
|
);
|
|
});
|
|
});
|