src/server/test/object.c

changeset 435
713ec3da79ec
parent 424
3df9258cd3cc
child 452
ce359a2b51fe
--- a/src/server/test/object.c	Wed Nov 16 12:14:45 2022 +0100
+++ b/src/server/test/object.c	Sun Nov 20 11:39:46 2022 +0100
@@ -351,6 +351,7 @@
     NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
     
     UCX_TEST_ASSERT(pos == 9, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
     UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_EQ, "root: wrong operator");
     UCX_TEST_ASSERT(expr->left, "missing left expression");
     UCX_TEST_ASSERT(expr->right, "missing right expression");
@@ -366,3 +367,243 @@
     
     pool_destroy(pool);
 }
+
+UCX_TEST(test_expr_parse_expr_func_arg0) {
+    pool_handle_t *pool = pool_create();
+    
+    CxList *tokens = cxLinkedListCreate(pool_allocator(pool), cx_cmp_ptr, sizeof(cxstring));
+    cxstring token = cx_str("test");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    
+    UCX_TEST_BEGIN;
+    
+    size_t pos = 0;
+    NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
+    
+    UCX_TEST_ASSERT(pos == 3, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
+    UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type");
+    UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator");
+    UCX_TEST_ASSERT(!expr->left, "left is not null");
+    UCX_TEST_ASSERT(!expr->right, "right is not null");
+    
+    UCX_TEST_END;
+    
+    pool_destroy(pool);
+}
+
+
+int test_get_args(NSAPIExpression *arglist, size_t maxArgs, size_t *numArgs, NSAPIExpression *arg) {
+    if(!arg) {
+        return 0;
+    }
+    if(arg->operator == NSAPI_EXPRESSION_ARG) {
+        if(arg->left) {
+            if(test_get_args(arglist, maxArgs, numArgs, arg->left)) {
+                return 1;
+            }
+        }
+        if(arg->right) {
+            if(test_get_args(arglist, maxArgs, numArgs, arg->right)) {
+                return 1;
+            }
+        }
+    } else {
+        if(*numArgs >= maxArgs) {
+            return 1;
+        }
+        arglist[*numArgs] = *arg;
+        (*numArgs)++;
+    } 
+    
+    return 0;
+}
+
+
+UCX_TEST(test_expr_parse_expr_func_arg1) {
+    pool_handle_t *pool = pool_create();
+    
+    CxList *tokens = cxLinkedListCreate(pool_allocator(pool), cx_cmp_ptr, sizeof(cxstring));
+    cxstring token = cx_str("test");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str("1");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    
+    UCX_TEST_BEGIN;
+    
+    size_t pos = 0;
+    NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
+    
+    UCX_TEST_ASSERT(pos == tokens->size, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
+    UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type");
+    UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator");
+    
+    size_t numArgs = 0;
+    NSAPIExpression args[8];
+    int err = test_get_args(args, 8, &numArgs, expr->left);
+    UCX_TEST_ASSERT(err == 0, "too much args");
+    UCX_TEST_ASSERT(numArgs == 1, "wrong arg count");
+    UCX_TEST_ASSERT(args[0].value.i == 1, "wrong arg value");
+    
+    UCX_TEST_END;
+    
+    pool_destroy(pool);
+}
+
+UCX_TEST(test_expr_parse_expr_func_arg3) {
+    pool_handle_t *pool = pool_create();
+    
+    CxList *tokens = cxLinkedListCreate(pool_allocator(pool), cx_cmp_ptr, sizeof(cxstring));
+    cxstring token = cx_str("test");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str("1");
+    cxListAdd(tokens, &token);
+    token = cx_str(",");
+    cxListAdd(tokens, &token);
+    token = cx_str("2");
+    cxListAdd(tokens, &token);
+    token = cx_str(",");
+    cxListAdd(tokens, &token);
+    token = cx_str("3");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    
+    UCX_TEST_BEGIN;
+    
+    size_t pos = 0;
+    NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
+    
+    UCX_TEST_ASSERT(pos == tokens->size, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
+    UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type");
+    UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator");
+    
+    size_t numArgs = 0;
+    NSAPIExpression args[8];
+    int err = test_get_args(args, 8, &numArgs, expr->left);
+    UCX_TEST_ASSERT(err == 0, "too much args");
+    UCX_TEST_ASSERT(numArgs == 3, "wrong arg count");
+    UCX_TEST_ASSERT(args[0].value.i == 1, "arg0: wrong value");
+    UCX_TEST_ASSERT(args[1].value.i == 2, "arg1: wrong value");
+    UCX_TEST_ASSERT(args[2].value.i == 3, "arg2: wrong value");
+    
+    UCX_TEST_END;
+    
+    pool_destroy(pool);
+}
+
+UCX_TEST(test_expr_parse_expr_func_expr1) {
+    pool_handle_t *pool = pool_create();
+    
+    CxList *tokens = cxLinkedListCreate(pool_allocator(pool), cx_cmp_ptr, sizeof(cxstring));
+    cxstring token = cx_str("test");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str("1");
+    cxListAdd(tokens, &token);
+    token = cx_str(",");
+    cxListAdd(tokens, &token);
+    token = cx_str("2");
+    cxListAdd(tokens, &token);
+    token = cx_str("+");
+    cxListAdd(tokens, &token);
+    token = cx_str("3");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    
+    UCX_TEST_BEGIN;
+    
+    size_t pos = 0;
+    NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
+    
+    UCX_TEST_ASSERT(pos == tokens->size, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
+    UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type");
+    UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator");
+    
+    size_t numArgs = 0;
+    NSAPIExpression args[8];
+    int err = test_get_args(args, 8, &numArgs, expr->left);
+    UCX_TEST_ASSERT(err == 0, "too much args");
+    UCX_TEST_ASSERT(numArgs == 2, "wrong arg count");
+    UCX_TEST_ASSERT(args[0].value.i == 1, "arg0: wrong value");
+    UCX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_ADD, "arg1: wrong operator");
+    UCX_TEST_ASSERT(args[1].left && args[1].right, "arg1: missing operator values");
+    UCX_TEST_ASSERT(args[1].left->value.i == 2 && args[1].right->value.i == 3, "arg1: wrong operator values");
+    
+    UCX_TEST_END;
+    
+    pool_destroy(pool);
+}
+
+UCX_TEST(test_expr_parse_expr_func_expr2) {
+    pool_handle_t *pool = pool_create();
+    
+    CxList *tokens = cxLinkedListCreate(pool_allocator(pool), cx_cmp_ptr, sizeof(cxstring));
+    cxstring token = cx_str("test");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str("2");
+    cxListAdd(tokens, &token);
+    token = cx_str("+");
+    cxListAdd(tokens, &token);
+    token = cx_str("3");
+    cxListAdd(tokens, &token);
+    token = cx_str(",");
+    cxListAdd(tokens, &token);
+    token = cx_str("sub");
+    cxListAdd(tokens, &token);
+    token = cx_str("(");
+    cxListAdd(tokens, &token);
+    token = cx_str("4");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    token = cx_str(",");
+    cxListAdd(tokens, &token);
+    token = cx_str("6");
+    cxListAdd(tokens, &token);
+    token = cx_str(")");
+    cxListAdd(tokens, &token);
+    
+    UCX_TEST_BEGIN;
+    
+    size_t pos = 0;
+    NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos);
+    
+    UCX_TEST_ASSERT(pos == tokens->size, "wrong token pos");
+    UCX_TEST_ASSERT(expr, "expression is null");
+    UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type");
+    UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator");
+    
+    size_t numArgs = 0;
+    NSAPIExpression args[8];
+    int err = test_get_args(args, 8, &numArgs, expr->left);
+    UCX_TEST_ASSERT(err == 0, "too much args");
+    UCX_TEST_ASSERT(numArgs == 3, "wrong arg count");
+    UCX_TEST_ASSERT(args[0].operator == NSAPI_EXPRESSION_ADD, "arg0: wrong operator");
+    UCX_TEST_ASSERT(args[0].left && args[0].right, "arg0: missing operator values");
+    UCX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_CALL, "arg1: wrong operator");
+    UCX_TEST_ASSERT(args[1].left, "arg1: missing args");
+    UCX_TEST_ASSERT(args[2].type == NSAPI_EXPRESSION_INT, "arg2: wrong type");
+    UCX_TEST_ASSERT(args[2].value.i == 6, "arg2: wrong value");
+    
+    UCX_TEST_END;
+    
+    pool_destroy(pool);
+}

mercurial