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;
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. */
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) {
" 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",