mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-06-10 15:13:32 -07:00
fix(overlay): Linux X11/XWayland stacking, stale pause state, multi-copy selector (#101)
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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, []);
|
||||
});
|
||||
Reference in New Issue
Block a user