mirror of
https://github.com/aaddrick/claude-desktop-debian.git
synced 2026-05-17 00:26:21 +03:00
Build out a Playwright-based regression-detection harness covering the compat-matrix surfaces (KDE-W, KDE-X, GNOME, Sway, i3, Niri, packaging formats). Adds: - Planning + decision docs under docs/testing/ — README, matrix, runbook, automation, cases/ (11 case files), quick-entry-closeout - Playwright scaffolding (config, tsconfig) - 78 spec runners under tools/test-harness/src/runners/ — T## case- doc runners and S## distribution/smoke runners - Substrate primitives in tools/test-harness/src/lib/: AX-tree loader (snapshotAx + waitForAxNode + axTreeToSnapshot), focus- shifter, eipc-registry, niri-native bridge, drag-drop bridge, electron-mocks, claudeai page-objects, inspector client S03 (DEB Depends declared) and S04 (RPM Requires declared) ship marked test.fail() — they're regression detectors for the case-doc gap (deb.sh emits no Depends:, rpm.sh sets AutoReqProv: no), and the expected-failure shape lets them report green on every host until upstream packaging starts declaring runtime deps. 127 files, no runtime changes; harness is opt-in via 'cd tools/test-harness && npx playwright test'. Co-authored-by: Claude <claude@anthropic.com>
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { sessionBus, type MessageBus, type ClientInterface } from 'dbus-next';
|
|
|
|
let cached: MessageBus | null = null;
|
|
|
|
export function getSessionBus(): MessageBus {
|
|
if (!cached) {
|
|
cached = sessionBus();
|
|
}
|
|
return cached;
|
|
}
|
|
|
|
export async function disconnectBus(): Promise<void> {
|
|
if (cached) {
|
|
cached.disconnect();
|
|
cached = null;
|
|
}
|
|
}
|
|
|
|
// dbus-next exposes interface methods as dynamic properties typed loosely. Cast
|
|
// at the call site rather than re-typing every D-Bus interface we touch.
|
|
type DynamicMethod = (...args: unknown[]) => Promise<unknown>;
|
|
|
|
export function method(iface: ClientInterface, name: string): DynamicMethod {
|
|
const fn = (iface as unknown as Record<string, DynamicMethod | undefined>)[name];
|
|
if (typeof fn !== 'function') {
|
|
throw new Error(`D-Bus method ${name} not found on interface`);
|
|
}
|
|
return fn.bind(iface);
|
|
}
|
|
|
|
export async function getConnectionPid(connectionName: string): Promise<number> {
|
|
const bus = getSessionBus();
|
|
const proxy = await bus.getProxyObject(
|
|
'org.freedesktop.DBus',
|
|
'/org/freedesktop/DBus',
|
|
);
|
|
const iface = proxy.getInterface('org.freedesktop.DBus');
|
|
const result = await method(iface, 'GetConnectionUnixProcessID')(connectionName);
|
|
return result as number;
|
|
}
|