]> git.sur5r.net Git - i3/i3/commitdiff
Implement 'prev', extend testcase
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 10 May 2010 07:08:31 +0000 (09:08 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 10 May 2010 07:08:31 +0000 (09:08 +0200)
src/cmdparse.l
src/cmdparse.y
testcases/t/21-next-prev.t

index 318da934d67b585377a67f72f453d13b08385302..ee73c7b9dbcd1d95d8a566d82d72c2f8c9b51b17 100644 (file)
@@ -100,6 +100,9 @@ focus                           { return TOK_FOCUS; }
 move                            { return TOK_MOVE; }
 open                            { return TOK_OPEN; }
 next                            { return TOK_NEXT; }
+prev                            { return TOK_PREV; }
+horizontal                      { return TOK_HORIZONTAL; }
+vertical                        { return TOK_VERTICAL; }
 
 class                           { BEGIN(WANT_QSTRING); return TOK_CLASS; }
 id                              { BEGIN(WANT_QSTRING); return TOK_ID; }
index c3b19686ae948e4684c04d62ed5622d4caf28762..d77fa4cac2b3db05f2c2d79541e33ee17ad4dfdc 100644 (file)
@@ -112,6 +112,9 @@ void parse_cmd(const char *new) {
 %token TOK_MOVE "move"
 %token TOK_OPEN "open"
 %token TOK_NEXT "next"
+%token TOK_PREV "prev"
+%token TOK_HORIZONTAL "horizontal"
+%token TOK_VERTICAL "vertical"
 
 %token TOK_CLASS "class"
 %token TOK_ID "id"
@@ -252,6 +255,7 @@ operation:
     | open
     | fullscreen
     | next
+    | prev
     ;
 
 exec:
@@ -345,9 +349,17 @@ next:
     }
     ;
 
+prev:
+    TOK_PREV WHITESPACE direction
+    {
+        printf("should select prev window in direction %c\n", $<chr>3);
+        tree_next('p', ($<chr>3 == 'v' ? VERT : HORIZ));
+    }
+    ;
+
 direction:
-    'h'             { $<chr>$ = 'h'; }
-    | 'horizontal'  { $<chr>$ = 'h'; }
+    TOK_HORIZONTAL  { $<chr>$ = 'h'; }
+    | 'h'           { $<chr>$ = 'h'; }
+    | TOK_VERTICAL  { $<chr>$ = 'v'; }
     | 'v'           { $<chr>$ = 'v'; }
-    | 'vertical'    { $<chr>$ = 'v'; }
     ;
index 3759e2566c8596d5e5f7c98596cde24a69069395..8ed3ada720de657298aeef03d4f1e93ef4b914b2 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Tests focus switching (next/prev)
 #
-use i3test tests => 4;
+use i3test tests => 13;
 use X11::XCB qw(:all);
 use v5.10;
 
@@ -31,22 +31,60 @@ is($focus->[0], $old_focused, 'focus did not change with only one con');
 ######################################################################
 # Open another container, verify that 'next h' switches
 ######################################################################
+my $left = $old_focused;
+
 $i3->command('open')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+isnt($old_focused, $focus->[0], 'new container is focused');
+my $mid = $focus->[0];
 
+$i3->command('open')->recv;
 ($nodes, $focus) = get_ws_content($tmp);
 isnt($old_focused, $focus->[0], 'new container is focused');
-$old_focused = $focus->[0];
+my $right = $focus->[0];
+
+$i3->command('next h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+isnt($focus->[0], $right, 'focus did change');
+is($focus->[0], $left, 'left container focused (wrapping)');
+
+$i3->command('next h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $mid, 'middle container focused');
 
 $i3->command('next h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $right, 'right container focused');
+
+$i3->command('prev h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $mid, 'middle container focused');
+
+$i3->command('prev h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $left, 'left container focused');
+
+$i3->command('prev h')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $right, 'right container focused');
+
 
+######################################################################
+# Test synonyms (horizontal/vertical instead of h/v)
+######################################################################
+
+$i3->command('prev horizontal')->recv;
 ($nodes, $focus) = get_ws_content($tmp);
-isnt($focus->[0], $old_focused, 'focus did change');
+is($focus->[0], $mid, 'middle container focused');
+
+$i3->command('next horizontal')->recv;
+($nodes, $focus) = get_ws_content($tmp);
+is($focus->[0], $right, 'right container focused');
+
 
 #
-# TODO: extend this test-case:
-# - implement prev
+# TODO: extend this test-case (as soon as splitting is implemented):
 # - wrapping (no horizontal switch possible, goes level-up)
 # - going level-up "manually"
-# - different synonyms (horizontal/vertical)
 
 diag( "Testing i3, Perl $], $^X" );