]> git.sur5r.net Git - i3/i3/blob - testcases/t/16-nestedcons.t
Merge branch 'tree' into next
[i3/i3] / testcases / t / 16-nestedcons.t
1 #!perl
2 # vim:ts=4:sw=4:expandtab
3
4 use i3test;
5 use List::MoreUtils qw(all none);
6 use List::Util qw(first);
7
8 my $i3 = i3(get_socket_path());
9
10 ####################
11 # Request tree
12 ####################
13
14 my $tree = $i3->get_tree->recv;
15
16 my $expected = {
17     fullscreen_mode => 0,
18     nodes => ignore(),
19     window => undef,
20     name => 'root',
21     orientation => ignore(),
22     type => 0,
23     id => ignore(),
24     rect => ignore(),
25     window_rect => ignore(),
26     geometry => ignore(),
27     swallows => ignore(),
28     percent => undef,
29     layout => 'default',
30     focus => ignore(),
31     focused => JSON::XS::false,
32     urgent => JSON::XS::false,
33     border => 'normal',
34     'floating_nodes' => ignore(),
35 };
36
37 cmp_deeply($tree, $expected, 'root node OK');
38
39 my @nodes = @{$tree->{nodes}};
40
41 ok(@nodes > 0, 'root node has at least one leaf');
42
43 ok((all { $_->{type} == 1 } @nodes), 'all nodes are of type CT_OUTPUT');
44 ok((none { defined($_->{window}) } @nodes), 'no CT_OUTPUT contains a window');
45 ok((all { @{$_->{nodes}} > 0 } @nodes), 'all nodes have at least one leaf (workspace)');
46 my @workspaces;
47 for my $ws (@nodes) {
48     my $content = first { $_->{type} == 2 } @{$ws->{nodes}};
49     @workspaces = (@workspaces, @{$content->{nodes}});
50 }
51
52 ok((all { $_->{type} == 4 } @workspaces), 'all workspaces are of type CT_WORKSPACE');
53 #ok((all { @{$_->{nodes}} == 0 } @workspaces), 'all workspaces are empty yet');
54 ok((none { defined($_->{window}) } @workspaces), 'no CT_OUTPUT contains a window');
55
56 # TODO: get the focused container
57
58 $i3->command('open')->recv;
59
60 # TODO: get the focused container, check if it changed.
61 # TODO: get the old focused container, check if there is a new child
62
63 #diag(Dumper(\@workspaces));
64
65 #diag(Dumper($tree));
66
67
68 done_testing;