test(gtk): live D-Bus/portal comparison against the original Ghostty
Adds scripts/live-dbus-test.sh (`just live-dbus`): each scenario runs the installed Ghostty 1.3.1 and the Rust build on a private dbus-run-session bus inside a private headless weston (the user's session bus is never written to), with Python/Gio mocks for org.freedesktop.Notifications, the GlobalShortcuts/Settings portal and org.freedesktop.systemd1, plus a real xdg-desktop-portal run. Scenarios: single-instance (+detect), +new-window with arguments, notifications, global shortcuts, color-scheme settings, cgroup scope creation, URL opening. tests/live_dbus.rs compares the Rust build against goldens recorded from the original (skips when tools or a fresh production build are missing). Two Rust bugs found and fixed (no upstream deviation): - GlobalShortcuts CreateSession/BindShortcuts payloads used the wrong D-Bus signatures ((v), double-boxed values), which a real portal rejects; signature tests added. - CreateSession was sent twice at startup; the config is now bound only after the D-Bus connection is set, as in Zig. All nine scenarios now behave identically to the original (docs/rewrite/notes/live-dbus.md). Test Plan: - just live-dbus - cargo test --test live_dbus (needs target/vp/production/ghostty)
This commit is contained in:
1 parent
e44b9271d6
commit
30863e1f0b
25 files changed
+1278
-31
No files matched your search
@@ -0,0 +1,15 @@
|
||||
== facts ==
|
||||
phase default:
|
||||
phase always:
|
||||
call: {"args": ["app-ghostty-surface-transient-PID.scope", "fail", [["ManagedOOMMemoryPressure", "kill"], ["PIDs", [PID]]], []], "iface": "org.freedesktop.systemd1.Manager", "method": "StartTransientUnit"}
|
||||
phase always-limits:
|
||||
call: {"args": ["app-ghostty-surface-transient-PID.scope", "fail", [["MemoryHigh", 123456789], ["TasksMax", 77], ["ManagedOOMMemoryPressure", "kill"], ["PIDs", [PID]]], []], "iface": "org.freedesktop.systemd1.Manager", "method": "StartTransientUnit"}
|
||||
phase never:
|
||||
phase always-failing:
|
||||
call: {"args": ["app-ghostty-surface-transient-PID.scope", "fail", [["ManagedOOMMemoryPressure", "kill"], ["PIDs", [PID]]], []], "iface": "org.freedesktop.systemd1.Manager", "method": "StartTransientUnit"}
|
||||
cgroup done
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.systemd1.Manager.StartTransientUnit ["app-ghostty-surface-transient-PID.scope", "fail", [["ManagedOOMMemoryPressure", "kill"], ["PIDs", [PID]]], []]
|
||||
@@ -0,0 +1,16 @@
|
||||
== facts ==
|
||||
notifications so far: 7
|
||||
alive after ActionInvoked: instances=1 windows=1
|
||||
alive after more ActionInvoked: instances=1 windows=1
|
||||
notifications after desktop-notifications=false: 7
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "Ghostty", "osc9 body", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "Title777", "Body777", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "Ghostty", "OnlyBody", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "Only title", "", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "Ghostty", "<b>markup</b> & \"quotes\" \u00e9\u20ac", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 1, "", "Ghostty", "osc9 body", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
org.freedesktop.Notifications.Notify ["", 0, "", "semi", "colon;body", ["default", ""], {"desktop-entry": "com.mitchellh.ghostty", "image-path": "com.mitchellh.ghostty", "urgency": 1}, -1]
|
||||
@@ -0,0 +1,7 @@
|
||||
== facts ==
|
||||
spawn: xdg-open argc=1 [$RUN/cfg/ghostty/config] cwd=$ROOT
|
||||
portal OpenURI/OpenFile calls: 0
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
@@ -0,0 +1,14 @@
|
||||
== facts ==
|
||||
portal frontend: (<uint32 2>,)
|
||||
tty: startup: 997 reports=1 last bg=rgb:1111/2222/3333
|
||||
tty: after gsettings color-scheme=prefer-light: 997 reports=1,2 last bg=rgb:ffff/eeee/dddd
|
||||
tty: after gsettings color-scheme=prefer-dark: 997 reports=2,1 last bg=rgb:1111/2222/3333
|
||||
tty: after gsettings color-scheme=default: 997 reports=1,2 last bg=rgb:ffff/eeee/dddd
|
||||
tty: after gsettings color-scheme=prefer-dark: 997 reports=2,1 last bg=rgb:1111/2222/3333
|
||||
global-shortcuts request error: GDBus.Error:org.freedesktop.portal.Error.NotAllowed
|
||||
global-shortcuts request error: GDBus.Error:org.freedesktop.portal.Error.NotAllowed
|
||||
global-shortcuts request error: GDBus.Error:org.freedesktop.portal.Error.NotAllowed
|
||||
global-shortcuts request error: GDBus.Error:org.freedesktop.portal.Error.NotAllowed
|
||||
global-shortcuts request error: GDBus.Error:org.freedesktop.portal.Error.NotAllowed
|
||||
alive: instances=1
|
||||
== mock received ==
|
||||
@@ -0,0 +1,12 @@
|
||||
== facts ==
|
||||
tty: startup: 997 reports=1 last bg=rgb:1111/2222/3333
|
||||
tty: after portal color-scheme=2: 997 reports=1,2 last bg=rgb:ffff/eeee/dddd
|
||||
tty: after portal color-scheme=1: 997 reports=2,1 last bg=rgb:1111/2222/3333
|
||||
tty: after portal color-scheme=0: 997 reports=1,2 last bg=rgb:ffff/eeee/dddd
|
||||
tty: after portal color-scheme=2: 997 reports=- last bg=rgb:ffff/eeee/dddd
|
||||
tty: after reload window-theme=dark: 997 reports=2 last bg=rgb:ffff/eeee/dddd
|
||||
tty: after portal color-scheme=2 with window-theme=dark: 997 reports=- last bg=rgb:ffff/eeee/dddd
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
@@ -0,0 +1,16 @@
|
||||
== facts ==
|
||||
step start: windows=1
|
||||
new_window shortcut id: CTRL+ALT+x
|
||||
step Activated(new_window): windows=2
|
||||
step Activated(unknown): windows=2
|
||||
step reload without global: windows=2
|
||||
step reload with global again: windows=2
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.GlobalShortcuts.CreateSession [{"handle_token": "ghostty_TOKEN", "session_handle_token": "ghostty_TOKEN"}]
|
||||
org.freedesktop.portal.GlobalShortcuts.BindShortcuts ["/org/freedesktop/portal/desktop/session/SENDER/ghostty_TOKEN", [["CTRL+ALT+x", {"description": "new_window", "preferred_trigger": "CTRL+ALT+x"}], ["SHIFT+LOGO+b", {"description": "new_tab", "preferred_trigger": "SHIFT+LOGO+b"}], ["SHIFT+CTRL+F12", {"description": "reload_config", "preferred_trigger": "SHIFT+CTRL+F12"}], ["CTRL+ALT+q", {"description": "text:hi", "preferred_trigger": "CTRL+ALT+q"}]], "", {"handle_token": "ghostty_TOKEN"}]
|
||||
org.freedesktop.portal.Session.Close {"path": "/org/freedesktop/portal/desktop/session/SENDER/ghostty_TOKEN"}
|
||||
org.freedesktop.portal.GlobalShortcuts.CreateSession [{"handle_token": "ghostty_TOKEN", "session_handle_token": "ghostty_TOKEN"}]
|
||||
org.freedesktop.portal.GlobalShortcuts.BindShortcuts ["/org/freedesktop/portal/desktop/session/SENDER/ghostty_TOKEN", [["CTRL+ALT+x", {"description": "new_window", "preferred_trigger": "CTRL+ALT+x"}]], "", {"handle_token": "ghostty_TOKEN"}]
|
||||
@@ -0,0 +1,24 @@
|
||||
== facts ==
|
||||
plain launch owns name: 0
|
||||
step plain: windows=1 instances=1
|
||||
second plain launch rc=0
|
||||
step second plain: windows=2 instances=1
|
||||
step TERM_PROGRAM: windows=2 instances=2
|
||||
step TERM_PROGRAM ended: windows=2 instances=1
|
||||
step CLI arg: windows=2 instances=2
|
||||
step CLI arg ended: windows=2 instances=1
|
||||
ipc newwin rc=0
|
||||
step +new-window: windows=3 instances=1
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
@@ -0,0 +1,49 @@
|
||||
== facts ==
|
||||
first instance owns name: 0
|
||||
step first: windows=1 instances=1
|
||||
ipc newwin rc=0
|
||||
step +new-window: windows=2 instances=1
|
||||
ipc newwin-e rc=0
|
||||
step +new-window -e: windows=3 instances=1
|
||||
ipc newwin-wd rc=0
|
||||
step +new-window --working-directory: windows=4 instances=1
|
||||
ipc newwin-e-wd rc=0
|
||||
step +new-window -e..--working-directory: windows=5 instances=1
|
||||
ipc newwin-class rc=1
|
||||
ipc-err: D-Bus method call returned an error err=GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name com.example.nobody was not provided by any .service files
|
||||
step +new-window --class=nobody: windows=5 instances=1
|
||||
second launch rc=0
|
||||
step second launch: windows=6 instances=1
|
||||
child: /usr/bin/bash cwd=$HOME
|
||||
child: /usr/bin/bash cwd=$HOME
|
||||
child: /usr/bin/bash cwd=$ROOT
|
||||
child: /usr/bin/bash cwd=/usr
|
||||
child: sleep 601 cwd=$ROOT
|
||||
step -e launch: windows=6 instances=2
|
||||
step -e launch ended: windows=6 instances=1
|
||||
custom class owns name: 0
|
||||
step custom: windows=1 instances=2
|
||||
ipc newwin-custom rc=0
|
||||
step +new-window --class=custom: custom windows=2 default windows=6
|
||||
ipc newwin-custom-e rc=0
|
||||
step +new-window --class=custom -e: custom windows=3 default windows=6
|
||||
ipc newwin-badclass rc=1
|
||||
ipc-err: D-Bus bus name is not valid: 1bad
|
||||
badclass done
|
||||
bus name: com.example.custom-app
|
||||
bus name: com.mitchellh.ghostty
|
||||
actions: ([open-config, present-surface, quit, new-window-command, new-window, reload-config],)
|
||||
custom actions: ([open-config, present-surface, quit, new-window-command, new-window, reload-config],)
|
||||
== mock received ==
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "color-scheme"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "contrast"]
|
||||
org.freedesktop.portal.Settings.Read ["org.freedesktop.appearance", "accent-color"]
|
||||
Reference in new issue
Block a user