2 # vim:ts=4:sw=4:expandtab
4 # Checks that the bar config is parsed correctly.
7 use i3test i3_autostart => 0;
9 #####################################################################
10 # test a config without any bars
11 #####################################################################
15 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
18 my $pid = launch_with_config($config);
20 my $i3 = i3(get_socket_path(0));
21 my $bars = $i3->get_bar_config()->recv;
22 is(@$bars, 0, 'no bars configured');
24 exit_gracefully($pid);
26 #####################################################################
27 # now provide a simple bar configuration
28 #####################################################################
32 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
35 # Start a default instance of i3bar which provides workspace buttons.
36 # Additionally, i3status will provide a statusline.
37 status_command i3status --foo
41 $pid = launch_with_config($config);
43 $i3 = i3(get_socket_path(0));
44 $bars = $i3->get_bar_config()->recv;
45 is(@$bars, 1, 'one bar configured');
47 my $bar_id = shift @$bars;
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');
56 #####################################################################
57 # ensure that reloading cleans up the old bar configs
58 #####################################################################
61 $bars = $i3->get_bar_config()->recv;
62 is(@$bars, 1, 'still one bar configured');
64 exit_gracefully($pid);
66 #####################################################################
67 # validate a more complex configuration
68 #####################################################################
72 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
75 # Start a default instance of i3bar which provides workspace buttons.
76 # Additionally, i3status will provide a statusline.
77 status_command i3status --bar
89 socket_path /tmp/foobar
95 focused_workspace #4c7899 #285577 #ffffff
96 active_workspace #333333 #222222 #888888
97 inactive_workspace #333333 #222222 #888888
98 urgent_workspace #2f343a #900000 #ffffff
103 $pid = launch_with_config($config);
105 $i3 = i3(get_socket_path(0));
106 $bars = $i3->get_bar_config()->recv;
107 is(@$bars, 1, 'one bar configured');
109 $bar_id = shift @$bars;
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},
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',
139 exit_gracefully($pid);
141 #####################################################################
142 # ensure that multiple bars get different IDs
143 #####################################################################
146 # i3 config file (v4)
147 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
150 # Start a default instance of i3bar which provides workspace buttons.
151 # Additionally, i3status will provide a statusline.
152 status_command i3status --bar
162 $pid = launch_with_config($config);
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');
169 my $bar1_config = $i3->get_bar_config($bars->[0])->recv;
170 my $bar2_config = $i3->get_bar_config($bars->[1])->recv;
172 isnt($bar1_config->{outputs}, $bar2_config->{outputs}, 'outputs different');
174 exit_gracefully($pid);
176 #####################################################################
177 # make sure comments work properly
178 #####################################################################
181 # i3 config file (v4)
182 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
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
199 $pid = launch_with_config($config);
201 $i3 = i3(get_socket_path(0));
202 $bars = $i3->get_bar_config()->recv;
203 $bar_id = shift @$bars;
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');
209 exit_gracefully($pid);
211 #####################################################################
212 # verify that the old syntax still works
213 #####################################################################
216 # i3 config file (v4)
217 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
220 # Start a default instance of i3bar which provides workspace buttons.
221 # Additionally, i3status will provide a statusline.
222 status_command i3status --bar
234 socket_path /tmp/foobar
240 focused_workspace #ffffff #285577
241 active_workspace #888888 #222222
242 inactive_workspace #888888 #222222
243 urgent_workspace #ffffff #900000
248 $pid = launch_with_config($config);
250 $i3 = i3(get_socket_path(0));
251 $bars = $i3->get_bar_config()->recv;
252 is(@$bars, 1, 'one bar configured');
254 $bar_id = shift @$bars;
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},
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');
281 exit_gracefully($pid);