1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
import importlib.util
import tempfile
import unittest
from pathlib import Path
from unittest.mock import MagicMock, patch
ROOT = Path(__file__).resolve().parents[1]
SPEC = importlib.util.spec_from_file_location(
"desktop", ROOT / "dot_local/lib/dotfiles/canonical_desktop.py"
)
assert SPEC and SPEC.loader
desktop = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(desktop)
class DesktopTests(unittest.TestCase):
def test_extensions_replace_tiler_and_hide_dock_and_status(self):
settings = MagicMock()
settings.get_strv.side_effect = [
["company", "paperwm@paperwm.github.com", "corporate-panel@dotfiles"],
["unrelated", "o-tiling@oliwebd.github.com"],
]
with (
patch.object(desktop, "settings_object", return_value=settings),
patch.object(desktop, "write_key") as write,
):
desktop.extensions({})
write.assert_any_call(
"org.gnome.shell",
"enabled-extensions",
["company", *desktop.EXTENSIONS],
{},
)
write.assert_any_call(
"org.gnome.shell",
"disabled-extensions",
["unrelated", *desktop.DISABLED_EXTENSIONS],
{},
)
def test_tiling_shortcuts_do_not_claim_application_keys(self):
with patch.object(desktop, "write_key") as write:
desktop.tiling({})
schema = "org.gnome.shell.extensions.o-tiling"
for key in [
"tile-enter",
"toggle-tiling",
"tile-orientation",
"pop-workspace-up",
"pop-workspace-down",
]:
write.assert_any_call(schema, key, [], {})
write.assert_any_call(schema, "new-window-placement", "focused", {})
write.assert_any_call(schema, "focus-right", ["<Super>Right"], {})
write.assert_any_call(schema, "tile-move-down-global", ["<Super><Shift>j"], {})
def test_clipboard_shortcut_preserves_other_display_bindings(self):
settings = MagicMock()
settings.get_strv.return_value = ["<Super>p", "XF86Display", "<Super>x"]
with (
patch.object(desktop, "settings_object", return_value=settings),
patch.object(desktop, "write_key") as write,
):
desktop.shortcuts({})
write.assert_any_call(
"org.gnome.mutter.keybindings",
"switch-monitor",
["XF86Display", "<Super>x"],
{},
)
def test_panel_settings_disable_external_ip_lookup(self):
with patch.object(desktop, "write_key") as write:
desktop.panel({})
write.assert_any_call(
"org.gnome.shell.extensions.vitals", "include-public-ip", False, {}
)
self.assertNotIn("corporate-panel@dotfiles", desktop.EXTENSIONS)
self.assertIn("ubuntu-appindicators@ubuntu.com", desktop.EXTENSIONS)
write.assert_any_call(
"org.gnome.shell.extensions.emoji-copy", "always-show", False, {}
)
def test_unknown_keys_fail_without_writing(self):
settings = MagicMock()
settings.props.settings_schema.list_keys.return_value = []
with (
patch.object(desktop, "settings_object", return_value=settings),
self.assertRaisesRegex(RuntimeError, "Unknown setting"),
):
desktop.write_key("schema", "missing", "value", {})
settings.set_value.assert_not_called()
def test_launcher_uses_gnome_application_view_key(self):
with (
patch.object(desktop, "extensions"),
patch.object(desktop, "merge_key"),
patch.object(desktop, "shortcuts"),
patch.object(desktop, "workspaces"),
patch.object(desktop, "write_key") as write,
):
desktop.apply_settings({})
write.assert_any_call(
"org.gnome.shell.keybindings", "toggle-application-view", ["<Super>d"], {}
)
def test_locked_keys_are_never_written(self):
settings = MagicMock()
settings.props.settings_schema.list_keys.return_value = ["key"]
settings.is_writable.return_value = False
with patch.object(desktop, "settings_object", return_value=settings):
desktop.write_key("schema", "key", "value", {})
settings.set_value.assert_not_called()
def test_first_snapshot_is_kept_on_repeated_apply(self):
settings = MagicMock()
settings.props.settings_schema.list_keys.return_value = ["key"]
settings.get_user_value.return_value.print_.return_value = "'original'"
glib = MagicMock()
glib.Variant.return_value.print_.return_value = "'managed'"
saved = {}
with (
tempfile.TemporaryDirectory() as directory,
patch.object(desktop, "STATE", Path(directory) / "state.json"),
patch.object(desktop, "settings_object", return_value=settings),
patch.object(desktop.importlib, "import_module", return_value=glib),
):
desktop.write_key("schema", "key", "managed", saved)
settings.get_user_value.return_value.print_.return_value = "'changed'"
desktop.write_key("schema", "key", "managed", saved)
self.assertEqual(next(iter(saved.values()))["before"], "'original'")
def test_merge_keeps_unrelated_entries(self):
settings = MagicMock()
settings.get_strv.return_value = ["company", "personal"]
with (
patch.object(desktop, "settings_object", return_value=settings),
patch.object(desktop, "write_key") as write,
):
desktop.merge_key("schema", "key", ["personal", "new"], {})
write.assert_called_once_with(
"schema", "key", ["company", "personal", "new"], {}
)
if __name__ == "__main__":
unittest.main()
|