2 # vim:ts=4:sw=4:expandtab
4 # Please read the following documents before working on tests:
5 # • http://build.i3wm.org/docs/testsuite.html
8 # • http://build.i3wm.org/docs/lib-i3test.html
9 # (alternatively: perldoc ./testcases/lib/i3test.pm)
11 # • http://build.i3wm.org/docs/ipc.html
14 # • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
15 # (unless you are already familiar with Perl)
17 # Checks that the bar config is parsed correctly.
20 use i3test i3_autostart => 0;
22 #####################################################################
23 # test a config without any bars
24 #####################################################################
28 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
31 my $pid = launch_with_config($config);
33 my $i3 = i3(get_socket_path(0));
34 my $bars = $i3->get_bar_config()->recv;
35 is(@$bars, 0, 'no bars configured');
37 exit_gracefully($pid);
39 #####################################################################
40 # now provide a simple bar configuration
41 #####################################################################
45 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
48 # Start a default instance of i3bar which provides workspace buttons.
49 # Additionally, i3status will provide a statusline.
50 status_command i3status --foo
54 $pid = launch_with_config($config);
56 $i3 = i3(get_socket_path(0));
57 $bars = $i3->get_bar_config()->recv;
58 is(@$bars, 1, 'one bar configured');
60 my $bar_id = shift @$bars;
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');
69 #####################################################################
70 # ensure that reloading cleans up the old bar configs
71 #####################################################################
74 $bars = $i3->get_bar_config()->recv;
75 is(@$bars, 1, 'still one bar configured');
77 exit_gracefully($pid);
79 #####################################################################
80 # validate a more complex configuration
81 #####################################################################
85 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
88 # Start a default instance of i3bar which provides workspace buttons.
89 # Additionally, i3status will provide a statusline.
90 status_command i3status --bar
102 socket_path /tmp/foobar
108 focused_workspace #4c7899 #285577 #ffffff
109 active_workspace #333333 #222222 #888888
110 inactive_workspace #333333 #222222 #888888
111 urgent_workspace #2f343a #900000 #ffffff
116 $pid = launch_with_config($config);
118 $i3 = i3(get_socket_path(0));
119 $bars = $i3->get_bar_config()->recv;
120 is(@$bars, 1, 'one bar configured');
122 $bar_id = shift @$bars;
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},
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',
152 exit_gracefully($pid);
154 #####################################################################
155 # ensure that multiple bars get different IDs
156 #####################################################################
159 # i3 config file (v4)
160 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
163 # Start a default instance of i3bar which provides workspace buttons.
164 # Additionally, i3status will provide a statusline.
165 status_command i3status --bar
175 $pid = launch_with_config($config);
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');
182 my $bar1_config = $i3->get_bar_config($bars->[0])->recv;
183 my $bar2_config = $i3->get_bar_config($bars->[1])->recv;
185 isnt($bar1_config->{outputs}, $bar2_config->{outputs}, 'outputs different');
187 exit_gracefully($pid);
189 #####################################################################
190 # make sure comments work properly
191 #####################################################################
194 # i3 config file (v4)
195 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
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
212 $pid = launch_with_config($config);
214 $i3 = i3(get_socket_path(0));
215 $bars = $i3->get_bar_config()->recv;
216 $bar_id = shift @$bars;
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');
222 exit_gracefully($pid);
224 #####################################################################
225 # verify that the old syntax still works
226 #####################################################################
229 # i3 config file (v4)
230 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
233 # Start a default instance of i3bar which provides workspace buttons.
234 # Additionally, i3status will provide a statusline.
235 status_command i3status --bar
247 socket_path /tmp/foobar
253 focused_workspace #ffffff #285577
254 active_workspace #888888 #222222
255 inactive_workspace #888888 #222222
256 urgent_workspace #ffffff #900000
261 $pid = launch_with_config($config);
263 $i3 = i3(get_socket_path(0));
264 $bars = $i3->get_bar_config()->recv;
265 is(@$bars, 1, 'one bar configured');
267 $bar_id = shift @$bars;
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},
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');
294 exit_gracefully($pid);