]> git.sur5r.net Git - i3/i3/blob - testcases/t/177-bar-config.t
Merge branch 'master' into next
[i3/i3] / testcases / t / 177-bar-config.t
1 #!perl
2 # vim:ts=4:sw=4:expandtab
3 #
4 # Please read the following documents before working on tests:
5 # • http://build.i3wm.org/docs/testsuite.html
6 #   (or docs/testsuite)
7 #
8 # • http://build.i3wm.org/docs/lib-i3test.html
9 #   (alternatively: perldoc ./testcases/lib/i3test.pm)
10 #
11 # • http://build.i3wm.org/docs/ipc.html
12 #   (or docs/ipc)
13 #
14 # • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
15 #   (unless you are already familiar with Perl)
16 #
17 # Checks that the bar config is parsed correctly.
18 #
19
20 use i3test i3_autostart => 0;
21
22 #####################################################################
23 # test a config without any bars
24 #####################################################################
25
26 my $config = <<EOT;
27 # i3 config file (v4)
28 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
29 EOT
30
31 my $pid = launch_with_config($config);
32
33 my $i3 = i3(get_socket_path(0));
34 my $bars = $i3->get_bar_config()->recv;
35 is(@$bars, 0, 'no bars configured');
36
37 exit_gracefully($pid);
38
39 #####################################################################
40 # now provide a simple bar configuration
41 #####################################################################
42
43 $config = <<EOT;
44 # i3 config file (v4)
45 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
46
47 bar {
48     # Start a default instance of i3bar which provides workspace buttons.
49     # Additionally, i3status will provide a statusline.
50     status_command i3status --foo
51 }
52 EOT
53
54 $pid = launch_with_config($config);
55
56 $i3 = i3(get_socket_path(0));
57 $bars = $i3->get_bar_config()->recv;
58 is(@$bars, 1, 'one bar configured');
59
60 my $bar_id = shift @$bars;
61
62 my $bar_config = $i3->get_bar_config($bar_id)->recv;
63 is($bar_config->{status_command}, 'i3status --foo', 'status_command correct');
64 ok(!$bar_config->{verbose}, 'verbose off by default');
65 ok($bar_config->{workspace_buttons}, 'workspace buttons enabled per default');
66 ok($bar_config->{binding_mode_indicator}, 'mode indicator enabled per default');
67 is($bar_config->{mode}, 'dock', 'dock mode by default');
68 is($bar_config->{position}, 'bottom', 'position bottom by default');
69
70 #####################################################################
71 # ensure that reloading cleans up the old bar configs
72 #####################################################################
73
74 cmd 'reload';
75 $bars = $i3->get_bar_config()->recv;
76 is(@$bars, 1, 'still one bar configured');
77
78 exit_gracefully($pid);
79
80 #####################################################################
81 # validate a more complex configuration
82 #####################################################################
83
84 $config = <<EOT;
85 # i3 config file (v4)
86 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
87
88 bar {
89     # Start a default instance of i3bar which does not provide
90     # workspace buttons.
91     # Additionally, i3status will provide a statusline.
92     status_command i3status --bar
93
94     output HDMI1
95     output HDMI2
96
97     tray_output LVDS1
98     tray_output HDMI2
99     position top
100     mode dock
101     font Terminus
102     workspace_buttons no
103     binding_mode_indicator no
104     verbose yes
105     socket_path /tmp/foobar
106
107     colors {
108         background #ff0000
109         statusline   #00ff00
110
111         focused_workspace   #4c7899 #285577 #ffffff
112         active_workspace    #333333 #222222 #888888
113         inactive_workspace  #333333 #222222 #888888
114         urgent_workspace    #2f343a #900000 #ffffff
115     }
116 }
117 EOT
118
119 $pid = launch_with_config($config);
120
121 $i3 = i3(get_socket_path(0));
122 $bars = $i3->get_bar_config()->recv;
123 is(@$bars, 1, 'one bar configured');
124
125 $bar_id = shift @$bars;
126
127 $bar_config = $i3->get_bar_config($bar_id)->recv;
128 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
129 ok($bar_config->{verbose}, 'verbose on');
130 ok(!$bar_config->{workspace_buttons}, 'workspace buttons disabled');
131 ok(!$bar_config->{binding_mode_indicator}, 'mode indicator disabled');
132 is($bar_config->{mode}, 'dock', 'dock mode');
133 is($bar_config->{position}, 'top', 'position top');
134 is_deeply($bar_config->{outputs}, [ 'HDMI1', 'HDMI2' ], 'outputs ok');
135 is($bar_config->{tray_output}, 'HDMI2', 'tray_output ok');
136 is($bar_config->{font}, 'Terminus', 'font ok');
137 is($bar_config->{socket_path}, '/tmp/foobar', 'socket_path ok');
138 is_deeply($bar_config->{colors},
139     {
140         background => '#ff0000',
141         statusline => '#00ff00',
142         focused_workspace_border => '#4c7899',
143         focused_workspace_text => '#ffffff',
144         focused_workspace_bg => '#285577',
145         active_workspace_border => '#333333',
146         active_workspace_text => '#888888',
147         active_workspace_bg => '#222222',
148         inactive_workspace_border => '#333333',
149         inactive_workspace_text => '#888888',
150         inactive_workspace_bg => '#222222',
151         urgent_workspace_border => '#2f343a',
152         urgent_workspace_text => '#ffffff',
153         urgent_workspace_bg => '#900000',
154     }, 'colors ok');
155
156 exit_gracefully($pid);
157
158 #####################################################################
159 # ensure that multiple bars get different IDs
160 #####################################################################
161
162 $config = <<EOT;
163 # i3 config file (v4)
164 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
165
166 bar {
167     # Start a default instance of i3bar which provides workspace buttons.
168     # Additionally, i3status will provide a statusline.
169     status_command i3status --bar
170
171     output HDMI1
172 }
173
174 bar {
175     output VGA1
176 }
177 EOT
178
179 $pid = launch_with_config($config);
180
181 $i3 = i3(get_socket_path(0));
182 $bars = $i3->get_bar_config()->recv;
183 is(@$bars, 2, 'two bars configured');
184 isnt($bars->[0], $bars->[1], 'bar IDs are different');
185
186 my $bar1_config = $i3->get_bar_config($bars->[0])->recv;
187 my $bar2_config = $i3->get_bar_config($bars->[1])->recv;
188
189 isnt($bar1_config->{outputs}, $bar2_config->{outputs}, 'outputs different');
190
191 exit_gracefully($pid);
192
193 #####################################################################
194 # make sure comments work properly
195 #####################################################################
196
197 $config = <<EOT;
198 # i3 config file (v4)
199 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
200
201 bar {
202     # Start a default instance of i3bar which provides workspace buttons.
203     # Additionally, i3status will provide a statusline.
204     status_command i3status --bar
205     #status_command i3status --qux
206 #status_command i3status --qux
207
208     output HDMI1
209     colors {
210         background #000000
211         #background #ffffff
212     }
213 }
214 EOT
215
216 $pid = launch_with_config($config);
217
218 $i3 = i3(get_socket_path(0));
219 $bars = $i3->get_bar_config()->recv;
220 $bar_id = shift @$bars;
221
222 $bar_config = $i3->get_bar_config($bar_id)->recv;
223 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
224 is($bar_config->{colors}->{background}, '#000000', 'background color ok');
225
226 exit_gracefully($pid);
227
228 #####################################################################
229 # verify that the old syntax still works
230 #####################################################################
231
232 $config = <<EOT;
233 # i3 config file (v4)
234 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
235
236 bar {
237     # Start a default instance of i3bar which does not provide
238     # workspace buttons.
239     # Additionally, i3status will provide a statusline.
240     status_command i3status --bar
241
242     output HDMI1
243     output HDMI2
244
245     tray_output LVDS1
246     tray_output HDMI2
247     position top
248     mode dock
249     font Terminus
250     workspace_buttons no
251     binding_mode_indicator yes
252     verbose yes
253     socket_path /tmp/foobar
254
255     colors {
256         background #ff0000
257         statusline   #00ff00
258
259         focused_workspace   #ffffff #285577
260         active_workspace    #888888 #222222
261         inactive_workspace  #888888 #222222
262         urgent_workspace    #ffffff #900000
263     }
264 }
265 EOT
266
267 $pid = launch_with_config($config);
268
269 $i3 = i3(get_socket_path(0));
270 $bars = $i3->get_bar_config()->recv;
271 is(@$bars, 1, 'one bar configured');
272
273 $bar_id = shift @$bars;
274
275 cmd 'nop yeah';
276 $bar_config = $i3->get_bar_config($bar_id)->recv;
277 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
278 ok($bar_config->{verbose}, 'verbose on');
279 ok(!$bar_config->{workspace_buttons}, 'workspace buttons disabled');
280 ok($bar_config->{binding_mode_indicator}, 'mode indicator enabled');
281 is($bar_config->{mode}, 'dock', 'dock mode');
282 is($bar_config->{position}, 'top', 'position top');
283 is_deeply($bar_config->{outputs}, [ 'HDMI1', 'HDMI2' ], 'outputs ok');
284 is($bar_config->{tray_output}, 'HDMI2', 'tray_output ok');
285 is($bar_config->{font}, 'Terminus', 'font ok');
286 is($bar_config->{socket_path}, '/tmp/foobar', 'socket_path ok');
287 is_deeply($bar_config->{colors},
288     {
289         background => '#ff0000',
290         statusline => '#00ff00',
291         focused_workspace_text => '#ffffff',
292         focused_workspace_bg => '#285577',
293         active_workspace_text => '#888888',
294         active_workspace_bg => '#222222',
295         inactive_workspace_text => '#888888',
296         inactive_workspace_bg => '#222222',
297         urgent_workspace_text => '#ffffff',
298         urgent_workspace_bg => '#900000',
299     }, '(old) colors ok');
300
301 exit_gracefully($pid);
302
303
304 done_testing;