Commit Graph
80 Commits
Author SHA1 Message Date
LGUG2Z 1f1805f66e fix(e2e): drop the unsafe block nested inside the testwin unsafe block
e2e/guest/testwin/src/main.rs had an unsafe block inside an unsafe block, which clippy -D warnings rejects (unused_unsafe). Removes the inner one without changing behaviour. Verified: Windows clippy passes.
2026-10-31 01:37:53 -07:00
LGUG2Z ff3711dcb5 docs(e2e): document the Windows guest and what it found
README.md: building the image, running scenarios, the variables, the known
failures. W1.md: the measurements and findings behind them.
2026-10-30 18:59:32 -07:00
LGUG2Z 0aec364345 feat(e2e): no known failure of maximizing.user once kfw has the fix 2026-10-30 18:59:32 -07:00
LGUG2Z 7f6e530b35 feat(e2e): sync the neutral core from kfde 7d19fd40 2026-10-30 18:54:37 -07:00
LGUG2Z 503ccbc9c6 feat(e2e): add a probe of toggle-monocle under a user's maximize 2026-10-30 18:49:48 -07:00
LGUG2Z 8cf77519a2 fix(e2e): name toggle-monocle as what maximizing.user still fails 2026-10-30 18:45:15 -07:00
LGUG2Z a2ab755352 feat(e2e): sync the neutral core from kfde b3dc2ed9 2026-10-30 18:25:26 -07:00
LGUG2Z e5c1e2fa75 feat(e2e): run the cargo tests of the workspace in the Windows guest
The tests are cross-compiled for Windows, so they run there: cargo_tests.py
uploads each test executable, lists its tests and runs every one in a
process of its own, as nextest does. The nix check never ran them
(doCheck is false).
2026-10-30 18:22:45 -07:00
LGUG2Z 345ddf30ea feat(e2e): the known difference of maximizing.user after kfw tracks a user's maximize
On a komorebi with 3fa3d429 the step passes its tracking checks; what is
left is that toggle-float and stack left/right are not ignored while a
window is maximized. The marker says so for such a build.
2026-10-30 18:22:45 -07:00
LGUG2Z b1d053b358 perf(nix): build the test window with the constant stamp too
komorebi-testwin-e2e is the e2e build's test window, so a change to it
rebuilds the crate and not its dependencies (86 s instead of minutes);
build-ref.sh uses it.
2026-10-30 18:22:45 -07:00
LGUG2Z 0c21138e25 fix(e2e): make the test window gray, not blue
The pixel checks of the shared scenarios (the ring of a border by hue) take
the window's own color to be neutral. The default was (48, 80, 128), which
is cool by their measure, so a warm ring beside it read as mixed.
2026-10-30 18:22:45 -07:00
LGUG2Z 7e5f956415 feat(e2e): sync the neutral core from kfde 72631512 2026-10-30 18:22:45 -07:00
LGUG2Z f6d877b82d feat(e2e): sync the neutral core from kfde 1383d58a 2026-10-30 18:22:45 -07:00
LGUG2Z fe95747267 fix(e2e): a temp path may have folders in it and a space in a name
temp_path takes wallpapers/my pictures/cool.png, as the wallpaper scenario
asks for; a name that leaves the folder is still refused.
2026-10-30 18:22:45 -07:00
LGUG2Z a007996f6a feat(e2e): no known-failure marker for a build that tracks a user's maximize
maximizing.user is a known difference only on a komorebi without 3fa3d429
(track a window the user maximizes or restores); on a build that has it
the step runs as any other.
2026-10-30 18:22:45 -07:00
LGUG2Z 9818a1b885 feat(e2e): add a probe of the wallpaper of the Windows guest 2026-10-30 18:22:45 -07:00
LGUG2Z 937430b70e feat(e2e): the wallpaper members and put_file on the Windows guest
put_file writes bytes to a path in the guest (a folder that has a space in
its name is made), wallpaper and set_wallpaper read and set the wallpaper
of a display through IDesktopWallpaper, with the COM calls in C# compiled by
Add-Type (wallpaper.ps1).
2026-10-30 18:22:45 -07:00
LGUG2Z 720306deca feat(e2e): run the columns and two_monitors steps of scrolling 2026-10-30 18:22:45 -07:00
LGUG2Z ead3d91e37 fix(e2e): vendor the fake wallpaper that the focus and moving tests import 2026-10-30 18:22:45 -07:00
LGUG2Z 19e2cd6112 fix(e2e): vendor the fake strip that the focus and moving tests import
kfde's sync-e2e-core does not list tests/fake_strip.py, which
test_focus_moving.py now imports, so it is copied by hand until it does.
2026-10-30 18:22:45 -07:00
LGUG2Z 6a05754308 feat(e2e): sync the neutral core from kfde 6fb6a66e 2026-10-30 18:22:45 -07:00
LGUG2Z c51f79acb5 feat(e2e): add a probe of a resize drag from the top row of a frame 2026-10-30 18:22:45 -07:00
LGUG2Z fb549f5685 feat(e2e): say where a resize border is pressed on the Windows guest
The left, right and bottom borders of a window reach outside its visible
frame (the invisible DWM border), so the press is 4 px outside; the top has
none and its border is inside the window, so the press is in its first
rows. Outside the top the press hit the desktop and no drag started.
2026-10-30 18:22:45 -07:00
LGUG2Z 271abc3e9c feat(e2e): record two known differences of kfw as known failures
maximizing.user (a user's maximize is not the maximized window) and
hotplug.user_move (only a drag relocates a window to another monitor).
Their failing checks are known failures with the reason; a step that has
no failing check says the marker can go.
2026-10-30 18:22:45 -07:00
LGUG2Z d1d08d59d2 feat(e2e): sync the neutral core from kfde 6190a4ad 2026-10-30 18:22:44 -07:00
LGUG2Z 6c615cd4a8 fix(e2e): wait for the exit line of a killed daemon before starting another
crash() killed the daemon but not the command that launched it, which wrote
its exit code into the output file after the next launch had started, so
that launch looked as if it had ended and was started again.
2026-10-30 18:22:44 -07:00
LGUG2Z fecb9d9173 feat(e2e): sync the neutral core from kfde 3830bb27 2026-10-30 18:22:44 -07:00
LGUG2Z d4d293fbd8 fix(e2e): run a scenario again when QEMU aborted under it
QEMU has died with SIGABRT while a second display was plugged in (a
hotplug repeat and monitors.at_cursor), which is not a result about kfw.
Its stderr is kept, a dead guest is named as such, and the scenario is
run once more on a fresh guest.
2026-10-30 18:22:44 -07:00
LGUG2Z ea449c2d80 feat(e2e): let the test window rename itself and go fullscreen
--rename-to T --after S gives the window another title S seconds after it
opens, as a program that sets its title late does. The message WM_APP + 2
takes it fullscreen, borderless over its monitor, and back.
2026-10-30 18:22:44 -07:00
LGUG2Z e22d82853c feat(e2e): run kfde's new scenarios on the Windows guest
monitors, layout_flip, title_rule, handover, queries, display_change and
fullscreen, with the extra functions their files have after run
(hotplug.user_move, resize.edge_cases, maximizing.user,
lifecycle_hidden.crash, monocle.focus_behaviour, monitors.at_cursor).
2026-10-30 18:22:44 -07:00
LGUG2Z 320b12b34c feat(e2e): the new Platform members on the Windows guest
spawn takes rename_to and after (the test window renames itself),
temp_path, crash (kills the daemon), fullscreen and user_maximize (the
user's own, by messages the window understands), with tests: a window
that is not there raises, a program name Windows rejects is rejected.
2026-10-30 18:22:44 -07:00
LGUG2Z 81b12ba0b9 feat(e2e): sync the neutral core from kfde c71c8fd0 2026-10-30 18:22:44 -07:00
LGUG2Z 09ce64e3e4 test(e2e): test the runner of the Windows guest without a guest
The fix-commit check of the known-failure markers, the scope in the result
file, the step wrapper, the state key and the state that is not JSON.
2026-10-30 18:22:44 -07:00
LGUG2Z 5ef1666053 perf(e2e): key the saved state on the QEMU command line, not guest.py
Any edit to guest.py made a new state (76 to 145 s). The state now follows
the command line of the guest that is saved, with the paths as
placeholders, so an edit to the rest of guest.py does not.
2026-10-30 18:22:44 -07:00
LGUG2Z e440a73666 fix(e2e): a state that is not JSON is an error a wait goes past
komorebic state can print something else while the daemon is busy or in
the middle of a monitor change. The runner crashed on it (a hotplug run
did); now it is a RuntimeError with what was printed, which waits retry.
2026-10-30 18:22:44 -07:00
LGUG2Z 4cef0ce510 feat(e2e): sync the neutral core from kfde 6748528b 2026-10-30 18:22:44 -07:00
LGUG2Z da966bfc78 feat(e2e): drop a known-failure marker once the commit under test has the fix
The runner reads the commit from the binaries' commit file and asks git
whether it contains the fix of the bug a marker is for, so the same runner
tests a branch with the bug and one without it.
2026-10-30 18:22:44 -07:00
LGUG2Z a3468e870c feat(e2e): say which display of the Windows guest can change mode 2026-10-30 18:22:44 -07:00
LGUG2Z f0f369f606 feat(e2e): add probes of display modes and of changing one 2026-10-30 18:22:44 -07:00
LGUG2Z 9c5b71a8c3 feat(e2e): add the display_change extra for the Windows guest
With two windows on the second display, its mode is changed to two others
and back: the daemon's monitor follows, the windows stay inside the work
area and apart, and return to where they were. A draft for a shared
scenario.
2026-10-30 18:22:44 -07:00
LGUG2Z be9e6eb36f feat(e2e): change the mode of a display on the Windows guest
display.ps1 lists the display devices and changes the mode of one (the
logic is in C# because PowerShell cannot pass the structs by reference),
and WindowsPlatform.resize_display uses it. Only the QXL display lists
modes; the first one is the basic adapter, which has one.
2026-10-30 18:22:44 -07:00
LGUG2Z 8d5106f732 feat(e2e): sync the neutral core from kfde c03d61dd 2026-10-30 18:22:44 -07:00
LGUG2Z 116fadb823 feat(e2e): time the phases of a run
The result file and the log say how long the guest, the upload, the daemon
and the scenario took.
2026-10-30 18:22:44 -07:00
LGUG2Z 994d6565a6 refactor(e2e): run the scenarios of the Windows guest as suite steps
Every scenario goes through run_suite, so its checks are labelled
[shared] and the log says which scenario a check came from. Keyword
arguments go through a small wrapper because a step takes positional
ones.
2026-10-30 18:22:44 -07:00
LGUG2Z 7054d02110 feat(e2e): add what only Windows checks as extras
padding (the border's 7 px), cloaking (and what stop does to it), the
config file watch, the system's window tracking behind focus follows
mouse, and a second display with a window sent to it. Each is run after
the tiling windows as windows_<name>, its checks labelled [windows].
2026-10-30 18:22:44 -07:00
LGUG2Z 2f1df7decd fix(e2e): rewrite_config only writes the file
The daemon watches the configuration file it was started with, so the
extra replace-configuration after each write hid the reload that the
scenario is meant to check.
2026-10-30 18:22:44 -07:00
LGUG2Z 30b73be36e feat(e2e): sync the neutral core from kfde 22a81d0b 2026-10-30 18:22:44 -07:00
LGUG2Z ca4744e77e feat(e2e): sync the neutral core from kfde ff599907 2026-10-30 18:22:44 -07:00
LGUG2Z d990729e14 feat(e2e): record the scope of each check in the result file
A check made inside Checks.scoped("windows") has a scope field in
result.json, next to what it already had.
2026-10-30 18:22:44 -07:00
LGUG2Z 32af5164ef feat(e2e): sync the neutral core from kfde d4f67164 2026-10-30 18:22:44 -07:00