add tests for wm_treenode_remove_client

This commit is contained in:
Akos Horvath 2023-12-29 20:38:00 +01:00
parent 3742a49f32
commit 653b5112ba

View File

@ -1,4 +1,6 @@
#include "util.h"
#include "client.h"
#include "wm.h"
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
@ -173,6 +175,114 @@ static void test_wm_find_client_nodes(void **state)
wm_nodearray_free(client_nodes);
}
static void test_wm_treenode_remove_client1(void **state)
{
TreeNode *root = wm_treenode_new(NODE_VERTICAL, NULL);
TreeNode *parent_node1 = wm_treenode_new(NODE_VERTICAL, root);
TreeNode *parent_node2 = wm_treenode_new(NODE_HORIZONTAL, root);
TreeNode *client_node1 = wm_treenode_new(NODE_CLIENT, parent_node1);
TreeNode *client_node2 = wm_treenode_new(NODE_CLIENT, parent_node1);
TreeNode *client_node3 = wm_treenode_new(NODE_CLIENT, parent_node2);
TreeNode *client_node4 = wm_treenode_new(NODE_CLIENT, parent_node2);
wm_nodearray_push(root->children, parent_node1);
wm_nodearray_push(root->children, parent_node2);
wm_nodearray_push(parent_node1->children, client_node1);
wm_nodearray_push(parent_node1->children, client_node2);
wm_nodearray_push(parent_node2->children, client_node3);
wm_nodearray_push(parent_node2->children, client_node4);
Workspace ws = (Workspace) {
.tree = root,
.monitor = &(Monitor) {0},
};
Client client1 = (Client) {.ws = &ws, .name = ""};
Client client2 = (Client) {.ws = &ws, .name = ""};
Client client3 = (Client) {.ws = &ws, .name = ""};
Client client4 = (Client) {.ws = &ws, .name = ""};
client_node1->client = &client1;
client_node2->client = &client2;
client_node3->client = &client3;
client_node4->client = &client4;
root->pos.x = 0;
root->pos.y = 0;
root->pos.w = 1000;
root->pos.w = 1000;
wm_treenode_split_space(root, &parent_node1->pos, &parent_node2->pos);
wm_treenode_split_space(parent_node1, &client_node1->pos, &client_node2->pos);
wm_treenode_split_space(parent_node2, &client_node3->pos, &client_node4->pos);
TreeNode *new_client_node = wm_treenode_remove_client(&(Wm) {0}, root, &client4);
assert_ptr_equal(new_client_node, parent_node2);
assert_int_equal(parent_node2->type, NODE_CLIENT);
assert_ptr_equal(parent_node2->client, &client3);
assert_int_equal(parent_node2->children->size, 0);
wm_treenode_free(root);
wm_treenode_free(parent_node1);
wm_treenode_free(parent_node2);
wm_treenode_free(client_node1);
wm_treenode_free(client_node2);
}
static void test_wm_treenode_remove_client2(void **state)
{
TreeNode *root = wm_treenode_new(NODE_VERTICAL, NULL);
TreeNode *parent_node1 = wm_treenode_new(NODE_VERTICAL, root);
TreeNode *client_node1 = wm_treenode_new(NODE_CLIENT, root);
TreeNode *client_node2 = wm_treenode_new(NODE_CLIENT, parent_node1);
TreeNode *client_node3 = wm_treenode_new(NODE_CLIENT, parent_node1);
TreeNode parent_node1_val = *parent_node1;
wm_nodearray_push(root->children, parent_node1);
wm_nodearray_push(root->children, client_node1);
wm_nodearray_push(parent_node1->children, client_node2);
wm_nodearray_push(parent_node1->children, client_node3);
Workspace ws = (Workspace) {
.tree = root,
.monitor = &(Monitor) {0},
};
Client client1 = (Client) {.ws = &ws, .name = ""};
Client client2 = (Client) {.ws = &ws, .name = ""};
Client client3 = (Client) {.ws = &ws, .name = ""};
client_node1->client = &client1;
client_node2->client = &client2;
client_node3->client = &client3;
root->pos.x = 0;
root->pos.y = 0;
root->pos.w = 1000;
root->pos.w = 1000;
wm_treenode_split_space(root, &parent_node1->pos, &client_node1->pos);
wm_treenode_split_space(parent_node1, &client_node2->pos, &client_node3->pos);
TreeNode *new_client_node = wm_treenode_remove_client(&(Wm) {0}, root, &client1);
assert_ptr_equal(new_client_node, client_node2);
assert_int_equal(root->id, parent_node1_val.id);
assert_ptr_equal(root->children, parent_node1_val.children);
assert_int_equal(root->children->size, 2);
assert_ptr_equal(root->children->nodes[0], client_node2);
assert_ptr_equal(root->children->nodes[1], client_node3);
assert_ptr_equal(client_node2->parent, root);
assert_ptr_equal(client_node3->parent, root);
wm_treenode_free(root);
wm_treenode_free(client_node2);
wm_treenode_free(client_node3);
}
static void test_wm_postorder_traversal(void **state)
{
TreeNode *node1 = (TreeNode*)*state;
@ -372,6 +482,8 @@ int main(void)
cmocka_unit_test(test_wm_treenode_split_space),
cmocka_unit_test(test_wm_all_nodes_to_array),
cmocka_unit_test(test_wm_find_client_nodes),
cmocka_unit_test(test_wm_treenode_remove_client1),
cmocka_unit_test(test_wm_treenode_remove_client2),
};
const struct CMUnitTest test_group2[] = {