diff options
Diffstat (limited to 'test/tests.c')
-rw-r--r-- | test/tests.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/tests.c b/test/tests.c index 68245d2df1..5fe486e2ec 100644 --- a/test/tests.c +++ b/test/tests.c @@ -1,9 +1,12 @@ +#include "options/path.h" +#include "osdep/subprocess.h" #include "player/core.h" #include "tests.h" static const struct unittest *unittests[] = { &test_chmap, &test_gl_video, + &test_img_format, &test_json, &test_linked_list, NULL @@ -25,8 +28,17 @@ bool run_tests(struct MPContext *mpctx) struct test_ctx ctx = { .global = mpctx->global, .log = mpctx->log, + .ref_path = "test/ref", + .out_path = "test/out", }; + if (!mp_path_isdir(ctx.ref_path)) { + MP_FATAL(mpctx, "Must be run from git repo root dir.\n"); + abort(); + } + mp_mkdirp(ctx.out_path); + assert(mp_path_isdir(ctx.out_path)); + int num_run = 0; for (int n = 0; unittests[n]; n++) { @@ -81,3 +93,33 @@ void assert_float_equal_impl(const char *file, int line, abort(); } } + +FILE *test_open_out(struct test_ctx *ctx, const char *name) +{ + char *path = mp_tprintf(4096, "%s/%s", ctx->out_path, name); + FILE *f = fopen(path, "wb"); + if (!f) { + MP_FATAL(ctx, "Could not open '%s' for writing.\n", path); + abort(); + } + return f; +} + +void assert_text_files_equal_impl(const char *file, int line, + struct test_ctx *ctx, const char *ref, + const char *new, const char *err) +{ + char *path_ref = mp_tprintf(4096, "%s/%s", ctx->ref_path, ref); + char *path_new = mp_tprintf(4096, "%s/%s", ctx->out_path, new); + + char *errstr = NULL; + int res = mp_subprocess((char*[]){"diff", "-u", "--", path_ref, path_new, 0}, + NULL, NULL, NULL, NULL, &errstr); + + if (res) { + if (res == 1) + MP_WARN(ctx, "Note: %s\n", err); + MP_FATAL(ctx, "Giving up.\n"); + abort(); + } +} |