mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-06-10 15:13:32 -07:00
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
createLinuxX11CursorPointReader,
|
|
parseXdotoolMouseLocation,
|
|
} from './linux-x11-cursor-point';
|
|
|
|
test('parseXdotoolMouseLocation parses root cursor coordinates', () => {
|
|
assert.deepEqual(
|
|
parseXdotoolMouseLocation(`X=1700
|
|
Y=1050
|
|
SCREEN=0
|
|
WINDOW=44040194
|
|
`),
|
|
{ x: 1700, y: 1050 },
|
|
);
|
|
});
|
|
|
|
test('createLinuxX11CursorPointReader returns cached X11 cursor point over stale fallback', async () => {
|
|
let now = 1000;
|
|
const pendingCommand: { resolve?: (value: string) => void } = {};
|
|
const calls: Array<{ command: string; args: string[] }> = [];
|
|
const reader = createLinuxX11CursorPointReader({
|
|
env: { DISPLAY: ':1' },
|
|
platform: 'linux',
|
|
now: () => now,
|
|
runCommand: (command, args) => {
|
|
calls.push({ command, args });
|
|
return new Promise((resolve) => {
|
|
pendingCommand.resolve = resolve;
|
|
});
|
|
},
|
|
});
|
|
|
|
assert.deepEqual(reader.getCursorScreenPoint({ x: 877, y: 718 }), { x: 877, y: 718 });
|
|
assert.deepEqual(calls, [{ command: 'xdotool', args: ['getmouselocation', '--shell'] }]);
|
|
|
|
assert.ok(pendingCommand.resolve);
|
|
pendingCommand.resolve(`X=1700
|
|
Y=1050
|
|
SCREEN=0
|
|
WINDOW=44040194
|
|
`);
|
|
await new Promise((resolve) => setImmediate(resolve));
|
|
|
|
now += 60;
|
|
assert.deepEqual(reader.getCursorScreenPoint({ x: 877, y: 718 }), { x: 1700, y: 1050 });
|
|
});
|
|
|
|
test('createLinuxX11CursorPointReader does not spawn off X11 Linux', () => {
|
|
const calls: string[] = [];
|
|
const reader = createLinuxX11CursorPointReader({
|
|
env: {},
|
|
platform: 'linux',
|
|
runCommand: async (command) => {
|
|
calls.push(command);
|
|
return '';
|
|
},
|
|
});
|
|
|
|
assert.deepEqual(reader.getCursorScreenPoint({ x: 5, y: 6 }), { x: 5, y: 6 });
|
|
assert.deepEqual(calls, []);
|
|
});
|
|
|
|
test('createLinuxX11CursorPointReader does not spawn for supported native Wayland compositors', () => {
|
|
const calls: string[] = [];
|
|
const reader = createLinuxX11CursorPointReader({
|
|
env: {
|
|
DISPLAY: ':1',
|
|
WAYLAND_DISPLAY: 'wayland-0',
|
|
HYPRLAND_INSTANCE_SIGNATURE: 'hypr',
|
|
},
|
|
platform: 'linux',
|
|
runCommand: async (command) => {
|
|
calls.push(command);
|
|
return '';
|
|
},
|
|
});
|
|
|
|
assert.deepEqual(reader.getCursorScreenPoint({ x: 7, y: 8 }), { x: 7, y: 8 });
|
|
assert.deepEqual(calls, []);
|
|
});
|