2 # vim:ts=4:sw=4:expandtab
3 # !NO_I3_INSTANCE! will prevent complete-run.pl from starting i3
5 # Tests if i3-migrate-config-to-v4.pl correctly migrates all config file
6 # directives and commands
11 use File::Temp qw(tempfile tempdir);
16 # reads in a whole file
18 open my $fh, '<', shift;
26 my ($fh, $tmpfile) = tempfile();
30 my $cmd = "sh -c 'exec " . abs_path("../i3-migrate-config-to-v4.pl") . " --v3 <$tmpfile'";
31 return [ split /\n/, qx($cmd) ];
35 my ($lines, $pattern) = @_;
37 for my $line (@$lines) {
38 return 1 if $line =~ $pattern;
44 #####################################################################
45 # check that some directives remain untouched
46 #####################################################################
49 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
52 my $output = migrate_config($input);
53 ok(line_exists($output, qr|font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1|), 'font directive unchanged');
56 floating_Modifier Mod1
57 focus_follows_mouse true
58 ipc-socket /tmp/i3-ipc.sock
59 ipc_socket /tmp/i3-ipc.sock
64 client.focused #2F343A #900000 #FFFFFF
65 client.focused_inactive #FF0000 #FF0000 #FF0000
66 client.unfocused #00FF00 #00FF00 #00FF00
67 client.urgent #0000FF #0000FF #0000FF
68 client.background #000000
71 $output = migrate_config($input);
72 ok(line_exists($output, qr|^floating_Modifier Mod1$|), 'floating_modifier unchanged');
73 ok(line_exists($output, qr|^focus_follows_mouse true$|), 'focus_follows_mouse unchanged');
74 ok(line_exists($output, qr|^ipc-socket /tmp/i3-ipc.sock$|), 'ipc-socket unchanged');
75 ok(line_exists($output, qr|^ipc_socket /tmp/i3-ipc.sock$|), 'ipc_socket unchanged');
76 ok(line_exists($output, qr|^exec /usr/bin/i3|), 'exec unchanged');
77 ok(line_exists($output, qr|^set stuff Mod1|), 'set unchanged');
78 ok(line_exists($output, qr|^assign "XTerm" → 3|), 'assign unchanged');
79 ok(line_exists($output, qr|^assign "XTerm" → ~5|), 'assign unchanged');
80 ok(line_exists($output, qr|^client\.focused #2F343A #900000 #FFFFFF$|), 'client.focused unchanged');
81 ok(line_exists($output, qr|^client\.focused_inactive #FF0000 #FF0000 #FF0000$|), 'client.focused_inactive unchanged');
82 ok(line_exists($output, qr|^client\.unfocused #00FF00 #00FF00 #00FF00$|), 'client.unfocused unchanged');
83 ok(line_exists($output, qr|^client\.urgent #0000FF #0000FF #0000FF$|), 'client.urgent unchanged');
84 ok(line_exists($output, qr|^client\.background #000000$|), 'client.background unchanged');
86 #####################################################################
87 # check whether the bar colors get removed properly
88 #####################################################################
91 bar.focused #FFFF00 #FFFF00 #FFFF00
92 bar.unfocused #FFFF00 #FFFF00 #FFFF00
93 bar.urgent #FFFF00 #FFFF00 #FFFF00
96 $output = migrate_config($input);
97 ok(!line_exists($output, qr|^bar\.|), 'no bar. lines');
98 ok(line_exists($output, qr|^#.*REMOVED bar|), 'note bar. removed');
101 #####################################################################
102 # check whether the other directives get converted correctly
103 #####################################################################
106 new_container stacking
111 $output = migrate_config($input);
112 ok(line_exists($output, qr|^workspace_layout stacking$|), 'new_container changed');
113 ok(line_exists($output, qr|REMOVED workspace_bar|), 'workspace_bar removed');
114 ok(!line_exists($output, qr|^workspace_bar|), 'no workspace_bar in the output');
115 ok(line_exists($output, qr|^new_window borderless$|), 'new_window changed');
117 #####################################################################
118 # check whether new_window's parameters get changed correctly
119 #####################################################################
121 $output = migrate_config('new_window bb');
122 ok(line_exists($output, qr|^new_window borderless$|), 'new_window bb changed');
124 $output = migrate_config('new_window bn');
125 ok(line_exists($output, qr|^new_window normal$|), 'new_window bn changed');
127 $output = migrate_config('new_window bp');
128 ok(line_exists($output, qr|^new_window 1pixel$|), 'new_window bp changed');
130 #####################################################################
131 # check that some commands remain untouched
132 #####################################################################
135 bindsym Mod1+s exec /usr/bin/urxvt
136 bindsym Mod1+s mark foo
137 bindsym Mod1+s restart
138 bindsym Mod1+s reload
140 bindsym Mod1+s stack-limit cols 2
141 bindsym Mod1+s stack-limit rows 3
142 bind Mod1+c exec /usr/bin/urxvt
148 $output = migrate_config($input);
149 ok(line_exists($output, qr|^bindsym Mod1\+s exec /usr/bin/urxvt$|), 'exec unchanged');
150 ok(line_exists($output, qr|^bindsym Mod1\+s mark foo$|), 'mark unchanged');
151 ok(line_exists($output, qr|^bindsym Mod1\+s restart$|), 'restart unchanged');
152 ok(line_exists($output, qr|^bindsym Mod1\+s reload$|), 'reload unchanged');
153 ok(line_exists($output, qr|^bindsym Mod1\+s exit$|), 'exit unchanged');
154 ok(line_exists($output, qr|^bindsym Mod1\+s stack-limit cols 2$|), 'stack-limit unchanged');
155 ok(line_exists($output, qr|^bindsym Mod1\+s stack-limit rows 3$|), 'stack-limit unchanged');
156 ok(line_exists($output, qr|^bindcode Mod1\+c exec /usr/bin/urxvt$|), 'bind changed to bindcode');
157 ok(line_exists($output, qr|^mode "asdf" {$|), 'mode asdf unchanged');
158 ok(line_exists($output, qr|^bindcode 36 mode default$|), 'mode default unchanged');
159 ok(line_exists($output, qr|^}$|), 'closing mode bracket still there');
161 #####################################################################
162 # check the simple command replacements
163 #####################################################################
198 $output = migrate_config($input);
199 ok(line_exists($output, qr|^bindsym Mod1\+s layout stacking$|), 's replaced');
200 ok(line_exists($output, qr|^bindsym Mod1\+s layout default$|), 'd replaced');
201 ok(line_exists($output, qr|^bindsym Mod1\+s layout tabbed$|), 'T replaced');
202 ok(line_exists($output, qr|^bindsym Mod1\+s fullscreen$|), 'f replaced');
203 ok(line_exists($output, qr|^bindsym Mod1\+s fullscreen global$|), 'fg replaced');
204 ok(line_exists($output, qr|^bindsym Mod1\+s focus mode_toggle$|), 't replaced');
205 ok(line_exists($output, qr|^bindsym Mod1\+s focus left$|), 'h replaced');
206 ok(line_exists($output, qr|^bindsym Mod1\+s focus down$|), 'j replaced');
207 ok(line_exists($output, qr|^bindsym Mod1\+s focus up$|), 'k replaced');
208 ok(line_exists($output, qr|^bindsym Mod1\+s focus right$|), 'l replaced');
209 ok(line_exists($output, qr|^bindsym Mod1\+s move left$|), 'mh replaced');
210 ok(line_exists($output, qr|^bindsym Mod1\+s move down$|), 'mj replaced');
211 ok(line_exists($output, qr|^bindsym Mod1\+s move up$|), 'mk replaced');
212 ok(line_exists($output, qr|^bindsym Mod1\+s move right$|), 'ml replaced');
213 ok(line_exists($output, qr|^bindsym Mod1\+s border normal$|), 'bn replaced');
214 ok(line_exists($output, qr|^bindsym Mod1\+s border 1pixel$|), 'bp replaced');
215 ok(line_exists($output, qr|^bindsym Mod1\+s border borderless$|), 'bb replaced');
216 ok(line_exists($output, qr|^#.*with container.*obsolete.*wch$|), 'with container removed');
217 ok(line_exists($output, qr|^#.*with container.*obsolete.*wcml$|), 'with container removed');
218 ok(line_exists($output, qr|^bindsym Mod1\+k kill$|), 'kill unchanged');
219 ok(line_exists($output, qr|^bindsym Mod1\+n workspace next$|), 'nw replaced');
220 ok(line_exists($output, qr|^bindsym Mod1\+p workspace prev$|), 'pw replaced');
222 #####################################################################
223 # check more advanced replacements
224 #####################################################################
227 bindsym Mod1+s goto foo
230 $output = migrate_config($input);
231 ok(line_exists($output, qr|^bindsym Mod1\+s \[con_mark="foo"\] focus$|), 'goto replaced');
233 #####################################################################
234 # check whether focus's parameters get changed correctly
235 #####################################################################
237 $output = migrate_config('bindsym Mod1+f focus 3');
238 ok(line_exists($output, qr|^#.*focus.*obsolete.*focus 3$|), 'focus [number] gone');
240 $output = migrate_config('bindsym Mod1+f focus floating');
241 ok(line_exists($output, qr|^bindsym Mod1\+f focus floating$|), 'focus floating unchanged');
243 $output = migrate_config('bindsym Mod1+f focus tiling');
244 ok(line_exists($output, qr|^bindsym Mod1\+f focus tiling$|), 'focus tiling unchanged');
246 $output = migrate_config('bindsym Mod1+f focus ft');
247 ok(line_exists($output, qr|^bindsym Mod1\+f focus mode_toggle$|), 'focus ft changed');
249 #####################################################################
250 # check whether resize's parameters get changed correctly
251 #####################################################################
253 $output = migrate_config('bindsym Mod1+f resize left +10');
254 ok(line_exists($output, qr|^bindsym Mod1\+f resize grow left 10 px$|), 'resize left changed');
256 $output = migrate_config('bindsym Mod1+f resize top -20');
257 ok(line_exists($output, qr|^bindsym Mod1\+f resize shrink top 20 px$|), 'resize top changed');
259 $output = migrate_config('bindsym Mod1+f resize right -20');
260 ok(line_exists($output, qr|^bindsym Mod1\+f resize shrink right 20 px$|), 'resize right changed');
262 $output = migrate_config('bindsym Mod1+f resize bottom +23');
263 ok(line_exists($output, qr|^bindsym Mod1\+f resize grow bottom 23 px$|), 'resize bottom changed');
265 #####################################################################
266 # check whether jump's parameters get changed correctly
267 #####################################################################
269 $output = migrate_config('bindsym Mod1+f jump 3');
270 ok(line_exists($output, qr|^#.*obsolete.*jump 3$|), 'jump to workspace removed');
272 $output = migrate_config('bindsym Mod1+f jump 3 4 5');
273 ok(line_exists($output, qr|^#.*obsolete.*jump 3 4 5$|), 'jump to workspace + col/row removed');
275 $output = migrate_config('bindsym Mod1+f jump "XTerm"');
276 ok(line_exists($output, qr|^bindsym Mod1\+f \[class="XTerm"\] focus$|), 'jump changed');
278 $output = migrate_config('bindsym Mod1+f jump "XTerm/irssi"');
279 ok(line_exists($output, qr|^bindsym Mod1\+f \[class="XTerm" title="irssi"\] focus$|), 'jump changed');
281 #####################################################################
282 # check whether workspace commands are handled correctly
283 #####################################################################
285 $output = migrate_config('workspace 3 output VGA-1');
286 ok(line_exists($output, qr|^workspace 3 output VGA-1$|), 'workspace assignment unchanged');
288 $output = migrate_config('workspace 3 work');
289 ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
290 ok(line_exists($output, qr|#.*workspace name.*bindings|), 'note present');
296 $output = migrate_config($input);
297 ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
298 ok(line_exists($output, qr|^bindsym Mod1\+3 workspace work|), 'named workspace in bindings');
300 # The same, but in reverse order
305 $output = migrate_config($input);
306 ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
307 ok(line_exists($output, qr|^bindsym Mod1\+3 workspace work|), 'named workspace in bindings');
309 $output = migrate_config('bindsym Mod1+3 3');
310 ok(line_exists($output, qr|^bindsym Mod1\+3 workspace 3|), 'workspace changed');
312 $output = migrate_config('bindsym Mod1+3 m3');
313 ok(line_exists($output, qr|^bindsym Mod1\+3 move workspace 3|), 'move workspace changed');
319 $output = migrate_config($input);
320 ok(!line_exists($output, qr|^workspace|), 'workspace name not present');
321 ok(line_exists($output, qr|^bindsym Mod1\+3 move workspace work|), 'move to named workspace in bindings');
323 #####################################################################
324 # check whether an i3bar call is added if the workspace bar bar was enabled
325 #####################################################################
327 $output = migrate_config('');
328 ok(line_exists($output, qr|i3bar|), 'i3bar added');
330 $output = migrate_config('workspace_bar enable');
331 ok(line_exists($output, qr|i3bar|), 'i3bar added');
333 $output = migrate_config('workspace_bar no');
334 ok(!line_exists($output, qr|i3bar|), 'no i3bar added');