From 653b5112ba2251566e157379aeff254109a6d180 Mon Sep 17 00:00:00 2001 From: Akos Horvath Date: Fri, 29 Dec 2023 20:38:00 +0100 Subject: [PATCH] add tests for wm_treenode_remove_client --- src/tests.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/tests.c b/src/tests.c index 07c5721..be6d22f 100644 --- a/src/tests.c +++ b/src/tests.c @@ -1,4 +1,6 @@ #include "util.h" +#include "client.h" +#include "wm.h" #include #include #include @@ -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[] = {