-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_beamer.py
210 lines (194 loc) · 7.48 KB
/
test_beamer.py
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Run these tests with py.test.
"""
import sys
from unittest.mock import patch
import beamer
@patch("beamer.run_cmd")
def test_main(run_cmd):
with patch.object(sys, "argv", ["beamer", "invalid_option"]):
assert beamer.main() > 0
run_cmd.assert_not_called()
with patch.object(sys, "argv", ["beamer", "left", "right"]):
assert beamer.main() > 0
run_cmd.assert_not_called()
run_cmd.return_value = xrandr_output_single
with patch.object(sys, "argv", ["beamer", "left"]):
assert beamer.main() > 0
run_cmd.assert_called_once()
run_cmd.reset_mock()
with patch.object(sys, "argv", ["beamer", "query"]):
assert beamer.main() is None
run_cmd.assert_called_once()
assert run_cmd.call_args.args in {("xrandr", "--query"), ("xrandr -q"), ("xrandr")}
run_cmd.reset_mock()
run_cmd.return_value = xrandr_output_with_beamer
with patch.object(sys, "argv", ["beamer", "left"]):
assert beamer.main() is None
run_cmd.assert_called_with("xrandr", "--output", "eDP1", "--auto",
"--output", "HDMI2", "--auto",
"--left-of", "eDP1")
@patch("beamer.run_cmd")
def test_clone(run_cmd):
run_cmd.return_value = xrandr_output_single
assert beamer.beamer_clone_args() == ("xrandr",
"--output", "eDP1", "--mode", "1920x1080")
assert run_cmd.call_args[0] == ("xrandr", "--query")
run_cmd.return_value = xrandr_output_with_beamer
assert beamer.beamer_clone_args() == ("xrandr",
"--output", "eDP1", "--mode", "1920x1080",
"--output", "HDMI2", "--mode", "1920x1080",
"--same-as", "eDP1")
run_cmd.return_value = xrandr_output_double_monitor
assert beamer.beamer_clone_args() == ("xrandr",
"--output", "DVI-D-0", "--mode", "1920x1080",
"--output", "HDMI-0", "--mode", "1920x1080",
"--same-as", "DVI-D-0")
@patch("beamer.run_cmd")
def test_sides(run_cmd):
run_cmd.return_value = xrandr_output_single
assert beamer.beamer_side_args("left") is None
run_cmd.return_value = xrandr_output_with_beamer
assert beamer.beamer_side_args("left") == ("xrandr",
"--output", "eDP1", "--auto", "--output", "HDMI2", "--auto",
"--left-of", "eDP1")
assert beamer.beamer_side_args("right") == ("xrandr",
"--output", "eDP1", "--auto", "--output", "HDMI2", "--auto",
"--right-of", "eDP1")
assert beamer.beamer_side_args("above") == ("xrandr",
"--output", "eDP1", "--auto", "--output", "HDMI2", "--auto",
"--above", "eDP1")
assert beamer.beamer_side_args("below") == ("xrandr",
"--output", "eDP1", "--auto", "--output", "HDMI2", "--auto",
"--below", "eDP1")
run_cmd.return_value = xrandr_output_double_monitor
assert beamer.beamer_side_args("left") == ("xrandr",
"--output", "DVI-D-0", "--auto", "--output", "HDMI-0", "--auto",
"--left-of", "DVI-D-0")
assert beamer.beamer_side_args("right") == ("xrandr",
"--output", "DVI-D-0", "--auto", "--output", "HDMI-0", "--auto",
"--right-of", "DVI-D-0")
assert beamer.beamer_side_args("above") == ("xrandr",
"--output", "DVI-D-0", "--auto", "--output", "HDMI-0", "--auto",
"--above", "DVI-D-0")
assert beamer.beamer_side_args("below") == ("xrandr",
"--output", "DVI-D-0", "--auto", "--output", "HDMI-0", "--auto",
"--below", "DVI-D-0")
@patch("beamer.run_cmd")
def test_single_output(run_cmd):
run_cmd.return_value = xrandr_output_single
assert beamer.beamer_single_output_args(0) == ("xrandr",
"--output", "eDP1", "--auto")
run_cmd.return_value = xrandr_output_with_beamer
assert beamer.beamer_single_output_args(0) == ("xrandr",
"--output", "eDP1", "--auto", "--output", "HDMI2", "--off")
run_cmd.return_value = xrandr_output_double_monitor
assert beamer.beamer_single_output_args(0) == ("xrandr",
"--output", "DVI-D-0", "--auto", "--output", "HDMI-0", "--off")
# Sample outputs of xrandr on various configurations.
xrandr_output_single = """\
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 173mm
1920x1080 60.01*+ 59.93
1680x1050 59.95 59.88
1600x1024 60.17
1400x1050 59.98
1600x900 60.00
1280x1024 60.02
1440x900 59.89
1280x960 60.00
1368x768 60.00
1360x768 59.80 59.96
1152x864 60.00
1280x720 60.00
1024x768 60.00
1024x576 60.00
960x540 60.00
800x600 60.32 56.25
864x486 60.00
640x480 59.94
720x405 60.00
640x360 60.00
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
"""
xrandr_output_with_beamer = """\
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 173mm
1920x1080 60.01*+ 59.93
1680x1050 59.95 59.88
1600x1024 60.17
1400x1050 59.98
1600x900 60.00
1280x1024 60.02
1440x900 59.89
1280x960 60.00
1368x768 60.00
1360x768 59.80 59.96
1152x864 60.00
1280x720 60.00
1024x768 60.00
1024x576 60.00
960x540 60.00
800x600 60.32 56.25
864x486 60.00
640x480 59.94
720x405 60.00
640x360 60.00
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 connected (normal left inverted right x axis y axis)
1280x800 59.81 +
1920x1200 59.95
1920x1080 60.00 50.00 59.94 30.00 24.00 29.97 23.98
1920x1080i 60.00 50.00 59.94
1600x1200 60.00
1680x1050 59.88
1400x1050 59.95
1600x900 60.00
1280x1024 60.02
1440x900 59.90
1280x960 60.00
1366x768 59.79
1280x720 60.00 50.00 59.94
1024x768 60.00
800x600 60.32
720x576 50.00
720x576i 50.00
720x480 60.00 59.94
720x480i 60.00 59.94
640x480 60.00 59.94
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
"""
xrandr_output_double_monitor = """\
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 32767 x 32767
DVI-D-0 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 531mm x 298mm
1920x1080 60.00*+
1680x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 477mm x 268mm
1920x1080 60.00*+
1680x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1280x960 60.00
1280x720 60.00
1152x720 60.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
"""