save
[protos/libecoli.git] / lib / ecoli_node_cmd.c
index f6afbd2..9a6c4eb 100644 (file)
@@ -38,6 +38,9 @@
 #include <ecoli_log.h>
 #include <ecoli_test.h>
 #include <ecoli_strvec.h>
+#include <ecoli_node.h>
+#include <ecoli_parsed.h>
+#include <ecoli_completed.h>
 #include <ecoli_node_expr.h>
 #include <ecoli_node_str.h>
 #include <ecoli_node_or.h>
@@ -271,6 +274,8 @@ static int ec_node_cmd_build(struct ec_node *gen_node)
        void *result;
        int ret;
 
+       /* XXX the expr parser can be moved in the node init */
+
        /* build the expression parser */
        ret = -ENOMEM;
        expr = ec_node("expr", "expr");
@@ -352,6 +357,7 @@ static int ec_node_cmd_build(struct ec_node *gen_node)
                        goto fail;
        }
        ec_parsed_free(p);
+       p = NULL;
        ec_node_dump(stdout, cmd);
 
        ec_node_free(node->expr);
@@ -364,6 +370,7 @@ static int ec_node_cmd_build(struct ec_node *gen_node)
        return 0;
 
 fail:
+       ec_parsed_free(p);
        ec_node_free(expr);
        ec_node_free(lex);
        ec_node_free(cmd);
@@ -493,6 +500,15 @@ static int ec_node_cmd_testcase(void)
        ret |= EC_TEST_CHECK_PARSE(node, -1, "foo");
        ec_node_free(node);
 
+       node = EC_NODE_CMD(NULL, "good morning bob|bobby|michael [count]",
+                       ec_node_int("count", 0, 10, 10));
+       if (node == NULL) {
+               ec_log(EC_LOG_ERR, "cannot create node\n");
+               return -1;
+       }
+       ret |= EC_TEST_CHECK_PARSE(node, 4, "good", "morning", "bob", "1");
+       ec_node_free(node);
+
        // XXX completion
 
        return ret;