]> 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 is($bar_config->{mode}, 'dock', 'dock mode by default');
67 is($bar_config->{position}, 'bottom', 'position bottom by default');
68
69 #####################################################################
70 # ensure that reloading cleans up the old bar configs
71 #####################################################################
72
73 cmd 'reload';
74 $bars = $i3->get_bar_config()->recv;
75 is(@$bars, 1, 'still one bar configured');
76
77 exit_gracefully($pid);
78
79 #####################################################################
80 # validate a more complex configuration
81 #####################################################################
82
83 $config = <<EOT;
84 # i3 config file (v4)
85 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
86
87 bar {
88     # Start a default instance of i3bar which provides workspace buttons.
89     # Additionally, i3status will provide a statusline.
90     status_command i3status --bar
91
92     output HDMI1
93     output HDMI2
94
95     tray_output LVDS1
96     tray_output HDMI2
97     position top
98     mode dock
99     font Terminus
100     workspace_buttons no
101     verbose yes
102     socket_path /tmp/foobar
103
104     colors {
105         background #ff0000
106         statusline   #00ff00
107
108         focused_workspace   #4c7899 #285577 #ffffff
109         active_workspace    #333333 #222222 #888888
110         inactive_workspace  #333333 #222222 #888888
111         urgent_workspace    #2f343a #900000 #ffffff
112     }
113 }
114 EOT
115
116 $pid = launch_with_config($config);
117
118 $i3 = i3(get_socket_path(0));
119 $bars = $i3->get_bar_config()->recv;
120 is(@$bars, 1, 'one bar configured');
121
122 $bar_id = shift @$bars;
123
124 $bar_config = $i3->get_bar_config($bar_id)->recv;
125 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
126 ok($bar_config->{verbose}, 'verbose on');
127 ok(!$bar_config->{workspace_buttons}, 'workspace buttons disabled');
128 is($bar_config->{mode}, 'dock', 'dock mode');
129 is($bar_config->{position}, 'top', 'position top');
130 is_deeply($bar_config->{outputs}, [ 'HDMI1', 'HDMI2' ], 'outputs ok');
131 is($bar_config->{tray_output}, 'HDMI2', 'tray_output ok');
132 is($bar_config->{font}, 'Terminus', 'font ok');
133 is($bar_config->{socket_path}, '/tmp/foobar', 'socket_path ok');
134 is_deeply($bar_config->{colors},
135     {
136         background => '#ff0000',
137         statusline => '#00ff00',
138         focused_workspace_border => '#4c7899',
139         focused_workspace_text => '#ffffff',
140         focused_workspace_bg => '#285577',
141         active_workspace_border => '#333333',
142         active_workspace_text => '#888888',
143         active_workspace_bg => '#222222',
144         inactive_workspace_border => '#333333',
145         inactive_workspace_text => '#888888',
146         inactive_workspace_bg => '#222222',
147         urgent_workspace_border => '#2f343a',
148         urgent_workspace_text => '#ffffff',
149         urgent_workspace_bg => '#900000',
150     }, 'colors ok');
151
152 exit_gracefully($pid);
153
154 #####################################################################
155 # ensure that multiple bars get different IDs
156 #####################################################################
157
158 $config = <<EOT;
159 # i3 config file (v4)
160 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
161
162 bar {
163     # Start a default instance of i3bar which provides workspace buttons.
164     # Additionally, i3status will provide a statusline.
165     status_command i3status --bar
166
167     output HDMI1
168 }
169
170 bar {
171     output VGA1
172 }
173 EOT
174
175 $pid = launch_with_config($config);
176
177 $i3 = i3(get_socket_path(0));
178 $bars = $i3->get_bar_config()->recv;
179 is(@$bars, 2, 'two bars configured');
180 isnt($bars->[0], $bars->[1], 'bar IDs are different');
181
182 my $bar1_config = $i3->get_bar_config($bars->[0])->recv;
183 my $bar2_config = $i3->get_bar_config($bars->[1])->recv;
184
185 isnt($bar1_config->{outputs}, $bar2_config->{outputs}, 'outputs different');
186
187 exit_gracefully($pid);
188
189 #####################################################################
190 # make sure comments work properly
191 #####################################################################
192
193 $config = <<EOT;
194 # i3 config file (v4)
195 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
196
197 bar {
198     # Start a default instance of i3bar which provides workspace buttons.
199     # Additionally, i3status will provide a statusline.
200     status_command i3status --bar
201     #status_command i3status --qux
202 #status_command i3status --qux
203
204     output HDMI1
205     colors {
206         background #000000
207         #background #ffffff
208     }
209 }
210 EOT
211
212 $pid = launch_with_config($config);
213
214 $i3 = i3(get_socket_path(0));
215 $bars = $i3->get_bar_config()->recv;
216 $bar_id = shift @$bars;
217
218 $bar_config = $i3->get_bar_config($bar_id)->recv;
219 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
220 is($bar_config->{colors}->{background}, '#000000', 'background color ok');
221
222 exit_gracefully($pid);
223
224 #####################################################################
225 # verify that the old syntax still works
226 #####################################################################
227
228 $config = <<EOT;
229 # i3 config file (v4)
230 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
231
232 bar {
233     # Start a default instance of i3bar which provides workspace buttons.
234     # Additionally, i3status will provide a statusline.
235     status_command i3status --bar
236
237     output HDMI1
238     output HDMI2
239
240     tray_output LVDS1
241     tray_output HDMI2
242     position top
243     mode dock
244     font Terminus
245     workspace_buttons no
246     verbose yes
247     socket_path /tmp/foobar
248
249     colors {
250         background #ff0000
251         statusline   #00ff00
252
253         focused_workspace   #ffffff #285577
254         active_workspace    #888888 #222222
255         inactive_workspace  #888888 #222222
256         urgent_workspace    #ffffff #900000
257     }
258 }
259 EOT
260
261 $pid = launch_with_config($config);
262
263 $i3 = i3(get_socket_path(0));
264 $bars = $i3->get_bar_config()->recv;
265 is(@$bars, 1, 'one bar configured');
266
267 $bar_id = shift @$bars;
268
269 cmd 'nop yeah';
270 $bar_config = $i3->get_bar_config($bar_id)->recv;
271 is($bar_config->{status_command}, 'i3status --bar', 'status_command correct');
272 ok($bar_config->{verbose}, 'verbose on');
273 ok(!$bar_config->{workspace_buttons}, 'workspace buttons disabled');
274 is($bar_config->{mode}, 'dock', 'dock mode');
275 is($bar_config->{position}, 'top', 'position top');
276 is_deeply($bar_config->{outputs}, [ 'HDMI1', 'HDMI2' ], 'outputs ok');
277 is($bar_config->{tray_output}, 'HDMI2', 'tray_output ok');
278 is($bar_config->{font}, 'Terminus', 'font ok');
279 is($bar_config->{socket_path}, '/tmp/foobar', 'socket_path ok');
280 is_deeply($bar_config->{colors},
281     {
282         background => '#ff0000',
283         statusline => '#00ff00',
284         focused_workspace_text => '#ffffff',
285         focused_workspace_bg => '#285577',
286         active_workspace_text => '#888888',
287         active_workspace_bg => '#222222',
288         inactive_workspace_text => '#888888',
289         inactive_workspace_bg => '#222222',
290         urgent_workspace_text => '#ffffff',
291         urgent_workspace_bg => '#900000',
292     }, '(old) colors ok');
293
294 exit_gracefully($pid);
295
296
297 done_testing;