]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
Remove user-defined success/failure messages for the testsuite. Instead print an...
authorDale Weiler <killfieldengine@gmail.com>
Sun, 27 Jan 2013 08:39:42 +0000 (08:39 +0000)
committerDale Weiler <killfieldengine@gmail.com>
Sun, 27 Jan 2013 08:39:42 +0000 (08:39 +0000)
12 files changed:
test.c
tests/builtin.tmpl
tests/calls.tmpl
tests/equality.tmpl
tests/fieldparams.tmpl
tests/functions-as-params.tmpl
tests/goto.tmpl
tests/ifs.tmpl
tests/ngraphs.tmpl
tests/param8.tmpl
tests/pmacros.tmpl
tests/variadic.tmpl

diff --git a/test.c b/test.c
index 8c8a80ec68600a432480d11711418f42f77550f2..eed80ef88186cfb820e9ca8baef389dc42827021 100644 (file)
--- a/test.c
+++ b/test.c
@@ -294,14 +294,6 @@ int task_pclose(FILE **handles) {
  *          Used to set a description of the current test, this must be
  *          provided, this tag is NOT optional.
  *
- *      F:
- *          Used to set a failure message, this message will be displayed
- *          if the test fails, this tag is optional
- *
- *      S:
- *          Used to set a success message, this message will be displayed
- *          if the test succeeds, this tag is optional.
- *
  *      T:
  *          Used to set the procedure for the given task, there are two
  *          options for this:
@@ -351,21 +343,21 @@ int task_pclose(FILE **handles) {
  */
 typedef struct {
     char  *description;
-    char  *failuremessage;
-    char  *successmessage;
     char  *compileflags;
     char  *executeflags;
     char  *proceduretype;
     char  *sourcefile;
     char  *tempfilename;
     char **comparematch;
+    char  *rulesfile;
 } task_template_t;
 
 /*
  * This is very much like a compiler code generator :-).  This generates
  * a value from some data observed from the compiler.
  */
-bool task_template_generate(task_template_t *template, char tag, const char *file, size_t line, const char *value) {
+bool task_template_generate(task_template_t *template, char tag, const char *file, size_t line, const char *value, size_t *pad) {
+    size_t desclen = 0;
     char **destval = NULL;
 
     if (!template)
@@ -373,8 +365,6 @@ bool task_template_generate(task_template_t *template, char tag, const char *fil
 
     switch(tag) {
         case 'D': destval = &template->description;    break;
-        case 'F': destval = &template->failuremessage; break;
-        case 'S': destval = &template->successmessage; break;
         case 'T': destval = &template->proceduretype;  break;
         case 'C': destval = &template->compileflags;   break;
         case 'E': destval = &template->executeflags;   break;
@@ -421,10 +411,20 @@ bool task_template_generate(task_template_t *template, char tag, const char *fil
      */
     *destval = util_strdup(value);
 
+
+    if (*destval == template->description) {
+        /*
+         * Create some padding for the description to align the
+         * printing of the rules file.
+         */  
+        if ((desclen = strlen(template->description)) > pad[0])
+            pad[0] = desclen;
+    }
+
     return true;
 }
 
-bool task_template_parse(const char *file, task_template_t *template, FILE *fp) {
+bool task_template_parse(const char *file, task_template_t *template, FILE *fp, size_t *pad) {
     char  *data = NULL;
     char  *back = NULL;
     size_t size = 0;
@@ -471,8 +471,6 @@ bool task_template_parse(const char *file, task_template_t *template, FILE *fp)
              * it to.
              */
             case 'D':
-            case 'F':
-            case 'S':
             case 'T':
             case 'C':
             case 'E':
@@ -484,7 +482,7 @@ bool task_template_parse(const char *file, task_template_t *template, FILE *fp)
                     );
                     goto failure;
                 }
-                if (!task_template_generate(template, *data, file, line, &data[3])) {
+                if (!task_template_generate(template, *data, file, line, &data[3], pad)) {
                     con_printmsg(LVL_ERROR, file, line, "template compile error",
                         "failed to generate for given task\n"
                     );
@@ -556,29 +554,38 @@ void task_template_nullify(task_template_t *template) {
         return;
 
     template->description    = NULL;
-    template->failuremessage = NULL;
-    template->successmessage = NULL;
     template->proceduretype  = NULL;
     template->compileflags   = NULL;
     template->executeflags   = NULL;
     template->comparematch   = NULL;
     template->sourcefile     = NULL;
     template->tempfilename   = NULL;
+    template->rulesfile      = NULL;
 }
 
-task_template_t *task_template_compile(const char *file, const char *dir) {
+task_template_t *task_template_compile(const char *file, const char *dir, size_t *pad) {
     /* a page should be enough */
     char             fullfile[4096];
+    size_t           filepadd = 0;
     FILE            *tempfile = NULL;
     task_template_t *template = NULL;
 
     memset  (fullfile, 0, sizeof(fullfile));
     snprintf(fullfile,    sizeof(fullfile), "%s/%s", dir, file);
 
-    tempfile = file_open(fullfile, "r");
-    template = mem_a(sizeof(task_template_t));
+    tempfile            = file_open(fullfile, "r");
+    template            = mem_a(sizeof(task_template_t));
     task_template_nullify(template);
 
+    /*
+     * Create some padding for the printing to align the
+     * printing of the rules file to the console.
+     */  
+    if ((filepadd = strlen(fullfile)) > pad[1])
+        pad[1] = filepadd;
+
+    template->rulesfile = util_strdup(fullfile);
+
     /*
      * Esnure the file even exists for the task, this is pretty useless
      * to even do.
@@ -590,7 +597,7 @@ task_template_t *task_template_compile(const char *file, const char *dir) {
         goto failure;
     }
 
-    if (!task_template_parse(file, template, tempfile)) {
+    if (!task_template_parse(file, template, tempfile, pad)) {
         con_err("template parse error: error during parsing\n");
         goto failure;
     }
@@ -670,12 +677,11 @@ void task_template_destroy(task_template_t **template) {
         return;
 
     if ((*template)->description)    mem_d((*template)->description);
-    if ((*template)->failuremessage) mem_d((*template)->failuremessage);
-    if ((*template)->successmessage) mem_d((*template)->successmessage);
     if ((*template)->proceduretype)  mem_d((*template)->proceduretype);
     if ((*template)->compileflags)   mem_d((*template)->compileflags);
     if ((*template)->executeflags)   mem_d((*template)->executeflags);
     if ((*template)->sourcefile)     mem_d((*template)->sourcefile);
+    if ((*template)->rulesfile)      mem_d((*template)->rulesfile);
 
     /*
      * Delete all allocated string for task template then destroy the
@@ -716,7 +722,7 @@ task_t *task_tasks = NULL;
  * Read a directory and searches for all template files in it
  * which is later used to run all tests.
  */
-bool task_propagate(const char *curdir) {
+bool task_propagate(const char *curdir, size_t *pad) {
     bool             success = true;
     DIR             *dir;
     struct dirent   *files;
@@ -744,7 +750,7 @@ bool task_propagate(const char *curdir) {
          * actually a directory, so it must be a file :)
          */
         if (strcmp(files->d_name + strlen(files->d_name) - 5, ".tmpl") == 0) {
-            task_template_t *template = task_template_compile(files->d_name, curdir);
+            task_template_t *template = task_template_compile(files->d_name, curdir, pad);
             char             buf[4096]; /* one page should be enough */
             char            *qcflags = NULL;
             task_t           task;
@@ -958,10 +964,9 @@ bool task_execute(task_template_t *template, char ***line) {
         size_t compare = 0;
         while (file_getline(&data, &size, execute) != EOF) {
             if (!strcmp(data, "No main function found\n")) {
-                con_err("test failure: `%s` [%s] (No main function found)\n",
+                con_err("test failure: `%s` (No main function found) [%s]\n",
                     template->description,
-                    (template->failuremessage) ?
-                    template->failuremessage : "unknown"
+                    template->rulesfile
                 );
                 pclose(execute);
                 return false;
@@ -1004,7 +1009,7 @@ bool task_execute(task_template_t *template, char ***line) {
  * execution this takes more work since a task needs to be generated
  * from thin air and executed INLINE.
  */
-void task_schedualize() {
+void task_schedualize(size_t *pad) {
     bool   execute  = false;
     char  *data     = NULL;
     char **match    = NULL;
@@ -1061,21 +1066,22 @@ void task_schedualize() {
         }
 
         if (!task_tasks[i].compiled && strcmp(task_tasks[i].template->proceduretype, "-fail")) {
-            con_err("test failure: `%s` [%s] (failed to compile) see %s.stdout and %s.stderr\n",
+            con_err("test failure: `%s` (failed to compile) see %s.stdout and %s.stderr [%s]\n",
                 task_tasks[i].template->description,
-                (task_tasks[i].template->failuremessage) ?
-                task_tasks[i].template->failuremessage : "unknown",
                 task_tasks[i].template->tempfilename,
-                task_tasks[i].template->tempfilename
+                task_tasks[i].template->tempfilename,
+                task_tasks[i].template->rulesfile
             );
             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"
+            con_out("test succeeded: `%s` %*s\n",
+                task_tasks[i].template->description,
+                (pad[0] + pad[1] - strlen(task_tasks[i].template->description)) +
+                (strlen(task_tasks[i].template->rulesfile) - pad[1]),
+                task_tasks[i].template->rulesfile
+                
             );
             continue;
         }
@@ -1087,10 +1093,9 @@ void task_schedualize() {
         if (!task_execute(task_tasks[i].template, &match)) {
             size_t d = 0;
 
-            con_err("test failure: `%s` [%s] (invalid results from execution)\n",
-                 task_tasks[i].template->description,
-                (task_tasks[i].template->failuremessage) ?
-                 task_tasks[i].template->failuremessage : "unknown"
+            con_err("test failure: `%s` (invalid results from execution) [%s]\n",
+                task_tasks[i].template->description,
+                task_tasks[i].template->rulesfile
             );
 
             /*
@@ -1135,10 +1140,12 @@ void task_schedualize() {
             mem_d(match[j]);
         vec_free(match);
 
-        con_out("test succeeded: `%s` [%s]\n",
-             task_tasks[i].template->description,
-            (task_tasks[i].template->successmessage) ?
-             task_tasks[i].template->successmessage  : "unknown"
+        con_out("test succeeded: `%s` %*s\n",
+            task_tasks[i].template->description,
+            (pad[0] + pad[1] - strlen(task_tasks[i].template->description)) +
+            (strlen(task_tasks[i].template->rulesfile) - pad[1]),
+            task_tasks[i].template->rulesfile
+            
         );
     }
     mem_d(data);
@@ -1159,8 +1166,12 @@ void task_schedualize() {
  * It expects con_init() was called before hand.
  */
 bool test_perform(const char *curdir) {
+    size_t pad[] = {
+        0, 0
+    };
+
     task_precleanup(curdir);
-    if (!task_propagate(curdir)) {
+    if (!task_propagate(curdir, pad)) {
         con_err("error: failed to propagate tasks\n");
         task_destroy();
         return false;
@@ -1172,7 +1183,7 @@ bool test_perform(const char *curdir) {
      * it's designed to prevent lock contention, and possible syncronization
      * issues.
      */
-    task_schedualize();
+    task_schedualize(pad);
     task_destroy();
 
     return true;
index d81cad92e6ebac62195b832c5d19048316484b62..cc14cafdd3ddc596376ebe11570291a2c644896f 100644 (file)
@@ -4,6 +4,4 @@ D: test builtin functions
 T: -execute
 C: -std=gmqcc
 E: $null
-F: builtins failed
-S: builtins worked
 M: hello world
index 3c551af2e506e7575532149272fc6aa020c85378..c159aa2ab38cd88bcbca11a9b2d0b0ca976678b2 100644 (file)
@@ -3,6 +3,4 @@ D: test calls
 T: -execute
 C: -std=gmqcc
 E: -float 100 -float 200 -float 300
-F: calls failed
-S: calls worked
 M: 4600
index 18c3750bb08806576260eb03ca9fe6fd9c496098..536e18fbd60facb49f1eb097fe7c502b721970e1 100644 (file)
@@ -3,6 +3,4 @@ D: test equality
 T: -execute
 C: -std=gmqcc
 E: -float 100 -float 200
-F: equality failed
-S: equality worked
 M: ne,lt,le,
index 5e1af6eaef94864685fa2af69fd0096863736b0c..e49ee6a8e261e9bcd7a64e36876f911318a67395 100644 (file)
@@ -3,7 +3,5 @@ D: test field paramaters
 T: -execute
 C: -std=qcc
 E: $null
-F: field paramaters fail
-S: field paramaters work
 M: bar
 M: foo
index 2c4504c91e33c8c969b5f17c5045963786049faa..495e7b8bc0c90e02a2017079b848ad0aa192eb94 100644 (file)
@@ -3,6 +3,4 @@ D: test functions as paramaters
 T: -execute
 C: -std=gmqcc
 E: $null
-F: functions as paramaters failed
-S: functions as paramaters passed
 M: correct
index 4acf179c469c9bbb01ddfe825f778619a8074ccd..a935bd835469e211c45bdd79e8dc2f24a203d20f 100644 (file)
@@ -2,8 +2,6 @@ I: goto.qc
 D: test goto (both normal and computed)
 T: -execute
 C: -std=gmqcc
-F: goto failed
-S: goto worked
 M: label_3
 M: label_2
 M: label_4
index 8ba64e372c48b04c1ab300f1f0a94333300e5c27..c587ba5f2a74739e1b33c53ee99d35ba015d309d 100644 (file)
@@ -3,6 +3,4 @@ D: test if statement
 T: -execute
 C: -std=gmqcc
 E: -float 2
-F: if statement failed
-S: if statement passed
 M: Two
index f0c6f94ff3883c631f2903bcb19129b6e11b504c..d8af70726d93568f38998e8e5206c3efb79f8409 100644 (file)
@@ -3,6 +3,4 @@ D: test digraphs and trigraphs
 T: -execute
 C: -std=gmqcc
 E: $null
-F: digraphs and trigraphs failed
-S: digraphs and trigraphs passed
 M: #^[]|{}~\%>|#^[]|{}~\%>
index 9a02f65720f8bfdd2e0856d38c8f3b12432ad4c9..26b1fae46e37af7b7bad13c59fee4418d88019cb 100644 (file)
@@ -2,8 +2,6 @@ I: param8.qc
 D: test extended parameters
 T: -execute
 C: -std=fteqcc
-F: extended parameters failed
-S: extended parameters worked
 M: 10 20 30 40 50 60 70 80 90 100
 M: 1 1 1 1 1 1 1 1 1 1
 M: 10 20 30 40 50 60 70 80 90 100
index 3f6849c99eb6f3b42a248cf478041a5e3c7e64fe..da1cb4202c3a67532830fd396aa5a21584cc5b0b 100644 (file)
@@ -2,7 +2,5 @@ I: pmacros.qc
 D: test preprocessor
 T: -execute
 C: -std=fteqcc
-F: preprocessor failed
-S: preprocessor works
 M: ABC
 M: 123
index bba49202b01734533aef42b08b52d9388a8c3134..9d1a9458dc0046546a78d272cf1e23b8289b5e81 100644 (file)
@@ -3,6 +3,4 @@ D: test variadic arguments
 T: -execute
 C: -std=gmqcc
 E: $null
-F: variadic arguments failed
-S: variadic arguments worked
 M: hello world