Skip to content

Commit 26ae94d

Browse files
committed
tests: test handling long window titles
QubesOS/qubes-issues#5986
1 parent 0be3631 commit 26ae94d

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

qubes/tests/integ/vm_qrexec_gui.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,66 @@ async def _test_300_bug_1028_gui_memory_pinning(self):
870870
f"Dom0 window doesn't match VM window content, saved to {file_basename}*"
871871
)
872872

873+
@unittest.skipUnless(
874+
spawn.find_executable("xdotool"), "xdotool not installed"
875+
)
876+
def test_400_long_window_title(self):
877+
self.loop.run_until_complete(self._test_400_long_window_title(False))
878+
879+
def test_401_long_window_title_utf8(self):
880+
self.loop.run_until_complete(self._test_400_long_window_title(True))
881+
882+
async def get_full_title(self, title):
883+
title_part = title[:32]
884+
await self.wait_for_window_coro(title_part)
885+
await asyncio.sleep(0.5)
886+
title = subprocess.check_output(
887+
[
888+
"xdotool",
889+
"search",
890+
"--name",
891+
title_part,
892+
"getwindowname",
893+
]
894+
)
895+
return title.decode().strip()
896+
897+
async def _test_400_long_window_title(self, utf8=False):
898+
if utf8:
899+
self.testvm1.features["gui-allow-utf8-titles"] = "1"
900+
else:
901+
# don't rely on global default
902+
self.testvm1.features["gui-allow-utf8-titles"] = ""
903+
await self.testvm1.start()
904+
await self.wait_for_session(self.testvm1)
905+
title = "B" * 120
906+
p = await self.testvm1.run(f"zenity --title={title} --info")
907+
try:
908+
dom0_title = await self.get_full_title(title)
909+
self.assertEqual(dom0_title, title)
910+
finally:
911+
try:
912+
p.terminate()
913+
await p.wait()
914+
except ProcessLookupError: # already dead
915+
pass
916+
917+
title = "A" * 128
918+
if utf8:
919+
truncated_title = title[:124] + "\u2026"
920+
else:
921+
truncated_title = title[:124] + "..."
922+
p = await self.testvm1.run(f"zenity --title={title} --info")
923+
try:
924+
dom0_title = await self.get_full_title(title)
925+
self.assertEqual(dom0_title, truncated_title)
926+
finally:
927+
try:
928+
p.terminate()
929+
await p.wait()
930+
except ProcessLookupError: # already dead
931+
pass
932+
873933

874934
class TC_10_Generic(qubes.tests.SystemTestCase):
875935
def setUp(self):

0 commit comments

Comments
 (0)