]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
More preprocessor testsuite support and our first preprocessor test!
authorDale Weiler <killfieldengine@gmail.com>
Sun, 21 Apr 2013 06:36:52 +0000 (06:36 +0000)
committerDale Weiler <killfieldengine@gmail.com>
Sun, 21 Apr 2013 06:36:52 +0000 (06:36 +0000)
test.c
tests/ppcat.qc [new file with mode: 0644]
tests/ppcat.tmpl [new file with mode: 0644]

diff --git a/test.c b/test.c
index 0ee3095ce709eb2fe78b39ac524fa1e828aa8e92..8247734f67bb7764afbcca6f97c15952367a7c01 100644 (file)
--- a/test.c
+++ b/test.c
@@ -568,7 +568,7 @@ task_template_t *task_template_compile(const char *file, const char *dir, size_t
         if (tmpl->comparematch)
             con_err("template compile warning: %s erroneous tag `M:` when only failing\n", file);
     } else if (!strcmp(tmpl->proceduretype, "-pp")) {
-        if (!tmpl->executeflags)
+        if (tmpl->executeflags)
             con_err("template compile warning: %s erroneous tag `E:` when only preprocessing\n", file);
         if (!tmpl->comparematch) {
             con_err("template compile error: %s missing `M:` tag (use `$null` for exclude)\n", file);
@@ -955,6 +955,13 @@ bool task_trymatch(task_template_t *tmpl, char ***line) {
             if  (strrchr(data, '\n'))
                 *strrchr(data, '\n') = '\0';
 
+            /*
+             * If data is just null now, that means the line was an empty
+             * one and for that, we just ignore it.
+             */
+            if (!*data)
+                continue;
+
             if (vec_size(tmpl->comparematch) > compare) {
                 if (strcmp(data, tmpl->comparematch[compare++]))
                     success = false;
@@ -986,12 +993,12 @@ bool task_trymatch(task_template_t *tmpl, char ***line) {
 
 const char *task_type(task_template_t *tmpl) {
     if (!strcmp(tmpl->proceduretype, "-pp"))
-        return "type: preprocessor test";
+        return "type: preprocessor";
     if (!strcmp(tmpl->proceduretype, "-execute"))
-        return "type: execution test";
+        return "type: execution";
     if (!strcmp(tmpl->proceduretype, "-compile"))
-        return "type: compile test";
-    return "type: fail test";
+        return "type: compile";
+    return "type: fail";
 }
 
 /*
@@ -1085,13 +1092,17 @@ void task_schedualize(size_t *pad) {
 
         /*
          * If we made it here that concludes the task is to be executed
-         * in the virtual machine.
+         * in the virtual machine (or the preprocessor output needs to
+         * be matched). 
          */
         if (!task_trymatch(task_tasks[i].tmpl, &match)) {
             size_t d = 0;
 
-            con_err("failure: `%s` (invalid results from execution) [%s]\n",
+            con_err("failure: `%s` (invalid results from %s) [%s]\n",
                 task_tasks[i].tmpl->description,
+                (strcmp(task_tasks[i].tmpl->proceduretype, "-pp"))
+                    ? "execution"
+                    : "preprocessing",
                 task_tasks[i].tmpl->rulesfile
             );
 
diff --git a/tests/ppcat.qc b/tests/ppcat.qc
new file mode 100644 (file)
index 0000000..2056632
--- /dev/null
@@ -0,0 +1,2 @@
+#define CAT(X, Y) X##Y
+CAT(hello, world)
diff --git a/tests/ppcat.tmpl b/tests/ppcat.tmpl
new file mode 100644 (file)
index 0000000..8f28fdb
--- /dev/null
@@ -0,0 +1,6 @@
+I: ppcat.qc
+D: test preprocessor concatenation
+T: -pp
+C: -std=gmqcc
+M: helloworld
+F: -no-defs