Added test cases for 'mark --toggle' (#1463)

This commit is contained in:
Ingo Bürk 2015-03-28 23:14:59 +01:00
parent 47222ab261
commit 7a75cb7e0b
2 changed files with 70 additions and 4 deletions

View File

@ -1061,10 +1061,11 @@ void cmd_mark(I3_CMD, char *mark, char *toggle) {
TAILQ_FOREACH(con, &all_cons, all_cons) { TAILQ_FOREACH(con, &all_cons, all_cons) {
/* Skip matched windows, we took care of them already. */ /* Skip matched windows, we took care of them already. */
bool matched = false; bool matched = false;
TAILQ_FOREACH(current, &owindows, owindows) TAILQ_FOREACH(current, &owindows, owindows) {
if (current->con == con) { if (current->con == con) {
matched = true; matched = true;
break; break;
}
} }
if (matched) if (matched)
continue; continue;

View File

@ -16,11 +16,19 @@
# #
# checks if mark and unmark work correctly # checks if mark and unmark work correctly
use i3test; use i3test;
use List::Util qw(first);
sub get_marks { sub get_marks {
return i3(get_socket_path())->get_marks->recv; return i3(get_socket_path())->get_marks->recv;
} }
sub get_mark_for_window_on_workspace {
my ($ws, $con) = @_;
my $current = first { $_->{window} == $con->{id} } @{get_ws_content($ws)};
return $current->{mark};
}
############################################################## ##############################################################
# 1: check that there are no marks set yet # 1: check that there are no marks set yet
############################################################## ##############################################################
@ -76,4 +84,61 @@ cmd 'unmark';
is_deeply(get_marks(), [], 'all marks removed'); is_deeply(get_marks(), [], 'all marks removed');
##############################################################
# 4: mark a con, use same mark to mark another con,
# check that only the latter is marked
##############################################################
my $first = open_window;
my $second = open_window;
cmd 'mark important';
cmd 'focus left';
cmd 'mark important';
is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'first container now has the mark');
ok(!get_mark_for_window_on_workspace($tmp, $second), 'second container lost the mark');
##############################################################
# 5: mark a con, toggle the mark, check that the mark is gone
##############################################################
my $con = open_window;
cmd 'mark important';
cmd 'mark --toggle important';
ok(!get_mark_for_window_on_workspace($tmp, $con), 'container no longer has the mark');
##############################################################
# 6: toggle a mark on an unmarked con, check it is marked
##############################################################
my $con = open_window;
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container now has the mark');
##############################################################
# 7: mark a con, toggle a different mark, check it is marked
# with the new mark
##############################################################
my $con = open_window;
cmd 'mark boring';
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $con), 'important', 'container has the most recent mark');
##############################################################
# 8: mark a con, toggle the mark on another con,
# check only the latter has the mark
##############################################################
my $first = open_window;
my $second = open_window;
cmd 'mark important';
cmd 'focus left';
cmd 'mark --toggle important';
is(get_mark_for_window_on_workspace($tmp, $first), 'important', 'left container has the mark now');
ok(!get_mark_for_window_on_workspace($tmp, $second), 'second containr no longer has the mark');
done_testing; done_testing;