tests: introduce is_num_children test
This makes it clearer what the tests are actually doing and kills quite a bit of useless repetitions
This commit is contained in:
parent
65e5bcfdf4
commit
232d6ccce9
|
@ -116,6 +116,7 @@ use Test::More $test_more_args;
|
|||
use Data::Dumper;
|
||||
use AnyEvent::I3;
|
||||
use Time::HiRes qw(sleep);
|
||||
use i3test::Test;
|
||||
__
|
||||
$tester->BAIL_OUT("$@") if $@;
|
||||
feature->import(":5.10");
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package i3test::Test;
|
||||
|
||||
use base 'Test::Builder::Module';
|
||||
|
||||
our @EXPORT = qw(is_num_children);
|
||||
|
||||
my $CLASS = __PACKAGE__;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
i3test::Test - Additional test instructions for use in i3 testcases
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use i3test;
|
||||
|
||||
my $ws = fresh_workspace;
|
||||
is_num_children($ws, 0, 'no containers on this workspace yet');
|
||||
cmd 'open';
|
||||
is_num_children($ws, 1, 'one container after "open"');
|
||||
|
||||
done_testing;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This module provides convenience methods for i3 testcases. If you notice that a
|
||||
certain pattern is present in 5 or more test cases, it should most likely be
|
||||
moved into this module.
|
||||
|
||||
=head1 EXPORT
|
||||
|
||||
=head2 is_num_children($workspace, $expected, $test_name)
|
||||
|
||||
Gets the number of children on the given workspace and verifies that they match
|
||||
the expected amount of children.
|
||||
|
||||
is_num_children('1', 0, 'no containers on workspace 1 at startup');
|
||||
|
||||
=cut
|
||||
|
||||
sub is_num_children {
|
||||
my ($workspace, $num_children, $name) = @_;
|
||||
my $tb = $CLASS->builder;
|
||||
|
||||
my $con = i3test::get_ws($workspace);
|
||||
$tb->ok(defined($con), "Workspace $workspace exists");
|
||||
if (!defined($con)) {
|
||||
$tb->skip("Workspace does not exist, skipping is_num_children");
|
||||
return;
|
||||
}
|
||||
|
||||
my $got_num_children = scalar @{$con->{nodes}};
|
||||
|
||||
$tb->is_num($got_num_children, $num_children, $name);
|
||||
}
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Michael Stapelberg <michael@i3wm.org>
|
||||
|
||||
=cut
|
||||
|
||||
1
|
|
@ -26,8 +26,7 @@ my $win = $content->[0];
|
|||
cmd q|[class=".*"] kill|;
|
||||
cmd q|[con_id="99999"] kill|;
|
||||
|
||||
$content = get_ws_content($tmp);
|
||||
ok(@{$content} == 1, 'window still there');
|
||||
is_num_children($tmp, 1, 'window still there');
|
||||
|
||||
# now kill the window
|
||||
cmd 'nop now killing the window';
|
||||
|
@ -37,8 +36,7 @@ cmd qq|[con_id="$id"] kill|;
|
|||
wait_for_unmap $window;
|
||||
|
||||
cmd 'nop checking if its gone';
|
||||
$content = get_ws_content($tmp);
|
||||
ok(@{$content} == 0, 'window killed');
|
||||
is_num_children($tmp, 0, 'window killed');
|
||||
|
||||
# TODO: same test, but with pcre expressions
|
||||
|
||||
|
@ -86,15 +84,13 @@ my $right = open_special(name => 'right');
|
|||
ok($right->mapped, 'right window mapped');
|
||||
|
||||
# two windows should be here
|
||||
$content = get_ws_content($tmp);
|
||||
ok(@{$content} == 2, 'two windows opened');
|
||||
is_num_children($tmp, 2, 'two windows opened');
|
||||
|
||||
cmd '[class="special" title="left"] kill';
|
||||
|
||||
sync_with_i3;
|
||||
|
||||
$content = get_ws_content($tmp);
|
||||
is(@{$content}, 1, 'one window still there');
|
||||
is_num_children($tmp, 1, 'one window still there');
|
||||
|
||||
######################################################################
|
||||
# check that regular expressions work
|
||||
|
@ -104,17 +100,11 @@ $tmp = fresh_workspace;
|
|||
|
||||
$left = open_special(name => 'left', wm_class => 'special7');
|
||||
ok($left->mapped, 'left window mapped');
|
||||
|
||||
# two windows should be here
|
||||
$content = get_ws_content($tmp);
|
||||
ok(@{$content} == 1, 'window opened');
|
||||
is_num_children($tmp, 1, 'window opened');
|
||||
|
||||
cmd '[class="^special[0-9]$"] kill';
|
||||
|
||||
wait_for_unmap $left;
|
||||
|
||||
$content = get_ws_content($tmp);
|
||||
is(@{$content}, 0, 'window killed');
|
||||
is_num_children($tmp, 0, 'window killed');
|
||||
|
||||
######################################################################
|
||||
# check that UTF-8 works when matching
|
||||
|
@ -124,16 +114,10 @@ $tmp = fresh_workspace;
|
|||
|
||||
$left = open_special(name => 'ä 3', wm_class => 'special7');
|
||||
ok($left->mapped, 'left window mapped');
|
||||
|
||||
# two windows should be here
|
||||
$content = get_ws_content($tmp);
|
||||
ok(@{$content} == 1, 'window opened');
|
||||
is_num_children($tmp, 1, 'window opened');
|
||||
|
||||
cmd '[title="^\w [3]$"] kill';
|
||||
|
||||
wait_for_unmap $left;
|
||||
|
||||
$content = get_ws_content($tmp);
|
||||
is(@{$content}, 0, 'window killed');
|
||||
is_num_children($tmp, 0, 'window killed');
|
||||
|
||||
done_testing;
|
||||
|
|
|
@ -100,14 +100,12 @@ is($nodes->[1]->{id}, $second, 'second container on bottom');
|
|||
|
||||
# move it outside again
|
||||
cmd 'move left';
|
||||
$content = get_ws_content($tmp);
|
||||
is(@{$content}, 3, 'three nodes on this workspace');
|
||||
is_num_children($tmp, 3, 'three containers after moving left');
|
||||
|
||||
# due to automatic flattening/cleanup, the remaining split container
|
||||
# will be replaced by the con itself, so we will still have 3 nodes
|
||||
cmd 'move right';
|
||||
$content = get_ws_content($tmp);
|
||||
is(@{$content}, 2, 'two nodes on this workspace');
|
||||
is_num_children($tmp, 2, 'two containers after moving right (flattening)');
|
||||
|
||||
######################################################################
|
||||
# 4) We create two v-split containers on the workspace, then we move
|
||||
|
@ -128,8 +126,7 @@ cmd "move right";
|
|||
cmd 'focus left';
|
||||
cmd "move right";
|
||||
|
||||
$content = get_ws_content($otmp);
|
||||
is(@{$content}, 1, 'only one nodes on this workspace');
|
||||
is_num_children($otmp, 1, 'only one node on this workspace');
|
||||
|
||||
######################################################################
|
||||
# 5) test moving floating containers.
|
||||
|
|
|
@ -18,20 +18,20 @@ sub move_workspace_test {
|
|||
my $tmp2 = get_unused_workspace();
|
||||
cmd "workspace $tmp";
|
||||
|
||||
ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
|
||||
is_num_children($tmp, 0, 'no containers yet');
|
||||
|
||||
my $first = open_empty_con($i3);
|
||||
my $second = open_empty_con($i3);
|
||||
ok(@{get_ws_content($tmp)} == 2, 'two containers on first ws');
|
||||
is_num_children($tmp, 2, 'two containers on first ws');
|
||||
|
||||
cmd "workspace $tmp2";
|
||||
ok(@{get_ws_content($tmp2)} == 0, 'no containers on second ws yet');
|
||||
is_num_children($tmp2, 0, 'no containers on second ws yet');
|
||||
|
||||
cmd "workspace $tmp";
|
||||
|
||||
cmd "$movecmd $tmp2";
|
||||
ok(@{get_ws_content($tmp)} == 1, 'one container on first ws anymore');
|
||||
ok(@{get_ws_content($tmp2)} == 1, 'one container on second ws');
|
||||
is_num_children($tmp, 1, 'one container on first ws anymore');
|
||||
is_num_children($tmp2, 1, 'one container on second ws');
|
||||
my ($nodes, $focus) = get_ws_content($tmp2);
|
||||
|
||||
is($focus->[0], $second, 'same container on different ws');
|
||||
|
@ -53,7 +53,7 @@ move_workspace_test('move container to workspace');
|
|||
|
||||
cmd 'workspace 13: meh';
|
||||
cmd 'open';
|
||||
ok(@{get_ws_content('13: meh')} == 1, 'one container on 13: meh');
|
||||
is_num_children('13: meh', 1, 'one container on 13: meh');
|
||||
|
||||
ok(!workspace_exists('13'), 'workspace 13 does not exist yet');
|
||||
|
||||
|
@ -61,8 +61,8 @@ cmd 'workspace 12';
|
|||
cmd 'open';
|
||||
|
||||
cmd 'move to workspace number 13';
|
||||
ok(@{get_ws_content('13: meh')} == 2, 'two containers on 13: meh');
|
||||
ok(@{get_ws_content('12')} == 0, 'no container on 12 anymore');
|
||||
is_num_children('13: meh', 2, 'one container on 13: meh');
|
||||
is_num_children('12', 0, 'no container on 12 anymore');
|
||||
|
||||
ok(!workspace_exists('13'), 'workspace 13 does still not exist');
|
||||
|
||||
|
@ -76,28 +76,28 @@ ok(!workspace_exists('13'), 'workspace 13 does still not exist');
|
|||
my $tmp = get_unused_workspace();
|
||||
my $tmp2 = get_unused_workspace();
|
||||
cmd "workspace $tmp";
|
||||
ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
|
||||
is_num_children($tmp, 0, 'no containers yet');
|
||||
my $first = open_empty_con($i3);
|
||||
my $second = open_empty_con($i3);
|
||||
ok(@{get_ws_content($tmp)} == 2, 'two containers on first ws');
|
||||
is_num_children($tmp, 2, 'two containers');
|
||||
|
||||
cmd "workspace $tmp2";
|
||||
ok(@{get_ws_content($tmp2)} == 0, 'no containers yet');
|
||||
is_num_children($tmp2, 0, 'no containers yet');
|
||||
my $third = open_empty_con($i3);
|
||||
ok(@{get_ws_content($tmp2)} == 1, 'one container on second ws');
|
||||
is_num_children($tmp2, 1, 'one container on second ws');
|
||||
|
||||
# go back to the first workspace, move one of the containers to the next one
|
||||
cmd "workspace $tmp";
|
||||
cmd 'move workspace next';
|
||||
ok(@{get_ws_content($tmp)} == 1, 'one container on first ws');
|
||||
ok(@{get_ws_content($tmp2)} == 2, 'two containers on second ws');
|
||||
is_num_children($tmp, 1, 'one container on first ws');
|
||||
is_num_children($tmp2, 2, 'two containers on second ws');
|
||||
|
||||
# go to the second workspace and move two containers to the first one
|
||||
cmd "workspace $tmp2";
|
||||
cmd 'move workspace prev';
|
||||
cmd 'move workspace prev';
|
||||
ok(@{get_ws_content($tmp)} == 3, 'three containers on first ws');
|
||||
ok(@{get_ws_content($tmp2)} == 0, 'no containers on second ws');
|
||||
is_num_children($tmp, 3, 'three containers on first ws');
|
||||
is_num_children($tmp2, 0, 'no containers on second ws');
|
||||
|
||||
###################################################################
|
||||
# check if 'move workspace current' works
|
||||
|
@ -108,16 +108,16 @@ $tmp2 = get_unused_workspace();
|
|||
|
||||
cmd "workspace $tmp";
|
||||
$first = open_window(name => 'win-name');
|
||||
ok(@{get_ws_content($tmp)} == 1, 'one container on first ws');
|
||||
is_num_children($tmp, 1, 'one container on first ws');
|
||||
|
||||
cmd "workspace $tmp2";
|
||||
ok(@{get_ws_content($tmp2)} == 0, 'no containers yet');
|
||||
is_num_children($tmp2, 0, 'no containers yet');
|
||||
|
||||
cmd qq|[title="win-name"] move workspace $tmp2|;
|
||||
ok(@{get_ws_content($tmp2)} == 1, 'one container on second ws');
|
||||
is_num_children($tmp2, 1, 'one container on second ws');
|
||||
|
||||
cmd qq|[title="win-name"] move workspace $tmp|;
|
||||
ok(@{get_ws_content($tmp2)} == 0, 'no containers on second ws');
|
||||
is_num_children($tmp2, 0, 'no containers on second ws');
|
||||
|
||||
###################################################################
|
||||
# check if floating cons are moved to new workspaces properly
|
||||
|
@ -150,12 +150,12 @@ cmd 'open';
|
|||
|
||||
cmd 'workspace 16';
|
||||
cmd 'open';
|
||||
is(@{get_ws('16')->{nodes}}, 1, 'one node on ws 16');
|
||||
is_num_children('16', 1, 'one node on ws 16');
|
||||
|
||||
cmd "workspace $tmp";
|
||||
cmd 'open';
|
||||
cmd 'move workspace number 16';
|
||||
is(@{get_ws('16')->{nodes}}, 2, 'two nodes on ws 16');
|
||||
is_num_children('16', 2, 'two nodes on ws 16');
|
||||
|
||||
ok(!workspace_exists('17'), 'workspace 17 does not exist yet');
|
||||
cmd 'open';
|
||||
|
|
|
@ -58,7 +58,7 @@ END_OF_C_CODE
|
|||
|
||||
my $first_ws = fresh_workspace;
|
||||
|
||||
is(@{get_ws_content($first_ws)}, 0, 'no containers on this workspace yet');
|
||||
is_num_children($first_ws, 0, 'no containers on this workspace yet');
|
||||
|
||||
######################################################################
|
||||
# 1) initiate startup, switch workspace, create window
|
||||
|
@ -95,7 +95,7 @@ is(get_startup_id(), $startup_id, 'libstartup-notification returns the same id')
|
|||
|
||||
my $second_ws = fresh_workspace;
|
||||
|
||||
is(@{get_ws_content($second_ws)}, 0, 'no containers on the second workspace yet');
|
||||
is_num_children($second_ws, 0, 'no containers on the second workspace yet');
|
||||
|
||||
my $win = open_window({ dont_map => 1 });
|
||||
mark_window($win->id);
|
||||
|
@ -105,8 +105,8 @@ $win->map;
|
|||
# We sync with i3 here to make sure $x->input_focus is updated.
|
||||
sync_with_i3;
|
||||
|
||||
is(@{get_ws_content($second_ws)}, 0, 'still no containers on the second workspace');
|
||||
is(@{get_ws_content($first_ws)}, 1, 'one container on the first workspace');
|
||||
is_num_children($second_ws, 0, 'still no containers on the second workspace');
|
||||
is_num_children($first_ws, 1, 'one container on the first workspace');
|
||||
|
||||
######################################################################
|
||||
# same thing, but with _NET_STARTUP_ID set on the leader
|
||||
|
@ -119,8 +119,8 @@ $win = open_window({ dont_map => 1, client_leader => $leader });
|
|||
$win->map;
|
||||
sync_with_i3;
|
||||
|
||||
is(@{get_ws_content($second_ws)}, 0, 'still no containers on the second workspace');
|
||||
is(@{get_ws_content($first_ws)}, 2, 'two containers on the first workspace');
|
||||
is_num_children($second_ws, 0, 'still no containers on the second workspace');
|
||||
is_num_children($first_ws, 2, 'two containers on the first workspace');
|
||||
|
||||
######################################################################
|
||||
# 2) open another window after the startup process is completed
|
||||
|
@ -131,7 +131,7 @@ complete_startup();
|
|||
sync_with_i3;
|
||||
|
||||
my $otherwin = open_window;
|
||||
is(@{get_ws_content($second_ws)}, 1, 'one container on the second workspace');
|
||||
is_num_children($second_ws, 1, 'one container on the second workspace');
|
||||
|
||||
######################################################################
|
||||
# 3) test that the --no-startup-id flag for exec leads to no DESKTOP_STARTUP_ID
|
||||
|
@ -166,5 +166,4 @@ unlink($tmp);
|
|||
|
||||
is($startup_id, '', 'startup_id empty');
|
||||
|
||||
|
||||
done_testing;
|
||||
|
|
|
@ -15,11 +15,11 @@ my $keep_open_con = open_empty_con($i3);
|
|||
my $tmp = fresh_workspace;
|
||||
my $con = open_empty_con($i3);
|
||||
|
||||
is(@{get_ws_content($tmp)}, 1, 'one container');
|
||||
is(@{get_ws_content($old)}, 1, 'one container on old ws');
|
||||
is_num_children($tmp, 1, 'one container');
|
||||
is_num_children($old, 1, 'one container on old ws');
|
||||
|
||||
cmd 'move workspace prev; workspace prev';
|
||||
|
||||
is(@{get_ws_content($old)}, 2, 'container moved away');
|
||||
is_num_children($old, 2, 'container moved away');
|
||||
|
||||
done_testing;
|
||||
|
|
|
@ -22,29 +22,21 @@ my $i3 = i3(get_socket_path(0));
|
|||
cmd 'workspace targetws';
|
||||
|
||||
open_window(name => "testcase");
|
||||
|
||||
my $nodes = get_ws_content('targetws');
|
||||
is(scalar @$nodes, 1, 'precisely one window');
|
||||
is_num_children('targetws', 1, 'precisely one window');
|
||||
|
||||
open_window(name => "testcase");
|
||||
|
||||
$nodes = get_ws_content('targetws');
|
||||
is(scalar @$nodes, 2, 'precisely two windows');
|
||||
is_num_children('targetws', 2, 'precisely two windows');
|
||||
|
||||
cmd 'split v';
|
||||
|
||||
open_window(name => "testcase");
|
||||
|
||||
$nodes = get_ws_content('targetws');
|
||||
is(scalar @$nodes, 2, 'still two windows');
|
||||
is_num_children('targetws', 2, 'still two windows');
|
||||
|
||||
# focus parent. the new window should now be opened right next to the last one.
|
||||
cmd 'focus parent';
|
||||
|
||||
open_window(name => "testcase");
|
||||
|
||||
$nodes = get_ws_content('targetws');
|
||||
is(scalar @$nodes, 3, 'new window opened next to last one');
|
||||
is_num_children('targetws', 3, 'new window opened next to last one');
|
||||
|
||||
exit_gracefully($pid);
|
||||
|
||||
|
|
|
@ -45,8 +45,7 @@ my $win = open_window;
|
|||
my $scratch = open_special;
|
||||
cmd '[class="special"] move scratchpad';
|
||||
|
||||
my ($nodes, $focus) = get_ws_content($tmp);
|
||||
is(scalar @$nodes, 1, 'one window on current ws');
|
||||
is_num_children($tmp, 1, 'one window on current ws');
|
||||
|
||||
my $otmp = fresh_workspace;
|
||||
cmd 'scratchpad show';
|
||||
|
|
|
@ -25,18 +25,18 @@ my $i3 = i3(get_socket_path());
|
|||
sub verify_scratchpad_on_same_ws {
|
||||
my ($ws) = @_;
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($ws, 0, 'no nodes on this ws');
|
||||
|
||||
my $window = open_window;
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 1, 'one nodes on this ws');
|
||||
is_num_children($ws, 1, 'one nodes on this ws');
|
||||
|
||||
cmd 'move scratchpad';
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($ws, 0, 'no nodes on this ws');
|
||||
|
||||
cmd 'scratchpad show';
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($ws, 0, 'no nodes on this ws');
|
||||
is(scalar @{get_ws($ws)->{floating_nodes}}, 1, 'one floating node on this ws');
|
||||
}
|
||||
|
||||
|
@ -61,21 +61,21 @@ sub verify_scratchpad_switch {
|
|||
|
||||
cmd "workspace $first";
|
||||
|
||||
is(scalar @{get_ws($first)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($first, 0, 'no nodes on this ws');
|
||||
|
||||
my $window = open_window;
|
||||
|
||||
is(scalar @{get_ws($first)->{nodes}}, 1, 'one nodes on this ws');
|
||||
is_num_children($first, 1, 'one nodes on this ws');
|
||||
|
||||
cmd 'move scratchpad';
|
||||
|
||||
is(scalar @{get_ws($first)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($first, 0, 'no nodes on this ws');
|
||||
|
||||
cmd "workspace $second";
|
||||
|
||||
cmd 'scratchpad show';
|
||||
my $ws = get_ws($second);
|
||||
is(scalar @{$ws->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($second, 0, 'no nodes on this ws');
|
||||
is(scalar @{$ws->{floating_nodes}}, 1, 'one floating node on this ws');
|
||||
|
||||
# Verify that the coordinates are within bounds.
|
||||
|
|
|
@ -22,15 +22,13 @@ sync_with_i3;
|
|||
sub verify_scratchpad_doesnt_move {
|
||||
my ($ws) = @_;
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($ws, 0, 'no nodes on this ws');
|
||||
|
||||
my $window = open_window;
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 1, 'one nodes on this ws');
|
||||
is_num_children($ws, 1, 'one node on this ws');
|
||||
|
||||
cmd 'move scratchpad';
|
||||
|
||||
is(scalar @{get_ws($ws)->{nodes}}, 0, 'no nodes on this ws');
|
||||
is_num_children($ws, 0, 'no nodes on this ws');
|
||||
|
||||
my $last_x = -1;
|
||||
for (1 .. 20) {
|
||||
|
|
Loading…
Reference in New Issue