Indented diff bodies (and all other multi-line test log prints) properly.

This commit is contained in:
Pietro Gagliardi 2019-05-29 00:35:51 -04:00
parent cceae4845e
commit a632d10701
4 changed files with 27 additions and 2 deletions

View File

@ -213,7 +213,7 @@ static const char *basename(const char *file)
void testingprivTLogvfFull(testingT *t, const char *file, long line, const char *format, va_list ap)
{
testingprivOutbufPrintf(t->outbuf, "%s:%ld: ", basename(file), line);
testingprivOutbufVprintf(t->outbuf, format, ap);
testingprivOutbufVprintfIndented(t->outbuf, format, ap);
testingprivOutbufPrintf(t->outbuf, "\n");
}

View File

@ -212,6 +212,31 @@ void testingprivOutbufVprintf(testingprivOutbuf *o, const char *fmt, va_list ap)
testingprivVsnprintf(dest, n + 1, fmt, ap);
}
void testingprivOutbufVprintfIndented(testingprivOutbuf *o, const char *fmt, va_list ap)
{
char *buf;
char *lineStart, *lineEnd;
const char *indent;
buf = testingprivVsmprintf(fmt, ap);
lineStart = buf;
indent = "";
for (;;) {
lineEnd = strchr(lineStart, '\n');
if (lineEnd == NULL)
break;
*lineEnd = '\0';
testingprivOutbufPrintf(o, "%s%s\n", indent, lineStart);
lineStart = lineEnd + 1;
indent = " ";
}
// and print the last line fragment, if any
if (*lineStart != '\0')
testingprivOutbufPrintf(o, "%s%s", indent, lineStart);
testingprivFree(buf);
}
void testingprivOutbufPrintf(testingprivOutbuf *o, const char *fmt, ...)
{
va_list ap;

View File

@ -46,6 +46,7 @@ typedef struct testingprivOutbuf testingprivOutbuf;
extern testingprivOutbuf *testingprivNewOutbuf(void);
extern void testingprivOutbufFree(testingprivOutbuf *o);
extern void testingprivOutbufVprintf(testingprivOutbuf *o, const char *fmt, va_list ap);
extern void testingprivOutbufVprintfIndented(testingprivOutbuf *o, const char *fmt, va_list ap);
extern void testingprivOutbufPrintf(testingprivOutbuf *o, const char *fmt, ...);
extern void testingprivOutbufAppendOutbuf(testingprivOutbuf *o, testingprivOutbuf *src);
extern const char *testingprivOutbufString(testingprivOutbuf *o);

View File

@ -4,7 +4,6 @@
#include "lib/testing.h"
#include "lib/timer.h"
// TODO this should have the case reports indented
#define diff(t, clause, fmt, got, want) testingTErrorf(t, "%s:\ngot " fmt "\nwant " fmt, clause, got, want)
#define diff_2str(t, clause, clause2, fmt, got, want) testingTErrorf(t, "%s %s:\ngot " fmt "\nwant " fmt, clause, clause2, got, want)
#define diff2(t, clause, fmts, got1, got2, want1, want2) testingTErrorf(t, "%s:\ngot " fmts "\nwant " fmts, clause, got1, got2, want1, want2)