Skip to content

Commit c09e928

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

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

qubes/tests/integ/vm_qrexec_gui.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,65 @@ 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_part):
883+
await self.wait_for_window_coro(title_part[:32])
884+
await asyncio.sleep(0.5)
885+
title = subprocess.check_output(
886+
[
887+
"xdotool",
888+
"search",
889+
"--name",
890+
title_part,
891+
"getwindowname",
892+
]
893+
)
894+
return title.decode().strip()
895+
896+
async def _test_400_long_window_title(self, utf8=False):
897+
if utf8:
898+
self.testvm1.features["gui-allow-utf8-titles"] = "1"
899+
else:
900+
# don't rely on global default
901+
self.testvm1.features["gui-allow-utf8-titles"] = ""
902+
await self.testvm1.start()
903+
await self.wait_for_session(self.testvm1)
904+
title = "B" * 120
905+
p = await self.testvm1.run(f"zenity --title={title} --info")
906+
try:
907+
dom0_title = await self.get_full_title(title)
908+
self.assertEqual(dom0_title, title)
909+
finally:
910+
try:
911+
p.terminate()
912+
await p.wait()
913+
except ProcessLookupError: # already dead
914+
pass
915+
916+
title = "A" * 128
917+
if utf8:
918+
truncated_title = title[:126] + "\u2026"
919+
else:
920+
truncated_title = title[:124] + "..."
921+
p = await self.testvm1.run(f"zenity --title={title} --info")
922+
try:
923+
dom0_title = await self.get_full_title(title)
924+
self.assertEqual(dom0_title, truncated_title)
925+
finally:
926+
try:
927+
p.terminate()
928+
await p.wait()
929+
except ProcessLookupError: # already dead
930+
pass
931+
873932

874933
class TC_10_Generic(qubes.tests.SystemTestCase):
875934
def setUp(self):

0 commit comments

Comments
 (0)