]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - test.c
Moving all the global opts_ variables into a struct, now there's one global 'opts...
[xonotic/gmqcc.git] / test.c
diff --git a/test.c b/test.c
index ca1add20faef4cbd93296ce2e2589c2c6213866c..54fb2aaf3794d2fef6598b799ba6f933039fe5f6 100644 (file)
--- a/test.c
+++ b/test.c
@@ -25,8 +25,8 @@
 #include <sys/stat.h>
 #include <dirent.h>
 
-bool  opts_memchk = false;
-bool  opts_debug  = false;
+cmd_options opts;
+
 char *task_bins[] = {
     "./gmqcc",
     "./qcvm"
@@ -803,7 +803,7 @@ void task_destroy(const char *curdir) {
  * messages.
  */
 bool task_execute(task_template_t *template, char ***line) {
-    bool     success = false;
+    bool     success = true;
     FILE    *execute;
     char     buffer[4096];
     memset  (buffer,0,sizeof(buffer));
@@ -860,18 +860,18 @@ bool task_execute(task_template_t *template, char ***line) {
             if  (strrchr(data, '\n'))
                 *strrchr(data, '\n') = '\0';
 
-
-            /*
-             * We only care about the last line from the output for now
-             * implementing multi-line match is TODO.
-             */
-            success = !!!(strcmp(data, template->comparematch[compare++]));
+            if (strcmp(data, template->comparematch[compare++]))
+                success = false;
 
             /*
              * Copy to output vector for diagnostics if execution match
              * fails.
              */  
             vec_push(*line, data);
+
+            /* reset */
+            data = NULL;
+            size = 0;
         }
         mem_d(data);
         data = NULL;
@@ -892,6 +892,7 @@ void task_schedualize() {
     char **match    = NULL;
     size_t size     = 0;
     size_t i;
+    size_t j;
 
     util_debug("TEST", "found %d tasks, preparing to execute\n", vec_size(task_tasks));
 
@@ -901,8 +902,7 @@ void task_schedualize() {
          * Generate a task from thin air if it requires execution in
          * the QCVM.
          */
-        if (!strcmp(task_tasks[i].template->proceduretype, "-execute"))
-            execute = true;
+        execute = !!(!strcmp(task_tasks[i].template->proceduretype, "-execute"));
 
         /*
          * We assume it compiled before we actually compiled :).  On error
@@ -942,7 +942,7 @@ void task_schedualize() {
             fflush(task_tasks[i].stdoutlog);
         }
 
-        if (!execute) {
+        if (!task_tasks[i].compiled) {
             con_err("test failure: `%s` [%s] (failed to compile) see %s.stdout and %s.stderr\n",
                 task_tasks[i].template->description,
                 (task_tasks[i].template->failuremessage) ?
@@ -952,6 +952,16 @@ void task_schedualize() {
             );
             continue;
         }
+
+        if (!execute) {
+            con_out("test succeeded: `%s` [%s]\n",
+                 task_tasks[i].template->description,
+                (task_tasks[i].template->successmessage) ?
+                 task_tasks[i].template->successmessage  : "unknown"
+            );
+            continue;
+        }
+
         /*
          * If we made it here that concludes the task is to be executed
          * in the virtual machine.
@@ -980,9 +990,14 @@ void task_schedualize() {
                     con_err(" ");
                 con_err("| Got: \"%s\"\n", (d >= vec_size(match)) ? "<<nothing else to compare>>" : match[d]);
             }
+            for (j = 0; j < vec_size(match); j++)
+                mem_d(match[j]);
             vec_free(match);
             continue;
         }
+        for (j = 0; j < vec_size(match); j++)
+            mem_d(match[j]);
+        vec_free(match);
 
         con_out("test succeeded: `%s` [%s]\n",
              task_tasks[i].template->description,
@@ -1080,11 +1095,11 @@ int main(int argc, char **argv) {
             con_change(redirout, redirerr);
 
             if (!strcmp(argv[0]+1, "debug")) {
-                opts_debug = true;
+                opts.debug = true;
                 continue;
             }
             if (!strcmp(argv[0]+1, "memchk")) {
-                opts_memchk = true;
+                opts.memchk = true;
                 continue;
             }
             if (!strcmp(argv[0]+1, "nocolor")) {