]> git.ozlabs.org Git - ccan/blobdiff - tools/ccanlint/tests/tests_coverage.c
tools: fix up warnings with -Wwrite-strings.
[ccan] / tools / ccanlint / tests / tests_coverage.c
index af8d6f21c845948fbbae3cd1413cbfc6ac8e2938..a8da103f045fed21280625a1bbf9c4c4e44814c8 100644 (file)
@@ -54,7 +54,7 @@ static unsigned int score_coverage(float covered, unsigned total)
 static void analyze_coverage(struct manifest *m, bool full_gcov,
                             const char *output, struct score *score)
 {
-       char **lines = strsplit(score, output, "\n", NULL);
+       char **lines = strsplit(score, output, "\n");
        float covered_lines = 0.0;
        unsigned int i, total_lines = 0;
        bool lines_matter = false;
@@ -110,6 +110,10 @@ static void analyze_coverage(struct manifest *m, bool full_gcov,
 
        score->pass = true;
 
+       if (verbose > 1)
+               printf("%u of %u lines covered\n",
+                      (unsigned)covered_lines, total_lines);
+
        /* Nothing covered?  We can't tell if there's a source file which
         * was never executed, or there really is no code to execute, so
         * assume the latter: this test deserves no score. */
@@ -127,15 +131,27 @@ static void do_run_coverage_tests(struct manifest *m,
                                  unsigned int *timeleft, struct score *score)
 {
        struct ccan_file *i;
-       char *cmdout;
+       char *cmdout, *outdir;
        char *covcmd;
        bool full_gcov = (verbose > 1);
        struct list_head *list;
+       bool ran_some = false;
 
        /* This tells gcov where we put those .gcno files. */
+       outdir = talloc_dirname(score, m->info_file->compiled);
        covcmd = talloc_asprintf(m, "gcov %s -o %s",
                                 full_gcov ? "" : "-n",
-                                talloc_dirname(score, m->info_file->compiled));
+                                outdir);
+
+       /* Unlink these files afterwards. */
+       if (!keep) {
+               talloc_set_destructor(talloc_asprintf(score,
+                                                     "%s/run.gcno", outdir),
+                                     unlink_file_destructor);
+               talloc_set_destructor(talloc_asprintf(score,
+                                                     "%s/run.gcda", outdir),
+                                     unlink_file_destructor);
+       }
 
        /* Run them all. */
        foreach_ptr(list, &m->run_tests, &m->api_tests) {
@@ -145,13 +161,22 @@ static void do_run_coverage_tests(struct manifest *m,
                                covcmd = talloc_asprintf_append(covcmd, " %s",
                                                                i->fullname);
                        } else {
-                               score->error = "Running test with coverage";
-                               score_file_error(score, i, 0, cmdout);
+                               score_file_error(score, i, 0,
+                                                "Running test with coverage"
+                                                " failed: %s", cmdout);
                                return;
                        }
+                       ran_some = true;
                }
        }
 
+       /* No tests at all?  0 out of 0 for you... */
+       if (!ran_some) {
+               score->total = score->score = 0;
+               score->pass = true;
+               return;
+       }
+
        /* Now run gcov: we want output even if it succeeds. */
        if (!run_command(score, timeleft, &cmdout, "%s", covcmd)) {
                score->error = talloc_asprintf(score, "Running gcov: %s",