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
|
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_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.assertIn("corporate-panel@dotfiles", desktop.EXTENSIONS)
self.assertIn("ubuntu-appindicators@ubuntu.com", desktop.EXTENSIONS)
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, "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()
|