gestament 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/displaySession.d.ts +2 -2
- package/dist/displaySession.d.ts.map +1 -1
- package/dist/element.d.ts +2 -2
- package/dist/element.d.ts.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/generated/packageMetadata.d.ts +4 -4
- package/dist/gestament-config.d.ts +2 -2
- package/dist/gestament-launcher-driver.cjs +13 -1
- package/dist/gestament-launcher-driver.cjs.map +1 -1
- package/dist/gestament-launcher-driver.d.ts +2 -2
- package/dist/gestament-launcher-driver.mjs +13 -1
- package/dist/gestament-launcher-driver.mjs.map +1 -1
- package/dist/gestament-tray-host.cjs +1 -1
- package/dist/gestament-tray-host.d.ts +2 -2
- package/dist/gestament-tray-host.mjs +1 -1
- package/dist/gestament-xvfb-pool-probe.cjs +1 -1
- package/dist/gestament-xvfb-pool-probe.d.ts +2 -2
- package/dist/gestament-xvfb-pool-probe.mjs +1 -1
- package/dist/gestament-xvfb-worker.d.ts +2 -2
- package/dist/gestament-xvfb.d.ts +2 -2
- package/dist/gestament.cjs +1 -1
- package/dist/gestament.d.ts +2 -2
- package/dist/gestament.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{launchGtkApp-EI6OIpPI.js → launchGtkApp-B3FMzhrc.js} +52 -2
- package/dist/launchGtkApp-B3FMzhrc.js.map +1 -0
- package/dist/{launchGtkApp-CzYcrc9f.cjs → launchGtkApp-OggUtTTC.cjs} +54 -4
- package/dist/launchGtkApp-OggUtTTC.cjs.map +1 -0
- package/dist/launchGtkApp.d.ts +2 -2
- package/dist/launcherDriverProtocol.d.ts +14 -3
- package/dist/launcherDriverProtocol.d.ts.map +1 -1
- package/dist/{native-DlCBBWlV.js → native-C2tzSvVW.js} +25 -11
- package/dist/native-C2tzSvVW.js.map +1 -0
- package/dist/{native-Kfm95Uxw.cjs → native-Xz0gjKti.cjs} +18 -4
- package/dist/native-Xz0gjKti.cjs.map +1 -0
- package/dist/native.d.ts +8 -2
- package/dist/native.d.ts.map +1 -1
- package/dist/output.d.ts +2 -2
- package/dist/packageMetadata-BQE2KNaa.js +5 -0
- package/dist/{packageMetadata-DjxyJCJm.js.map → packageMetadata-BQE2KNaa.js.map} +1 -1
- package/dist/packageMetadata-BqAHZ5WO.cjs +4 -0
- package/dist/{packageMetadata-CewXH0iF.cjs.map → packageMetadata-BqAHZ5WO.cjs.map} +1 -1
- package/dist/prerequisites.d.ts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/tray.d.ts +2 -2
- package/dist/types.d.ts +25 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/wait.d.ts +2 -2
- package/package.json +7 -7
- package/prebuilds/linux-arm/gtk3/node.napi.armv7.glibc.node +0 -0
- package/prebuilds/linux-arm/gtk4/node.napi.armv7.glibc.node +0 -0
- package/prebuilds/linux-arm64/gtk3/node.napi.glibc.node +0 -0
- package/prebuilds/linux-arm64/gtk4/node.napi.glibc.node +0 -0
- package/prebuilds/linux-ia32/gtk3/node.napi.glibc.node +0 -0
- package/prebuilds/linux-ia32/gtk4/node.napi.glibc.node +0 -0
- package/prebuilds/linux-riscv64/gtk3/node.napi.glibc.node +0 -0
- package/prebuilds/linux-riscv64/gtk4/node.napi.glibc.node +0 -0
- package/prebuilds/linux-x64/gtk3/node.napi.glibc.node +0 -0
- package/prebuilds/linux-x64/gtk4/node.napi.glibc.node +0 -0
- package/dist/launchGtkApp-CzYcrc9f.cjs.map +0 -1
- package/dist/launchGtkApp-EI6OIpPI.js.map +0 -1
- package/dist/native-DlCBBWlV.js.map +0 -1
- package/dist/native-Kfm95Uxw.cjs.map +0 -1
- package/dist/packageMetadata-CewXH0iF.cjs +0 -4
- package/dist/packageMetadata-DjxyJCJm.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gestament-launcher-driver.mjs","sources":["../src/gestament-launcher-driver.ts"],"sourcesContent":["#!/usr/bin/env node\n// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport { spawn, type ChildProcess } from 'node:child_process';\nimport { createConnection, type Socket } from 'node:net';\nimport { realpathSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\n\nimport {\n createGtkAppExitedError,\n createGtkOperationFailedError,\n createGtkStaleElementError,\n createGtkUnsupportedInterfaceError,\n} from './errors';\nimport { createGtkAppEnvironment, launchGtkApp } from './launchGtkApp';\nimport { runWithWaitDeadline } from './wait';\nimport type {\n DriverEnvironmentPayload,\n DriverAppPayload,\n DriverAppRef,\n DriverCommand,\n DriverEventChannel,\n DriverElementPayload,\n DriverElementRef,\n DriverIdPayload,\n DriverImageInfoPayload,\n DriverIndexPayload,\n DriverLaunchPayload,\n DriverPathPayload,\n DriverReadyMessage,\n DriverRequest,\n DriverSelectedIndexPayload,\n DriverTableCellPayload,\n DriverTextPayload,\n DriverTrayItemRef,\n DriverTrayPayload,\n DriverTraySelectorPayload,\n DriverValuePayload,\n SerializedDriverError,\n WireCapture,\n WireGtkAppEnvironment,\n WireGtkAppOutput,\n WireGtkAppOutputEvent,\n WireGtkSystemOutput,\n WireImageInfo,\n} from './launcherDriverProtocol';\nimport type {\n GtkApp,\n GtkAppEnvironment,\n GtkCapture,\n GtkImageInfo,\n GtkTrayItem,\n GtkWidgetElement,\n LaunchGtkAppOptions,\n} from './types';\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\ninterface DriverArguments {\n readonly socketPath: string;\n readonly withTrayHost: boolean;\n}\n\ninterface ElementEntry {\n readonly appId: string;\n readonly element: GtkWidgetElement;\n}\n\ninterface TrayItemEntry {\n readonly appId: string;\n readonly trayItem: GtkTrayItem;\n}\n\ninterface ImageInfoEntry {\n readonly appId: string;\n readonly capture: () => Promise<GtkCapture>;\n}\n\ntype AsyncMethod = (...args: unknown[]) => Promise<unknown>;\n\nconst trayHostReadyLine = 'gestament-tray-host-ready';\nconst trayHostReadyTimeoutMs = 30_000;\n\nconst apps = new Map<string, GtkApp>();\nconst elements = new Map<string, ElementEntry>();\nconst trayItems = new Map<string, TrayItemEntry>();\nconst imageInfos = new Map<string, ImageInfoEntry>();\nconst staleElementIds = new Set<string>();\nconst staleTrayItemIds = new Set<string>();\nconst staleImageInfoIds = new Set<string>();\n\nlet nextAppId = 1;\nlet nextElementId = 1;\nlet nextTrayItemId = 1;\nlet nextImageInfoId = 1;\nlet parentSocket: Socket | undefined;\nlet shuttingDown = false;\nlet trayHostProcess: ChildProcess | undefined;\n\nconst parseArguments = (args: readonly string[]): DriverArguments => {\n let socketPath: string | undefined;\n let withTrayHost = false;\n let index = 0;\n\n while (index < args.length) {\n const argument = args[index];\n\n if (argument === '--socket') {\n const value = args[index + 1];\n if (value === undefined || value.length === 0) {\n throw new Error('--socket requires a Unix socket path.');\n }\n socketPath = value;\n index += 2;\n continue;\n }\n\n if (argument === '--with-tray-host') {\n withTrayHost = true;\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown gestament launcher driver option: ${argument}`);\n }\n\n if (socketPath === undefined) {\n throw new Error('Missing --socket option.');\n }\n\n return { socketPath, withTrayHost };\n};\n\nconst waitForTrayHostReady = (host: ChildProcess): Promise<void> =>\n new Promise<void>((resolveReady, rejectReady) => {\n if (host.stdout === null) {\n rejectReady(new Error('gestament tray host did not expose stdout.'));\n return;\n }\n\n let output = '';\n let settled = false;\n\n const timeout = setTimeout(() => {\n if (!settled) {\n settled = true;\n rejectReady(new Error('Timed out waiting for gestament tray host.'));\n }\n }, trayHostReadyTimeoutMs);\n\n host.stdout.on('data', (chunk: Buffer) => {\n const text = chunk.toString('utf8');\n output += text;\n const readyIndex = output.indexOf(trayHostReadyLine);\n if (!settled && readyIndex >= 0) {\n settled = true;\n clearTimeout(timeout);\n const beforeReady = output.slice(0, readyIndex);\n if (beforeReady.length > 0) {\n writeSystemOutputChunk('stdout', Buffer.from(beforeReady));\n }\n let afterReadyIndex = readyIndex + trayHostReadyLine.length;\n if (output.slice(afterReadyIndex, afterReadyIndex + 2) === '\\r\\n') {\n afterReadyIndex += 2;\n } else if (output[afterReadyIndex] === '\\n') {\n afterReadyIndex += 1;\n }\n const afterReady = output.slice(afterReadyIndex);\n if (afterReady.length > 0) {\n writeSystemOutputChunk('stdout', Buffer.from(afterReady));\n }\n resolveReady();\n return;\n }\n if (settled) {\n writeSystemOutputChunk('stdout', chunk);\n }\n });\n host.stdout.once('end', () => {\n writeSystemOutputFlush('stdout');\n });\n host.stderr?.on('data', (chunk: Buffer) => {\n writeSystemOutputChunk('stderr', chunk);\n });\n host.stderr?.once('end', () => {\n writeSystemOutputFlush('stderr');\n });\n\n host.once('exit', (code, signal) => {\n if (!settled) {\n settled = true;\n clearTimeout(timeout);\n rejectReady(\n new Error(\n `gestament tray host exited before ready: code=${String(\n code\n )}, signal=${String(signal)}`\n )\n );\n }\n });\n\n host.once('error', (error) => {\n if (!settled) {\n settled = true;\n clearTimeout(timeout);\n rejectReady(error);\n }\n });\n });\n\nconst startTrayHost = async (): Promise<ChildProcess> => {\n const executablePath = process.argv[1];\n if (executablePath === undefined) {\n throw new Error('Missing executable path.');\n }\n\n const hostPath = resolve(\n dirname(realpathSync(executablePath)),\n 'gestament-tray-host.cjs'\n );\n const host = spawn(process.execPath, [hostPath], {\n env: process.env,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n try {\n await waitForTrayHostReady(host);\n return host;\n } catch (error) {\n if (host.exitCode === null && host.signalCode === null) {\n host.kill('SIGTERM');\n }\n throw error;\n }\n};\n\nconst connectToParent = (socketPath: string): Promise<Socket> =>\n new Promise<Socket>((resolveConnect, rejectConnect) => {\n const socket = createConnection(socketPath);\n\n const rejectFromError = (error: Error): void => {\n socket.removeListener('connect', resolveFromConnect);\n rejectConnect(error);\n };\n const resolveFromConnect = (): void => {\n socket.removeListener('error', rejectFromError);\n resolveConnect(socket);\n };\n\n socket.once('error', rejectFromError);\n socket.once('connect', resolveFromConnect);\n });\n\nconst writeReady = (socket: Socket): void => {\n const ready: DriverReadyMessage = { type: 'ready' };\n socket.write(`${JSON.stringify(ready)}\\n`);\n};\n\nconst writeInternalTestOutput = (): void => {\n const stdout = process.env.GESTAMENT_TEST_DRIVER_SYSTEM_STDOUT;\n if (stdout !== undefined) {\n process.stdout.write(stdout);\n }\n const stderr = process.env.GESTAMENT_TEST_DRIVER_SYSTEM_STDERR;\n if (stderr !== undefined) {\n process.stderr.write(stderr);\n }\n};\n\nconst writePayloadInternalTestOutput = (env: WireGtkAppEnvironment): void => {\n const stdout = env.GESTAMENT_TEST_DRIVER_COMMAND_SYSTEM_STDOUT;\n if (stdout !== null && stdout !== undefined) {\n process.stdout.write(stdout);\n }\n const stderr = env.GESTAMENT_TEST_DRIVER_COMMAND_SYSTEM_STDERR;\n if (stderr !== null && stderr !== undefined) {\n process.stderr.write(stderr);\n }\n};\n\nconst writeDriverEvent = (\n channel: DriverEventChannel,\n scopeId: string,\n value: unknown\n): void => {\n try {\n parentSocket?.write(\n `${JSON.stringify({ channel, scopeId, type: 'event', value })}\\n`\n );\n } catch {\n // The parent process owns event delivery; ignore writes after disconnect.\n }\n};\n\nconst writeSystemOutputChunk = (\n stream: 'stdout' | 'stderr',\n chunk: Buffer\n): void => {\n const value: WireGtkSystemOutput = {\n chunkBase64: chunk.toString('base64'),\n source: 'tray-host',\n stream,\n type: 'chunk',\n };\n writeDriverEvent('system.output', 'system', value);\n};\n\nconst writeSystemOutputFlush = (stream: 'stdout' | 'stderr'): void => {\n const value: WireGtkSystemOutput = {\n source: 'tray-host',\n stream,\n type: 'flush',\n };\n writeDriverEvent('system.output', 'system', value);\n};\n\nconst wireEnvironmentToGtkAppEnvironment = (\n env: WireGtkAppEnvironment\n): GtkAppEnvironment => {\n const appEnv: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(env)) {\n appEnv[key] = value === null ? undefined : value;\n }\n return appEnv;\n};\n\nconst gtkAppEnvironmentToWireEnvironment = (\n env: GtkAppEnvironment\n): WireGtkAppEnvironment => {\n const wireEnv: Record<string, string | null> = {};\n for (const [key, value] of Object.entries(env)) {\n wireEnv[key] = value ?? null;\n }\n return wireEnv;\n};\n\nconst toWireCapture = (capture: GtkCapture): WireCapture => ({\n bounds: capture.bounds,\n clipped: capture.clipped,\n imageBase64: capture.image.toString('base64'),\n visibleBounds: capture.visibleBounds,\n});\n\nconst registerApp = (app: GtkApp): DriverAppRef => {\n const appId = `app-${nextAppId}`;\n nextAppId += 1;\n apps.set(appId, app);\n return { appId };\n};\n\nconst registerElement = (\n appId: string,\n element: GtkWidgetElement\n): DriverElementRef => {\n const elementId = `element-${nextElementId}`;\n nextElementId += 1;\n elements.set(elementId, { appId, element });\n return { elementId, kind: element.kind };\n};\n\nconst registerTrayItem = (\n appId: string,\n trayItem: GtkTrayItem\n): DriverTrayItemRef => {\n const trayItemId = `tray-${nextTrayItemId}`;\n nextTrayItemId += 1;\n trayItems.set(trayItemId, { appId, trayItem });\n return { trayItemId };\n};\n\nconst registerImageInfo = (\n appId: string,\n info: GtkImageInfo\n): WireImageInfo => {\n const imageInfoId = `image-info-${nextImageInfoId}`;\n nextImageInfoId += 1;\n imageInfos.set(imageInfoId, { appId, capture: info.capture });\n return {\n bounds: info.bounds,\n description: info.description,\n imageInfoId,\n locale: info.locale,\n position: info.position,\n size: info.size,\n };\n};\n\nconst resolveApp = (appId: string): GtkApp => {\n const app = apps.get(appId);\n if (app === undefined) {\n throw createGtkAppExitedError(\n 'GTK application has exited or was released.'\n );\n }\n return app;\n};\n\nconst resolveElementEntry = (elementId: string): ElementEntry => {\n const entry = elements.get(elementId);\n if (entry === undefined) {\n if (staleElementIds.has(elementId)) {\n throw createGtkStaleElementError('GTK element is no longer available.');\n }\n throw createGtkAppExitedError('GTK element is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('GTK element is no longer available.');\n }\n return entry;\n};\n\nconst resolveTrayItemEntry = (trayItemId: string): TrayItemEntry => {\n const entry = trayItems.get(trayItemId);\n if (entry === undefined) {\n if (staleTrayItemIds.has(trayItemId)) {\n throw createGtkStaleElementError('Tray item is no longer registered.');\n }\n throw createGtkAppExitedError('GTK tray item is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('Tray item is no longer registered.');\n }\n return entry;\n};\n\nconst resolveImageInfoEntry = (imageInfoId: string): ImageInfoEntry => {\n const entry = imageInfos.get(imageInfoId);\n if (entry === undefined) {\n if (staleImageInfoIds.has(imageInfoId)) {\n throw createGtkStaleElementError(\n 'GTK image info is no longer available.'\n );\n }\n throw createGtkAppExitedError('GTK image info is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('GTK image info is no longer available.');\n }\n return entry;\n};\n\nconst removeAppRefs = (appId: string): void => {\n for (const [elementId, entry] of elements) {\n if (entry.appId === appId) {\n staleElementIds.add(elementId);\n elements.delete(elementId);\n }\n }\n for (const [trayItemId, entry] of trayItems) {\n if (entry.appId === appId) {\n staleTrayItemIds.add(trayItemId);\n trayItems.delete(trayItemId);\n }\n }\n for (const [imageInfoId, entry] of imageInfos) {\n if (entry.appId === appId) {\n staleImageInfoIds.add(imageInfoId);\n imageInfos.delete(imageInfoId);\n }\n }\n};\n\nconst releaseApp = async (appId: string): Promise<void> => {\n const app = apps.get(appId);\n if (app === undefined) {\n return;\n }\n\n apps.delete(appId);\n removeAppRefs(appId);\n await app.release();\n};\n\nconst releaseApps = async (): Promise<void> => {\n const appIds = [...apps.keys()];\n await Promise.all(appIds.map((appId) => releaseApp(appId)));\n};\n\nconst stopTrayHost = (): void => {\n if (\n trayHostProcess !== undefined &&\n trayHostProcess.exitCode === null &&\n trayHostProcess.signalCode === null\n ) {\n trayHostProcess.kill('SIGTERM');\n }\n};\n\nconst releaseAll = async (): Promise<void> => {\n await releaseApps();\n stopTrayHost();\n};\n\nconst asMethod = (\n target: unknown,\n methodName: string,\n kindLabel: string\n): AsyncMethod => {\n const value = (target as Record<string, unknown>)[methodName];\n if (typeof value !== 'function') {\n throw createGtkUnsupportedInterfaceError(\n `${kindLabel} does not support ${methodName}().`\n );\n }\n return value as AsyncMethod;\n};\n\nconst callElementMethod = (\n entry: ElementEntry,\n methodName: string,\n args: unknown[] = []\n): Promise<unknown> =>\n asMethod(\n entry.element,\n methodName,\n `GTK ${entry.element.kind} element`\n )(...args);\n\nconst callTrayItemMethod = (\n entry: TrayItemEntry,\n methodName: string,\n args: unknown[] = []\n): Promise<unknown> =>\n asMethod(entry.trayItem, methodName, 'GTK tray item')(...args);\n\nconst serializeError = (error: unknown): SerializedDriverError => {\n if (error instanceof Error) {\n const maybeCode = (error as { code?: unknown }).code;\n const base = {\n message: error.message,\n name: error.name,\n };\n const withStack =\n error.stack === undefined ? base : { ...base, stack: error.stack };\n return typeof maybeCode === 'string'\n ? { ...withStack, code: maybeCode }\n : withStack;\n }\n\n return {\n message: String(error),\n name: 'Error',\n };\n};\n\nconst appPayload = (payload: unknown): DriverAppPayload =>\n payload as DriverAppPayload;\n\nconst elementPayload = (payload: unknown): DriverElementPayload =>\n payload as DriverElementPayload;\n\nconst trayPayload = (payload: unknown): DriverTrayPayload =>\n payload as DriverTrayPayload;\n\nconst optionalElementRef = (\n appId: string,\n element: GtkWidgetElement | undefined\n): DriverElementRef | null =>\n element === undefined ? null : registerElement(appId, element);\n\nconst optionalTrayItemRef = (\n appId: string,\n trayItem: GtkTrayItem | undefined\n): DriverTrayItemRef | null =>\n trayItem === undefined ? null : registerTrayItem(appId, trayItem);\n\nconst handleLauncherCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n switch (command) {\n case 'launcher.environment': {\n const environmentPayload = payload as DriverEnvironmentPayload;\n writePayloadInternalTestOutput(environmentPayload.env);\n return gtkAppEnvironmentToWireEnvironment(\n createGtkAppEnvironment(\n process.env,\n wireEnvironmentToGtkAppEnvironment(environmentPayload.env)\n )\n );\n }\n case 'launcher.launch': {\n const launchPayload = payload as DriverLaunchPayload;\n writePayloadInternalTestOutput(launchPayload.env);\n const outputScopeId = launchPayload.outputScopeId;\n const launchOptions: LaunchGtkAppOptions = {\n env: wireEnvironmentToGtkAppEnvironment(launchPayload.env),\n ...(launchPayload.outputBufferBytes === null\n ? {}\n : { outputBufferBytes: launchPayload.outputBufferBytes }),\n ...(outputScopeId === null\n ? {}\n : {\n onOutput: (event: WireGtkAppOutputEvent): void => {\n writeDriverEvent('app.output', outputScopeId, event);\n },\n }),\n ...(launchPayload.timeoutMs === null\n ? {}\n : { timeoutMs: launchPayload.timeoutMs }),\n };\n const app = await launchGtkApp(\n launchPayload.appPath,\n launchPayload.args,\n launchOptions\n );\n return registerApp(app);\n }\n case 'launcher.release':\n await releaseAll();\n return null;\n case 'launcher.reset':\n await releaseApps();\n return {\n appCount: apps.size,\n elementCount: elements.size,\n imageInfoCount: imageInfos.size,\n trayItemCount: trayItems.size,\n };\n default:\n throw createGtkOperationFailedError(`Unsupported command: ${command}`);\n }\n};\n\nconst handleAppCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { appId } = appPayload(payload);\n const app = resolveApp(appId);\n\n switch (command) {\n case 'app.environment':\n return gtkAppEnvironmentToWireEnvironment(await app.environment());\n case 'app.output':\n return (await app.output()) satisfies WireGtkAppOutput;\n case 'app.release':\n await releaseApp(appId);\n return null;\n case 'app.capture':\n return toWireCapture(await app.capture());\n case 'app.findById': {\n const { id } = payload as DriverAppPayload & DriverIdPayload;\n return optionalElementRef(appId, await app.findById(id));\n }\n case 'app.getById': {\n const { id } = payload as DriverAppPayload & DriverIdPayload;\n return registerElement(appId, await app.getById(id));\n }\n case 'app.findByPath': {\n const { path } = payload as DriverAppPayload & DriverPathPayload;\n return optionalElementRef(appId, await app.findByPath(path));\n }\n case 'app.getByPath': {\n const { path } = payload as DriverAppPayload & DriverPathPayload;\n return registerElement(appId, await app.getByPath(path));\n }\n case 'app.windowAt': {\n const { index } = payload as DriverAppPayload & DriverIndexPayload;\n return optionalElementRef(appId, await app.windowAt(index));\n }\n case 'app.getWindowCount':\n return app.getWindowCount();\n case 'app.findTrayItem': {\n const { selector } = payload as DriverAppPayload &\n DriverTraySelectorPayload;\n return optionalTrayItemRef(appId, await app.findTrayItem(selector));\n }\n case 'app.getTrayItem': {\n const { selector } = payload as DriverAppPayload &\n DriverTraySelectorPayload;\n return registerTrayItem(appId, await app.getTrayItem(selector));\n }\n case 'app.trayItemAt': {\n const { index } = payload as DriverAppPayload & DriverIndexPayload;\n return optionalTrayItemRef(appId, await app.trayItemAt(index));\n }\n case 'app.getTrayItemCount':\n return app.getTrayItemCount();\n default:\n throw createGtkOperationFailedError(\n `Unsupported app command: ${command}`\n );\n }\n};\n\nconst handleElementCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { elementId } = elementPayload(payload);\n const entry = resolveElementEntry(elementId);\n\n switch (command) {\n case 'element.info':\n return entry.element.info();\n case 'element.capture':\n return toWireCapture(await entry.element.capture());\n case 'element.bounds':\n return callElementMethod(entry, 'bounds');\n case 'window.resizeHints':\n return callElementMethod(entry, 'resizeHints');\n case 'window.x11Info':\n return callElementMethod(entry, 'x11Info');\n case 'element.childAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'childAt', [index])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.getChildCount':\n return callElementMethod(entry, 'getChildCount');\n case 'element.click':\n await callElementMethod(entry, 'click');\n return null;\n case 'element.text':\n return callElementMethod(entry, 'text');\n case 'element.setText': {\n const { text } = payload as DriverElementPayload & DriverTextPayload;\n await callElementMethod(entry, 'setText', [text]);\n return null;\n }\n case 'element.isChecked':\n return callElementMethod(entry, 'isChecked');\n case 'element.toggle':\n await callElementMethod(entry, 'toggle');\n return null;\n case 'element.value':\n return callElementMethod(entry, 'value');\n case 'element.valueInfo':\n return callElementMethod(entry, 'valueInfo');\n case 'element.setValue': {\n const { value } = payload as DriverElementPayload & DriverValuePayload;\n await callElementMethod(entry, 'setValue', [value]);\n return null;\n }\n case 'element.increment':\n await callElementMethod(entry, 'increment');\n return null;\n case 'element.decrement':\n await callElementMethod(entry, 'decrement');\n return null;\n case 'element.getSelectedChildCount':\n return callElementMethod(entry, 'getSelectedChildCount');\n case 'element.selectedChildAt': {\n const { selectedIndex } = payload as DriverElementPayload &\n DriverSelectedIndexPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'selectedChildAt', [selectedIndex])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.isChildSelected': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n return callElementMethod(entry, 'isChildSelected', [index]);\n }\n case 'element.selectChildAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n await callElementMethod(entry, 'selectChildAt', [index]);\n return null;\n }\n case 'element.deselectChildAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n await callElementMethod(entry, 'deselectChildAt', [index]);\n return null;\n }\n case 'element.selectAllChildren':\n await callElementMethod(entry, 'selectAllChildren');\n return null;\n case 'element.clearSelection':\n await callElementMethod(entry, 'clearSelection');\n return null;\n case 'element.getRowCount':\n return callElementMethod(entry, 'getRowCount');\n case 'element.getColumnCount':\n return callElementMethod(entry, 'getColumnCount');\n case 'element.cellAt': {\n const { column, row } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'cellAt', [row, column])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.selectedRows':\n return callElementMethod(entry, 'selectedRows');\n case 'element.selectedColumns':\n return callElementMethod(entry, 'selectedColumns');\n case 'element.isRowSelected': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n return callElementMethod(entry, 'isRowSelected', [row]);\n }\n case 'element.isColumnSelected': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return callElementMethod(entry, 'isColumnSelected', [column]);\n }\n case 'element.isCellSelected': {\n const { column, row } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return callElementMethod(entry, 'isCellSelected', [row, column]);\n }\n case 'element.selectRow': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n await callElementMethod(entry, 'selectRow', [row]);\n return null;\n }\n case 'element.deselectRow': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n await callElementMethod(entry, 'deselectRow', [row]);\n return null;\n }\n case 'element.selectColumn': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n await callElementMethod(entry, 'selectColumn', [column]);\n return null;\n }\n case 'element.deselectColumn': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n await callElementMethod(entry, 'deselectColumn', [column]);\n return null;\n }\n case 'element.imageInfo': {\n const info = (await callElementMethod(\n entry,\n 'imageInfo'\n )) as GtkImageInfo;\n return registerImageInfo(entry.appId, info);\n }\n default:\n throw createGtkOperationFailedError(\n `Unsupported element command: ${command}`\n );\n }\n};\n\nconst handleImageInfoCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n if (command !== 'imageInfo.capture') {\n throw createGtkOperationFailedError(\n `Unsupported image info command: ${command}`\n );\n }\n const { imageInfoId } = payload as DriverImageInfoPayload;\n const entry = resolveImageInfoEntry(imageInfoId);\n return toWireCapture(await entry.capture());\n};\n\nconst handleTrayCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { trayItemId } = trayPayload(payload);\n const entry = resolveTrayItemEntry(trayItemId);\n\n switch (command) {\n case 'tray.metadata':\n return entry.trayItem.metadata();\n case 'tray.element':\n return optionalElementRef(\n entry.appId,\n (await callTrayItemMethod(entry, 'element')) as\n | GtkWidgetElement\n | undefined\n );\n case 'tray.capture':\n return toWireCapture(await entry.trayItem.capture());\n case 'tray.click':\n await entry.trayItem.click();\n return null;\n case 'tray.openMenu':\n return optionalElementRef(\n entry.appId,\n (await callTrayItemMethod(entry, 'openMenu')) as\n | GtkWidgetElement\n | undefined\n );\n default:\n throw createGtkOperationFailedError(\n `Unsupported tray command: ${command}`\n );\n }\n};\n\nconst handleRequest = async (request: DriverRequest): Promise<unknown> => {\n if (request.command.startsWith('launcher.')) {\n return handleLauncherCommand(request.command, request.payload);\n }\n if (request.command.startsWith('app.')) {\n return handleAppCommand(request.command, request.payload);\n }\n if (request.command.startsWith('element.')) {\n return handleElementCommand(request.command, request.payload);\n }\n if (request.command.startsWith('window.')) {\n return handleElementCommand(request.command, request.payload);\n }\n if (request.command.startsWith('imageInfo.')) {\n return handleImageInfoCommand(request.command, request.payload);\n }\n if (request.command.startsWith('tray.')) {\n return handleTrayCommand(request.command, request.payload);\n }\n throw createGtkOperationFailedError(\n `Unsupported launcher driver command: ${request.command}`\n );\n};\n\nconst writeResponse = (\n socket: Socket,\n id: number,\n response:\n | {\n readonly ok: true;\n readonly value: unknown;\n }\n | {\n readonly error: SerializedDriverError;\n readonly ok: false;\n }\n): void => {\n socket.write(`${JSON.stringify({ id, ...response })}\\n`);\n};\n\nconst handleRequestLine = async (\n socket: Socket,\n line: string\n): Promise<void> => {\n const request = JSON.parse(line) as DriverRequest;\n try {\n const value =\n request.deadlineMs === undefined || request.deadlineMs === null\n ? await handleRequest(request)\n : await runWithWaitDeadline(request.deadlineMs, () =>\n handleRequest(request)\n );\n writeResponse(socket, request.id, { ok: true, value });\n if (request.command === 'launcher.release') {\n socket.end();\n }\n } catch (error) {\n writeResponse(socket, request.id, {\n error: serializeError(error),\n ok: false,\n });\n }\n};\n\nconst installSocketProtocol = (socket: Socket): void => {\n parentSocket = socket;\n let input = '';\n\n socket.on('data', (chunk: Buffer) => {\n input += chunk.toString('utf8');\n let newlineIndex = input.indexOf('\\n');\n while (newlineIndex >= 0) {\n const line = input.slice(0, newlineIndex);\n input = input.slice(newlineIndex + 1);\n void handleRequestLine(socket, line);\n newlineIndex = input.indexOf('\\n');\n }\n });\n\n socket.once('close', () => {\n parentSocket = undefined;\n void shutdown(0);\n });\n socket.once('error', () => {\n parentSocket = undefined;\n void shutdown(1);\n });\n};\n\nconst shutdown = async (exitCode: number): Promise<void> => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n await releaseAll();\n process.exitCode = exitCode;\n setImmediate(() => {\n process.exit(exitCode);\n });\n};\n\nconst run = async (): Promise<void> => {\n const parsed = parseArguments(process.argv.slice(2));\n const socket = await connectToParent(parsed.socketPath);\n installSocketProtocol(socket);\n writeInternalTestOutput();\n trayHostProcess = parsed.withTrayHost ? await startTrayHost() : undefined;\n writeReady(socket);\n\n process.once('SIGINT', () => {\n void shutdown(130);\n });\n process.once('SIGTERM', () => {\n void shutdown(143);\n });\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\nrun().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`gestament launcher driver: ${message}\\n`);\n process.exitCode = 2;\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gestament-launcher-driver.mjs","sources":["../src/gestament-launcher-driver.ts"],"sourcesContent":["#!/usr/bin/env node\n// gestament - TypeScript based test driver for GTK.\n// Copyright (c) Kouji Matsui. (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/gestament\n\nimport { spawn, type ChildProcess } from 'node:child_process';\nimport { createConnection, type Socket } from 'node:net';\nimport { realpathSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\n\nimport {\n createGtkAppExitedError,\n createGtkOperationFailedError,\n createGtkStaleElementError,\n createGtkUnsupportedInterfaceError,\n} from './errors';\nimport { createGtkAppEnvironment, launchGtkApp } from './launchGtkApp';\nimport { runWithWaitDeadline } from './wait';\nimport type {\n DriverEnvironmentPayload,\n DriverAppPayload,\n DriverAppRef,\n DriverCommand,\n DriverEventChannel,\n DriverElementPayload,\n DriverElementRef,\n DriverIdPayload,\n DriverImageInfoPayload,\n DriverIndexPayload,\n DriverLaunchPayload,\n DriverPathPayload,\n DriverReadyMessage,\n DriverRequest,\n DriverSelectedIndexPayload,\n DriverTableCellPayload,\n DriverTextPayload,\n DriverTrayItemRef,\n DriverTrayPayload,\n DriverTraySelectorPayload,\n DriverValuePayload,\n DriverWindowBoundsPayload,\n DriverWindowMovePayload,\n DriverWindowResizePayload,\n SerializedDriverError,\n WireCapture,\n WireGtkAppEnvironment,\n WireGtkAppOutput,\n WireGtkAppOutputEvent,\n WireGtkSystemOutput,\n WireImageInfo,\n} from './launcherDriverProtocol';\nimport type {\n GtkApp,\n GtkAppEnvironment,\n GtkCapture,\n GtkImageInfo,\n GtkTrayItem,\n GtkWidgetElement,\n LaunchGtkAppOptions,\n} from './types';\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\ninterface DriverArguments {\n readonly socketPath: string;\n readonly withTrayHost: boolean;\n}\n\ninterface ElementEntry {\n readonly appId: string;\n readonly element: GtkWidgetElement;\n}\n\ninterface TrayItemEntry {\n readonly appId: string;\n readonly trayItem: GtkTrayItem;\n}\n\ninterface ImageInfoEntry {\n readonly appId: string;\n readonly capture: () => Promise<GtkCapture>;\n}\n\ntype AsyncMethod = (...args: unknown[]) => Promise<unknown>;\n\nconst trayHostReadyLine = 'gestament-tray-host-ready';\nconst trayHostReadyTimeoutMs = 30_000;\n\nconst apps = new Map<string, GtkApp>();\nconst elements = new Map<string, ElementEntry>();\nconst trayItems = new Map<string, TrayItemEntry>();\nconst imageInfos = new Map<string, ImageInfoEntry>();\nconst staleElementIds = new Set<string>();\nconst staleTrayItemIds = new Set<string>();\nconst staleImageInfoIds = new Set<string>();\n\nlet nextAppId = 1;\nlet nextElementId = 1;\nlet nextTrayItemId = 1;\nlet nextImageInfoId = 1;\nlet parentSocket: Socket | undefined;\nlet shuttingDown = false;\nlet trayHostProcess: ChildProcess | undefined;\n\nconst parseArguments = (args: readonly string[]): DriverArguments => {\n let socketPath: string | undefined;\n let withTrayHost = false;\n let index = 0;\n\n while (index < args.length) {\n const argument = args[index];\n\n if (argument === '--socket') {\n const value = args[index + 1];\n if (value === undefined || value.length === 0) {\n throw new Error('--socket requires a Unix socket path.');\n }\n socketPath = value;\n index += 2;\n continue;\n }\n\n if (argument === '--with-tray-host') {\n withTrayHost = true;\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown gestament launcher driver option: ${argument}`);\n }\n\n if (socketPath === undefined) {\n throw new Error('Missing --socket option.');\n }\n\n return { socketPath, withTrayHost };\n};\n\nconst waitForTrayHostReady = (host: ChildProcess): Promise<void> =>\n new Promise<void>((resolveReady, rejectReady) => {\n if (host.stdout === null) {\n rejectReady(new Error('gestament tray host did not expose stdout.'));\n return;\n }\n\n let output = '';\n let settled = false;\n\n const timeout = setTimeout(() => {\n if (!settled) {\n settled = true;\n rejectReady(new Error('Timed out waiting for gestament tray host.'));\n }\n }, trayHostReadyTimeoutMs);\n\n host.stdout.on('data', (chunk: Buffer) => {\n const text = chunk.toString('utf8');\n output += text;\n const readyIndex = output.indexOf(trayHostReadyLine);\n if (!settled && readyIndex >= 0) {\n settled = true;\n clearTimeout(timeout);\n const beforeReady = output.slice(0, readyIndex);\n if (beforeReady.length > 0) {\n writeSystemOutputChunk('stdout', Buffer.from(beforeReady));\n }\n let afterReadyIndex = readyIndex + trayHostReadyLine.length;\n if (output.slice(afterReadyIndex, afterReadyIndex + 2) === '\\r\\n') {\n afterReadyIndex += 2;\n } else if (output[afterReadyIndex] === '\\n') {\n afterReadyIndex += 1;\n }\n const afterReady = output.slice(afterReadyIndex);\n if (afterReady.length > 0) {\n writeSystemOutputChunk('stdout', Buffer.from(afterReady));\n }\n resolveReady();\n return;\n }\n if (settled) {\n writeSystemOutputChunk('stdout', chunk);\n }\n });\n host.stdout.once('end', () => {\n writeSystemOutputFlush('stdout');\n });\n host.stderr?.on('data', (chunk: Buffer) => {\n writeSystemOutputChunk('stderr', chunk);\n });\n host.stderr?.once('end', () => {\n writeSystemOutputFlush('stderr');\n });\n\n host.once('exit', (code, signal) => {\n if (!settled) {\n settled = true;\n clearTimeout(timeout);\n rejectReady(\n new Error(\n `gestament tray host exited before ready: code=${String(\n code\n )}, signal=${String(signal)}`\n )\n );\n }\n });\n\n host.once('error', (error) => {\n if (!settled) {\n settled = true;\n clearTimeout(timeout);\n rejectReady(error);\n }\n });\n });\n\nconst startTrayHost = async (): Promise<ChildProcess> => {\n const executablePath = process.argv[1];\n if (executablePath === undefined) {\n throw new Error('Missing executable path.');\n }\n\n const hostPath = resolve(\n dirname(realpathSync(executablePath)),\n 'gestament-tray-host.cjs'\n );\n const host = spawn(process.execPath, [hostPath], {\n env: process.env,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n try {\n await waitForTrayHostReady(host);\n return host;\n } catch (error) {\n if (host.exitCode === null && host.signalCode === null) {\n host.kill('SIGTERM');\n }\n throw error;\n }\n};\n\nconst connectToParent = (socketPath: string): Promise<Socket> =>\n new Promise<Socket>((resolveConnect, rejectConnect) => {\n const socket = createConnection(socketPath);\n\n const rejectFromError = (error: Error): void => {\n socket.removeListener('connect', resolveFromConnect);\n rejectConnect(error);\n };\n const resolveFromConnect = (): void => {\n socket.removeListener('error', rejectFromError);\n resolveConnect(socket);\n };\n\n socket.once('error', rejectFromError);\n socket.once('connect', resolveFromConnect);\n });\n\nconst writeReady = (socket: Socket): void => {\n const ready: DriverReadyMessage = { type: 'ready' };\n socket.write(`${JSON.stringify(ready)}\\n`);\n};\n\nconst writeInternalTestOutput = (): void => {\n const stdout = process.env.GESTAMENT_TEST_DRIVER_SYSTEM_STDOUT;\n if (stdout !== undefined) {\n process.stdout.write(stdout);\n }\n const stderr = process.env.GESTAMENT_TEST_DRIVER_SYSTEM_STDERR;\n if (stderr !== undefined) {\n process.stderr.write(stderr);\n }\n};\n\nconst writePayloadInternalTestOutput = (env: WireGtkAppEnvironment): void => {\n const stdout = env.GESTAMENT_TEST_DRIVER_COMMAND_SYSTEM_STDOUT;\n if (stdout !== null && stdout !== undefined) {\n process.stdout.write(stdout);\n }\n const stderr = env.GESTAMENT_TEST_DRIVER_COMMAND_SYSTEM_STDERR;\n if (stderr !== null && stderr !== undefined) {\n process.stderr.write(stderr);\n }\n};\n\nconst writeDriverEvent = (\n channel: DriverEventChannel,\n scopeId: string,\n value: unknown\n): void => {\n try {\n parentSocket?.write(\n `${JSON.stringify({ channel, scopeId, type: 'event', value })}\\n`\n );\n } catch {\n // The parent process owns event delivery; ignore writes after disconnect.\n }\n};\n\nconst writeSystemOutputChunk = (\n stream: 'stdout' | 'stderr',\n chunk: Buffer\n): void => {\n const value: WireGtkSystemOutput = {\n chunkBase64: chunk.toString('base64'),\n source: 'tray-host',\n stream,\n type: 'chunk',\n };\n writeDriverEvent('system.output', 'system', value);\n};\n\nconst writeSystemOutputFlush = (stream: 'stdout' | 'stderr'): void => {\n const value: WireGtkSystemOutput = {\n source: 'tray-host',\n stream,\n type: 'flush',\n };\n writeDriverEvent('system.output', 'system', value);\n};\n\nconst wireEnvironmentToGtkAppEnvironment = (\n env: WireGtkAppEnvironment\n): GtkAppEnvironment => {\n const appEnv: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(env)) {\n appEnv[key] = value === null ? undefined : value;\n }\n return appEnv;\n};\n\nconst gtkAppEnvironmentToWireEnvironment = (\n env: GtkAppEnvironment\n): WireGtkAppEnvironment => {\n const wireEnv: Record<string, string | null> = {};\n for (const [key, value] of Object.entries(env)) {\n wireEnv[key] = value ?? null;\n }\n return wireEnv;\n};\n\nconst toWireCapture = (capture: GtkCapture): WireCapture => ({\n bounds: capture.bounds,\n clipped: capture.clipped,\n imageBase64: capture.image.toString('base64'),\n visibleBounds: capture.visibleBounds,\n});\n\nconst registerApp = (app: GtkApp): DriverAppRef => {\n const appId = `app-${nextAppId}`;\n nextAppId += 1;\n apps.set(appId, app);\n return { appId };\n};\n\nconst registerElement = (\n appId: string,\n element: GtkWidgetElement\n): DriverElementRef => {\n const elementId = `element-${nextElementId}`;\n nextElementId += 1;\n elements.set(elementId, { appId, element });\n return { elementId, kind: element.kind };\n};\n\nconst registerTrayItem = (\n appId: string,\n trayItem: GtkTrayItem\n): DriverTrayItemRef => {\n const trayItemId = `tray-${nextTrayItemId}`;\n nextTrayItemId += 1;\n trayItems.set(trayItemId, { appId, trayItem });\n return { trayItemId };\n};\n\nconst registerImageInfo = (\n appId: string,\n info: GtkImageInfo\n): WireImageInfo => {\n const imageInfoId = `image-info-${nextImageInfoId}`;\n nextImageInfoId += 1;\n imageInfos.set(imageInfoId, { appId, capture: info.capture });\n return {\n bounds: info.bounds,\n description: info.description,\n imageInfoId,\n locale: info.locale,\n position: info.position,\n size: info.size,\n };\n};\n\nconst resolveApp = (appId: string): GtkApp => {\n const app = apps.get(appId);\n if (app === undefined) {\n throw createGtkAppExitedError(\n 'GTK application has exited or was released.'\n );\n }\n return app;\n};\n\nconst resolveElementEntry = (elementId: string): ElementEntry => {\n const entry = elements.get(elementId);\n if (entry === undefined) {\n if (staleElementIds.has(elementId)) {\n throw createGtkStaleElementError('GTK element is no longer available.');\n }\n throw createGtkAppExitedError('GTK element is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('GTK element is no longer available.');\n }\n return entry;\n};\n\nconst resolveTrayItemEntry = (trayItemId: string): TrayItemEntry => {\n const entry = trayItems.get(trayItemId);\n if (entry === undefined) {\n if (staleTrayItemIds.has(trayItemId)) {\n throw createGtkStaleElementError('Tray item is no longer registered.');\n }\n throw createGtkAppExitedError('GTK tray item is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('Tray item is no longer registered.');\n }\n return entry;\n};\n\nconst resolveImageInfoEntry = (imageInfoId: string): ImageInfoEntry => {\n const entry = imageInfos.get(imageInfoId);\n if (entry === undefined) {\n if (staleImageInfoIds.has(imageInfoId)) {\n throw createGtkStaleElementError(\n 'GTK image info is no longer available.'\n );\n }\n throw createGtkAppExitedError('GTK image info is not registered.');\n }\n if (!apps.has(entry.appId)) {\n throw createGtkStaleElementError('GTK image info is no longer available.');\n }\n return entry;\n};\n\nconst removeAppRefs = (appId: string): void => {\n for (const [elementId, entry] of elements) {\n if (entry.appId === appId) {\n staleElementIds.add(elementId);\n elements.delete(elementId);\n }\n }\n for (const [trayItemId, entry] of trayItems) {\n if (entry.appId === appId) {\n staleTrayItemIds.add(trayItemId);\n trayItems.delete(trayItemId);\n }\n }\n for (const [imageInfoId, entry] of imageInfos) {\n if (entry.appId === appId) {\n staleImageInfoIds.add(imageInfoId);\n imageInfos.delete(imageInfoId);\n }\n }\n};\n\nconst releaseApp = async (appId: string): Promise<void> => {\n const app = apps.get(appId);\n if (app === undefined) {\n return;\n }\n\n apps.delete(appId);\n removeAppRefs(appId);\n await app.release();\n};\n\nconst releaseApps = async (): Promise<void> => {\n const appIds = [...apps.keys()];\n await Promise.all(appIds.map((appId) => releaseApp(appId)));\n};\n\nconst stopTrayHost = (): void => {\n if (\n trayHostProcess !== undefined &&\n trayHostProcess.exitCode === null &&\n trayHostProcess.signalCode === null\n ) {\n trayHostProcess.kill('SIGTERM');\n }\n};\n\nconst releaseAll = async (): Promise<void> => {\n await releaseApps();\n stopTrayHost();\n};\n\nconst asMethod = (\n target: unknown,\n methodName: string,\n kindLabel: string\n): AsyncMethod => {\n const value = (target as Record<string, unknown>)[methodName];\n if (typeof value !== 'function') {\n throw createGtkUnsupportedInterfaceError(\n `${kindLabel} does not support ${methodName}().`\n );\n }\n return value as AsyncMethod;\n};\n\nconst callElementMethod = (\n entry: ElementEntry,\n methodName: string,\n args: unknown[] = []\n): Promise<unknown> =>\n asMethod(\n entry.element,\n methodName,\n `GTK ${entry.element.kind} element`\n )(...args);\n\nconst callTrayItemMethod = (\n entry: TrayItemEntry,\n methodName: string,\n args: unknown[] = []\n): Promise<unknown> =>\n asMethod(entry.trayItem, methodName, 'GTK tray item')(...args);\n\nconst serializeError = (error: unknown): SerializedDriverError => {\n if (error instanceof Error) {\n const maybeCode = (error as { code?: unknown }).code;\n const base = {\n message: error.message,\n name: error.name,\n };\n const withStack =\n error.stack === undefined ? base : { ...base, stack: error.stack };\n return typeof maybeCode === 'string'\n ? { ...withStack, code: maybeCode }\n : withStack;\n }\n\n return {\n message: String(error),\n name: 'Error',\n };\n};\n\nconst appPayload = (payload: unknown): DriverAppPayload =>\n payload as DriverAppPayload;\n\nconst elementPayload = (payload: unknown): DriverElementPayload =>\n payload as DriverElementPayload;\n\nconst trayPayload = (payload: unknown): DriverTrayPayload =>\n payload as DriverTrayPayload;\n\nconst optionalElementRef = (\n appId: string,\n element: GtkWidgetElement | undefined\n): DriverElementRef | null =>\n element === undefined ? null : registerElement(appId, element);\n\nconst optionalTrayItemRef = (\n appId: string,\n trayItem: GtkTrayItem | undefined\n): DriverTrayItemRef | null =>\n trayItem === undefined ? null : registerTrayItem(appId, trayItem);\n\nconst handleLauncherCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n switch (command) {\n case 'launcher.environment': {\n const environmentPayload = payload as DriverEnvironmentPayload;\n writePayloadInternalTestOutput(environmentPayload.env);\n return gtkAppEnvironmentToWireEnvironment(\n createGtkAppEnvironment(\n process.env,\n wireEnvironmentToGtkAppEnvironment(environmentPayload.env)\n )\n );\n }\n case 'launcher.launch': {\n const launchPayload = payload as DriverLaunchPayload;\n writePayloadInternalTestOutput(launchPayload.env);\n const outputScopeId = launchPayload.outputScopeId;\n const launchOptions: LaunchGtkAppOptions = {\n env: wireEnvironmentToGtkAppEnvironment(launchPayload.env),\n ...(launchPayload.outputBufferBytes === null\n ? {}\n : { outputBufferBytes: launchPayload.outputBufferBytes }),\n ...(outputScopeId === null\n ? {}\n : {\n onOutput: (event: WireGtkAppOutputEvent): void => {\n writeDriverEvent('app.output', outputScopeId, event);\n },\n }),\n ...(launchPayload.timeoutMs === null\n ? {}\n : { timeoutMs: launchPayload.timeoutMs }),\n };\n const app = await launchGtkApp(\n launchPayload.appPath,\n launchPayload.args,\n launchOptions\n );\n return registerApp(app);\n }\n case 'launcher.release':\n await releaseAll();\n return null;\n case 'launcher.reset':\n await releaseApps();\n return {\n appCount: apps.size,\n elementCount: elements.size,\n imageInfoCount: imageInfos.size,\n trayItemCount: trayItems.size,\n };\n default:\n throw createGtkOperationFailedError(`Unsupported command: ${command}`);\n }\n};\n\nconst handleAppCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { appId } = appPayload(payload);\n const app = resolveApp(appId);\n\n switch (command) {\n case 'app.environment':\n return gtkAppEnvironmentToWireEnvironment(await app.environment());\n case 'app.output':\n return (await app.output()) satisfies WireGtkAppOutput;\n case 'app.release':\n await releaseApp(appId);\n return null;\n case 'app.capture':\n return toWireCapture(await app.capture());\n case 'app.findById': {\n const { id } = payload as DriverAppPayload & DriverIdPayload;\n return optionalElementRef(appId, await app.findById(id));\n }\n case 'app.getById': {\n const { id } = payload as DriverAppPayload & DriverIdPayload;\n return registerElement(appId, await app.getById(id));\n }\n case 'app.findByPath': {\n const { path } = payload as DriverAppPayload & DriverPathPayload;\n return optionalElementRef(appId, await app.findByPath(path));\n }\n case 'app.getByPath': {\n const { path } = payload as DriverAppPayload & DriverPathPayload;\n return registerElement(appId, await app.getByPath(path));\n }\n case 'app.windowAt': {\n const { index } = payload as DriverAppPayload & DriverIndexPayload;\n return optionalElementRef(appId, await app.windowAt(index));\n }\n case 'app.getWindowCount':\n return app.getWindowCount();\n case 'app.findTrayItem': {\n const { selector } = payload as DriverAppPayload &\n DriverTraySelectorPayload;\n return optionalTrayItemRef(appId, await app.findTrayItem(selector));\n }\n case 'app.getTrayItem': {\n const { selector } = payload as DriverAppPayload &\n DriverTraySelectorPayload;\n return registerTrayItem(appId, await app.getTrayItem(selector));\n }\n case 'app.trayItemAt': {\n const { index } = payload as DriverAppPayload & DriverIndexPayload;\n return optionalTrayItemRef(appId, await app.trayItemAt(index));\n }\n case 'app.getTrayItemCount':\n return app.getTrayItemCount();\n default:\n throw createGtkOperationFailedError(\n `Unsupported app command: ${command}`\n );\n }\n};\n\nconst handleElementCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { elementId } = elementPayload(payload);\n const entry = resolveElementEntry(elementId);\n\n switch (command) {\n case 'element.info':\n return entry.element.info();\n case 'element.capture':\n return toWireCapture(await entry.element.capture());\n case 'element.bounds':\n return callElementMethod(entry, 'bounds');\n case 'window.moveTo': {\n const { x, y } = payload as DriverElementPayload &\n DriverWindowMovePayload;\n return callElementMethod(entry, 'moveTo', [x, y]);\n }\n case 'window.resizeHints':\n return callElementMethod(entry, 'resizeHints');\n case 'window.resizeTo': {\n const { width, height } = payload as DriverElementPayload &\n DriverWindowResizePayload;\n return callElementMethod(entry, 'resizeTo', [width, height]);\n }\n case 'window.setBounds': {\n const { bounds } = payload as DriverElementPayload &\n DriverWindowBoundsPayload;\n return callElementMethod(entry, 'setBounds', [bounds]);\n }\n case 'window.x11Info':\n return callElementMethod(entry, 'x11Info');\n case 'element.childAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'childAt', [index])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.getChildCount':\n return callElementMethod(entry, 'getChildCount');\n case 'element.click':\n await callElementMethod(entry, 'click');\n return null;\n case 'element.text':\n return callElementMethod(entry, 'text');\n case 'element.setText': {\n const { text } = payload as DriverElementPayload & DriverTextPayload;\n await callElementMethod(entry, 'setText', [text]);\n return null;\n }\n case 'element.isChecked':\n return callElementMethod(entry, 'isChecked');\n case 'element.toggle':\n await callElementMethod(entry, 'toggle');\n return null;\n case 'element.value':\n return callElementMethod(entry, 'value');\n case 'element.valueInfo':\n return callElementMethod(entry, 'valueInfo');\n case 'element.setValue': {\n const { value } = payload as DriverElementPayload & DriverValuePayload;\n await callElementMethod(entry, 'setValue', [value]);\n return null;\n }\n case 'element.increment':\n await callElementMethod(entry, 'increment');\n return null;\n case 'element.decrement':\n await callElementMethod(entry, 'decrement');\n return null;\n case 'element.getSelectedChildCount':\n return callElementMethod(entry, 'getSelectedChildCount');\n case 'element.selectedChildAt': {\n const { selectedIndex } = payload as DriverElementPayload &\n DriverSelectedIndexPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'selectedChildAt', [selectedIndex])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.isChildSelected': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n return callElementMethod(entry, 'isChildSelected', [index]);\n }\n case 'element.selectChildAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n await callElementMethod(entry, 'selectChildAt', [index]);\n return null;\n }\n case 'element.deselectChildAt': {\n const { index } = payload as DriverElementPayload & DriverIndexPayload;\n await callElementMethod(entry, 'deselectChildAt', [index]);\n return null;\n }\n case 'element.selectAllChildren':\n await callElementMethod(entry, 'selectAllChildren');\n return null;\n case 'element.clearSelection':\n await callElementMethod(entry, 'clearSelection');\n return null;\n case 'element.getRowCount':\n return callElementMethod(entry, 'getRowCount');\n case 'element.getColumnCount':\n return callElementMethod(entry, 'getColumnCount');\n case 'element.cellAt': {\n const { column, row } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return optionalElementRef(\n entry.appId,\n (await callElementMethod(entry, 'cellAt', [row, column])) as\n | GtkWidgetElement\n | undefined\n );\n }\n case 'element.selectedRows':\n return callElementMethod(entry, 'selectedRows');\n case 'element.selectedColumns':\n return callElementMethod(entry, 'selectedColumns');\n case 'element.isRowSelected': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n return callElementMethod(entry, 'isRowSelected', [row]);\n }\n case 'element.isColumnSelected': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return callElementMethod(entry, 'isColumnSelected', [column]);\n }\n case 'element.isCellSelected': {\n const { column, row } = payload as DriverElementPayload &\n DriverTableCellPayload;\n return callElementMethod(entry, 'isCellSelected', [row, column]);\n }\n case 'element.selectRow': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n await callElementMethod(entry, 'selectRow', [row]);\n return null;\n }\n case 'element.deselectRow': {\n const { row } = payload as DriverElementPayload & DriverTableCellPayload;\n await callElementMethod(entry, 'deselectRow', [row]);\n return null;\n }\n case 'element.selectColumn': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n await callElementMethod(entry, 'selectColumn', [column]);\n return null;\n }\n case 'element.deselectColumn': {\n const { column } = payload as DriverElementPayload &\n DriverTableCellPayload;\n await callElementMethod(entry, 'deselectColumn', [column]);\n return null;\n }\n case 'element.imageInfo': {\n const info = (await callElementMethod(\n entry,\n 'imageInfo'\n )) as GtkImageInfo;\n return registerImageInfo(entry.appId, info);\n }\n default:\n throw createGtkOperationFailedError(\n `Unsupported element command: ${command}`\n );\n }\n};\n\nconst handleImageInfoCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n if (command !== 'imageInfo.capture') {\n throw createGtkOperationFailedError(\n `Unsupported image info command: ${command}`\n );\n }\n const { imageInfoId } = payload as DriverImageInfoPayload;\n const entry = resolveImageInfoEntry(imageInfoId);\n return toWireCapture(await entry.capture());\n};\n\nconst handleTrayCommand = async (\n command: DriverCommand,\n payload: unknown\n): Promise<unknown> => {\n const { trayItemId } = trayPayload(payload);\n const entry = resolveTrayItemEntry(trayItemId);\n\n switch (command) {\n case 'tray.metadata':\n return entry.trayItem.metadata();\n case 'tray.element':\n return optionalElementRef(\n entry.appId,\n (await callTrayItemMethod(entry, 'element')) as\n | GtkWidgetElement\n | undefined\n );\n case 'tray.capture':\n return toWireCapture(await entry.trayItem.capture());\n case 'tray.click':\n await entry.trayItem.click();\n return null;\n case 'tray.openMenu':\n return optionalElementRef(\n entry.appId,\n (await callTrayItemMethod(entry, 'openMenu')) as\n | GtkWidgetElement\n | undefined\n );\n default:\n throw createGtkOperationFailedError(\n `Unsupported tray command: ${command}`\n );\n }\n};\n\nconst handleRequest = async (request: DriverRequest): Promise<unknown> => {\n if (request.command.startsWith('launcher.')) {\n return handleLauncherCommand(request.command, request.payload);\n }\n if (request.command.startsWith('app.')) {\n return handleAppCommand(request.command, request.payload);\n }\n if (request.command.startsWith('element.')) {\n return handleElementCommand(request.command, request.payload);\n }\n if (request.command.startsWith('window.')) {\n return handleElementCommand(request.command, request.payload);\n }\n if (request.command.startsWith('imageInfo.')) {\n return handleImageInfoCommand(request.command, request.payload);\n }\n if (request.command.startsWith('tray.')) {\n return handleTrayCommand(request.command, request.payload);\n }\n throw createGtkOperationFailedError(\n `Unsupported launcher driver command: ${request.command}`\n );\n};\n\nconst writeResponse = (\n socket: Socket,\n id: number,\n response:\n | {\n readonly ok: true;\n readonly value: unknown;\n }\n | {\n readonly error: SerializedDriverError;\n readonly ok: false;\n }\n): void => {\n socket.write(`${JSON.stringify({ id, ...response })}\\n`);\n};\n\nconst handleRequestLine = async (\n socket: Socket,\n line: string\n): Promise<void> => {\n const request = JSON.parse(line) as DriverRequest;\n try {\n const value =\n request.deadlineMs === undefined || request.deadlineMs === null\n ? await handleRequest(request)\n : await runWithWaitDeadline(request.deadlineMs, () =>\n handleRequest(request)\n );\n writeResponse(socket, request.id, { ok: true, value });\n if (request.command === 'launcher.release') {\n socket.end();\n }\n } catch (error) {\n writeResponse(socket, request.id, {\n error: serializeError(error),\n ok: false,\n });\n }\n};\n\nconst installSocketProtocol = (socket: Socket): void => {\n parentSocket = socket;\n let input = '';\n\n socket.on('data', (chunk: Buffer) => {\n input += chunk.toString('utf8');\n let newlineIndex = input.indexOf('\\n');\n while (newlineIndex >= 0) {\n const line = input.slice(0, newlineIndex);\n input = input.slice(newlineIndex + 1);\n void handleRequestLine(socket, line);\n newlineIndex = input.indexOf('\\n');\n }\n });\n\n socket.once('close', () => {\n parentSocket = undefined;\n void shutdown(0);\n });\n socket.once('error', () => {\n parentSocket = undefined;\n void shutdown(1);\n });\n};\n\nconst shutdown = async (exitCode: number): Promise<void> => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n await releaseAll();\n process.exitCode = exitCode;\n setImmediate(() => {\n process.exit(exitCode);\n });\n};\n\nconst run = async (): Promise<void> => {\n const parsed = parseArguments(process.argv.slice(2));\n const socket = await connectToParent(parsed.socketPath);\n installSocketProtocol(socket);\n writeInternalTestOutput();\n trayHostProcess = parsed.withTrayHost ? await startTrayHost() : undefined;\n writeReady(socket);\n\n process.once('SIGINT', () => {\n void shutdown(130);\n });\n process.once('SIGTERM', () => {\n void shutdown(143);\n });\n};\n\n/////////////////////////////////////////////////////////////////////////////////////////\n\nrun().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`gestament launcher driver: ${message}\\n`);\n process.exitCode = 2;\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: gestament
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.6.0
|
|
5
5
|
* description: TypeScript based test driver for GTK
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
const native = require("./native-
|
|
3
|
+
const native = require("./native-Xz0gjKti.cjs");
|
|
4
4
|
const run = () => {
|
|
5
5
|
const capture = native.nativeCaptureScreen();
|
|
6
6
|
const mappedWindowCount = native.nativeMappedX11WindowCount();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: gestament
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.6.0
|
|
5
5
|
* description: TypeScript based test driver for GTK
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as nativeCaptureScreen, b as nativeMappedX11WindowCount } from "./native-
|
|
2
|
+
import { a as nativeCaptureScreen, b as nativeMappedX11WindowCount } from "./native-C2tzSvVW.js";
|
|
3
3
|
const run = () => {
|
|
4
4
|
const capture = nativeCaptureScreen();
|
|
5
5
|
const mappedWindowCount = nativeMappedX11WindowCount();
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: gestament
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.6.0
|
|
5
5
|
* description: TypeScript based test driver for GTK
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
export {};
|
package/dist/gestament-xvfb.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: gestament
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.6.0
|
|
5
5
|
* description: TypeScript based test driver for GTK
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
export {};
|
package/dist/gestament.cjs
CHANGED
|
@@ -5,7 +5,7 @@ const node_fs = require("node:fs");
|
|
|
5
5
|
const promises = require("node:fs/promises");
|
|
6
6
|
const node_path = require("node:path");
|
|
7
7
|
const node_url = require("node:url");
|
|
8
|
-
const packageMetadata = require("./packageMetadata-
|
|
8
|
+
const packageMetadata = require("./packageMetadata-BqAHZ5WO.cjs");
|
|
9
9
|
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
10
10
|
const fallbackPackageName = "gestament-tests";
|
|
11
11
|
const packageNamePattern = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u;
|
package/dist/gestament.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/*!
|
|
3
3
|
* name: gestament
|
|
4
|
-
* version: 0.
|
|
4
|
+
* version: 0.6.0
|
|
5
5
|
* description: TypeScript based test driver for GTK
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/** Result returned by the gestament CLI runner. */
|
package/dist/gestament.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { realpathSync } from "node:fs";
|
|
|
3
3
|
import { mkdir, writeFile, stat } from "node:fs/promises";
|
|
4
4
|
import { resolve, basename, join, relative } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { v as version } from "./packageMetadata-
|
|
6
|
+
import { v as version } from "./packageMetadata-BQE2KNaa.js";
|
|
7
7
|
const fallbackPackageName = "gestament-tests";
|
|
8
8
|
const packageNamePattern = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u;
|
|
9
9
|
const usageText = [
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const launchGtkApp = require("./launchGtkApp-
|
|
3
|
+
const launchGtkApp = require("./launchGtkApp-OggUtTTC.cjs");
|
|
4
4
|
exports.createGtkAppEnvironment = launchGtkApp.createGtkAppEnvironment;
|
|
5
5
|
exports.createGtkAppLauncher = launchGtkApp.createGtkAppLauncher;
|
|
6
6
|
exports.launchGtkApp = launchGtkApp.launchGtkApp;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* name: gestament
|
|
3
|
-
* version: 0.
|
|
3
|
+
* version: 0.6.0
|
|
4
4
|
* description: TypeScript based test driver for GTK
|
|
5
5
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
6
6
|
* license: MIT
|
|
7
7
|
* repository.url: https://github.com/kekyo/gestament.git
|
|
8
|
-
* git.commit.hash:
|
|
8
|
+
* git.commit.hash: 8cae2c4b222506eb3da626ae0810a8d2cb17f49c
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
export * from './types.js';
|
package/dist/index.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { tmpdir } from "node:os";
|
|
|
7
7
|
import { join, resolve, dirname } from "node:path";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
import { a as appendPrerequisiteInstallHint } from "./prerequisites-JB0SKPVd.js";
|
|
10
|
-
import { c as nativeElementInfo, d as nativeClick, e as nativeImageInfo, f as nativeCaptureBounds, g as nativeTableDeselectColumn, h as nativeTableSelectColumn, i as nativeTableDeselectRow, j as nativeTableSelectRow, k as nativeTableIsCellSelected, l as nativeTableIsColumnSelected, m as nativeTableIsRowSelected, o as nativeTableSelectedColumns, p as nativeTableSelectedRows, q as nativeTableColumnCount, r as nativeTableRowCount, s as nativeClearSelection, t as nativeSelectAllChildren, u as nativeDeselectChildAt, v as nativeSelectChildAt, w as nativeIsChildSelected, x as nativeSelectedChildAt, y as nativeSelectedChildCount, z as nativeChildCount, A as nativeChildAt, B as nativeValueInfo, C as nativeSetValue, D as nativeText, E as nativeSetText, F as nativeX11Info, G as nativeResizeHints, H as
|
|
10
|
+
import { c as nativeElementInfo, d as nativeClick, e as nativeImageInfo, f as nativeCaptureBounds, g as nativeTableDeselectColumn, h as nativeTableSelectColumn, i as nativeTableDeselectRow, j as nativeTableSelectRow, k as nativeTableIsCellSelected, l as nativeTableIsColumnSelected, m as nativeTableIsRowSelected, o as nativeTableSelectedColumns, p as nativeTableSelectedRows, q as nativeTableColumnCount, r as nativeTableRowCount, s as nativeClearSelection, t as nativeSelectAllChildren, u as nativeDeselectChildAt, v as nativeSelectChildAt, w as nativeIsChildSelected, x as nativeSelectedChildAt, y as nativeSelectedChildCount, z as nativeChildCount, A as nativeChildAt, B as nativeValueInfo, C as nativeSetValue, D as nativeText, E as nativeSetText, F as nativeX11Info, G as nativeResizeHints, H as nativeSetWindowBounds, I as nativeResizeWindow, J as nativeMoveWindow, K as nativeBounds, L as nativeCapture, M as nativeTableCellAt, N as nativeFindAnyById, O as nativeTrayItems, P as nativeWindowCount, Q as nativeWindowAt, a as nativeCaptureScreen, R as nativeFindById, S as nativeProcessAtspiReadiness } from "./native-C2tzSvVW.js";
|
|
11
11
|
const normalizeOutputBufferBytes = (value, optionName = "outputBufferBytes") => {
|
|
12
12
|
if (value === void 0) {
|
|
13
13
|
return void 0;
|
|
@@ -1780,9 +1780,23 @@ const createProxyGtkElement = (session, ref) => {
|
|
|
1780
1780
|
switch (ref.kind) {
|
|
1781
1781
|
case "window":
|
|
1782
1782
|
target.bounds = () => session.request("element.bounds", { elementId });
|
|
1783
|
+
target.moveTo = (x, y) => session.request("window.moveTo", {
|
|
1784
|
+
elementId,
|
|
1785
|
+
x,
|
|
1786
|
+
y
|
|
1787
|
+
});
|
|
1783
1788
|
target.resizeHints = () => session.request("window.resizeHints", {
|
|
1784
1789
|
elementId
|
|
1785
1790
|
});
|
|
1791
|
+
target.resizeTo = (width, height) => session.request("window.resizeTo", {
|
|
1792
|
+
elementId,
|
|
1793
|
+
height,
|
|
1794
|
+
width
|
|
1795
|
+
});
|
|
1796
|
+
target.setBounds = (bounds) => session.request("window.setBounds", {
|
|
1797
|
+
bounds,
|
|
1798
|
+
elementId
|
|
1799
|
+
});
|
|
1786
1800
|
target.x11Info = () => session.request("window.x11Info", { elementId });
|
|
1787
1801
|
addChildContainerProxyOperations(session, elementId, target);
|
|
1788
1802
|
break;
|
|
@@ -2005,6 +2019,19 @@ const assertFiniteNumber = (name, value) => {
|
|
|
2005
2019
|
throw createGtkInvalidArgumentError(`${name} must be a finite number.`);
|
|
2006
2020
|
}
|
|
2007
2021
|
};
|
|
2022
|
+
const int32Min = -2147483648;
|
|
2023
|
+
const int32Max = 2147483647;
|
|
2024
|
+
const assertInt32 = (name, value) => {
|
|
2025
|
+
if (!Number.isInteger(value) || value < int32Min || value > int32Max) {
|
|
2026
|
+
throw createGtkInvalidArgumentError(`${name} must be a 32-bit integer.`);
|
|
2027
|
+
}
|
|
2028
|
+
};
|
|
2029
|
+
const assertPositiveInt32 = (name, value) => {
|
|
2030
|
+
assertInt32(name, value);
|
|
2031
|
+
if (value <= 0) {
|
|
2032
|
+
throw createGtkInvalidArgumentError(`${name} must be greater than zero.`);
|
|
2033
|
+
}
|
|
2034
|
+
};
|
|
2008
2035
|
const normalizeRoleName = (roleName) => roleName.trim().toLowerCase().replace(/[_-]+/g, " ").replace(/\s+/g, " ");
|
|
2009
2036
|
const hasInterface = (info, name) => info.interfaces.some(
|
|
2010
2037
|
(interfaceName) => interfaceName.toLowerCase() === name.toLowerCase()
|
|
@@ -2397,6 +2424,26 @@ const createImageInfoOperation = (handle) => async () => {
|
|
|
2397
2424
|
};
|
|
2398
2425
|
};
|
|
2399
2426
|
const createBoundsOperation = (handle) => async () => nativeBounds(handle);
|
|
2427
|
+
const createMoveToOperation = (handle) => async (x, y) => {
|
|
2428
|
+
assertInt32("x", x);
|
|
2429
|
+
assertInt32("y", y);
|
|
2430
|
+
return nativeMoveWindow(handle, x, y);
|
|
2431
|
+
};
|
|
2432
|
+
const createResizeToOperation = (handle) => async (width, height) => {
|
|
2433
|
+
assertPositiveInt32("width", width);
|
|
2434
|
+
assertPositiveInt32("height", height);
|
|
2435
|
+
return nativeResizeWindow(handle, width, height);
|
|
2436
|
+
};
|
|
2437
|
+
const createSetBoundsOperation = (handle) => async (bounds) => {
|
|
2438
|
+
if (typeof bounds !== "object" || bounds === null) {
|
|
2439
|
+
throw createGtkInvalidArgumentError("bounds must be an object.");
|
|
2440
|
+
}
|
|
2441
|
+
assertInt32("bounds.x", bounds.x);
|
|
2442
|
+
assertInt32("bounds.y", bounds.y);
|
|
2443
|
+
assertPositiveInt32("bounds.width", bounds.width);
|
|
2444
|
+
assertPositiveInt32("bounds.height", bounds.height);
|
|
2445
|
+
return nativeSetWindowBounds(handle, bounds);
|
|
2446
|
+
};
|
|
2400
2447
|
const createResizeHintsOperation = (handle) => async () => nativeResizeHints(handle);
|
|
2401
2448
|
const createX11InfoOperation = (handle) => async () => nativeX11Info(handle);
|
|
2402
2449
|
const createValueOperation = (handle) => async () => nativeValueInfo(handle).value;
|
|
@@ -2571,7 +2618,10 @@ const createGtkElement = (handle) => {
|
|
|
2571
2618
|
...common,
|
|
2572
2619
|
kind: "window",
|
|
2573
2620
|
bounds: createBoundsOperation(handle),
|
|
2621
|
+
moveTo: createMoveToOperation(handle),
|
|
2574
2622
|
...createChildContainerOperations(handle, void 0),
|
|
2623
|
+
resizeTo: createResizeToOperation(handle),
|
|
2624
|
+
setBounds: createSetBoundsOperation(handle),
|
|
2575
2625
|
resizeHints: createResizeHintsOperation(handle),
|
|
2576
2626
|
x11Info: createX11InfoOperation(handle)
|
|
2577
2627
|
};
|
|
@@ -3181,4 +3231,4 @@ export {
|
|
|
3181
3231
|
createGtkAppEnvironment as c,
|
|
3182
3232
|
launchGtkApp as l
|
|
3183
3233
|
};
|
|
3184
|
-
//# sourceMappingURL=launchGtkApp-
|
|
3234
|
+
//# sourceMappingURL=launchGtkApp-B3FMzhrc.js.map
|