]> git.sur5r.net Git - i3/i3/commitdiff
Added test cases for 'mark --toggle' (#1463) 1599/head
authorIngo Bürk <ingo.buerk@tngtech.com>
Sat, 28 Mar 2015 22:14:59 +0000 (23:14 +0100)
committerIngo Bürk <ingo.buerk@tngtech.com>
Sun, 29 Mar 2015 19:21:50 +0000 (21:21 +0200)
src/commands.c
testcases/t/210-mark-unmark.t

index 46c75c43be1fa7f782265a469404c07f6ddda71c..ea0b90328367c9ec2f935753c96711b0a290c181 100644 (file)
@@ -1061,10 +1061,11 @@ void cmd_mark(I3_CMD, char *mark, char *toggle) {
     TAILQ_FOREACH(con, &all_cons, all_cons) {
         /* Skip matched windows, we took care of them already. */
         bool matched = false;
-        TAILQ_FOREACH(current, &owindows, owindows)
-        if (current->con == con) {
-            matched = true;
-            break;
+        TAILQ_FOREACH(current, &owindows, owindows) {
+            if (current->con == con) {
+                matched = true;
+                break;
+            }
         }
         if (matched)
             continue;
index f285338b8208efc2b1e1985d86069405bd0e1b3f..0083547fa2fde727e09a5285bcafa705fa9d5fd5 100644 (file)
 #
 # checks if mark and unmark work correctly
 use i3test;
+use List::Util qw(first);
 
 sub get_marks {
     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
 ##############################################################
@@ -76,4 +84,61 @@ cmd 'unmark';
 
 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;