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