use default complete for re_lex
[protos/libecoli.git] / lib / ecoli_node_re_lex.c
index 14b3e46..252ebfd 100644 (file)
@@ -1,3 +1,7 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -10,6 +14,7 @@
 #include <ecoli_test.h>
 #include <ecoli_strvec.h>
 #include <ecoli_node.h>
+#include <ecoli_completed.h>
 #include <ecoli_parsed.h>
 #include <ecoli_node_many.h>
 #include <ecoli_node_or.h>
@@ -152,7 +157,7 @@ static void ec_node_re_lex_free_priv(struct ec_node *gen_node)
 static struct ec_node_type ec_node_re_lex_type = {
        .name = "re_lex",
        .parse = ec_node_re_lex_parse,
-       //.complete = ec_node_re_lex_complete, //XXX
+       .complete = ec_node_default_complete,
        .size = sizeof(struct ec_node_re_lex),
        .free_priv = ec_node_re_lex_free_priv,
 };
@@ -223,14 +228,14 @@ struct ec_node *ec_node_re_lex(const char *id, struct ec_node *child)
 static int ec_node_re_lex_testcase(void)
 {
        struct ec_node *node;
-       int ret = 0;
-
-       node = ec_node_re_lex(NULL,
-               ec_node_many(NULL,
-                       EC_NODE_OR(NULL,
-                               ec_node_str(NULL, "foo"),
-                               ec_node_str(NULL, "bar"),
-                               ec_node_int(NULL, 0, 1000, 0)
+       int ret, testres = 0;
+
+       node = ec_node_re_lex(EC_NO_ID,
+               ec_node_many(EC_NO_ID,
+                       EC_NODE_OR(EC_NO_ID,
+                               ec_node_str(EC_NO_ID, "foo"),
+                               ec_node_str(EC_NO_ID, "bar"),
+                               ec_node_int(EC_NO_ID, 0, 1000, 0)
                        ), 0, 0
                )
        );
@@ -239,27 +244,37 @@ static int ec_node_re_lex_testcase(void)
                return -1;
        }
 
-       /* XXX add ^ automatically ? */
-       ret |= ec_node_re_lex_add(node, "[a-zA-Z]+", 1);
-       ret |= ec_node_re_lex_add(node, "[0-9]+", 1);
-       ret |= ec_node_re_lex_add(node, "=", 1);
-       ret |= ec_node_re_lex_add(node, "-", 1);
-       ret |= ec_node_re_lex_add(node, "\\+", 1);
-       ret |= ec_node_re_lex_add(node, "[      ]+", 0);
+       ret = ec_node_re_lex_add(node, "[a-zA-Z]+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "[0-9]+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "=", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "-", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "\\+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "[       ]+", 0);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
        if (ret != 0) {
                EC_LOG(EC_LOG_ERR, "cannot add regexp to node\n");
                ec_node_free(node);
                return -1;
        }
 
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "  foo bar  324 bar234");
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "foo bar324");
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "");
-       ret |= EC_TEST_CHECK_PARSE(node, -1, "foobar");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "  foo bar  324 bar234");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "foo bar324");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "");
+       testres |= EC_TEST_CHECK_PARSE(node, -1, "foobar");
+
+       /* no completion */
+       testres |= EC_TEST_CHECK_COMPLETE(node,
+               "", EC_NODE_ENDLIST,
+               EC_NODE_ENDLIST);
 
        ec_node_free(node);
 
-       return ret;
+       return testres;
 }
 /* LCOV_EXCL_STOP */