diff options
Diffstat (limited to 'tests/test_info.c')
| -rw-r--r-- | tests/test_info.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/test_info.c b/tests/test_info.c new file mode 100644 index 0000000..9beceb9 --- /dev/null +++ b/tests/test_info.c @@ -0,0 +1,74 @@ +/*:* + * ggaze — info / EXIF unit test + * + * Gathers EXIF from the fixtures: plain.jpg (orientation 1) and rot6.jpg + * (orientation 6, 8x4 stored). Asserts dimensions, orientation, and that + * the format string is non-empty. Uses $GGAZE_FIXTURES_DIR. + * + * Copyright (c) 2026 ggaze contributors + * SPDX-License-Identifier: GPL-3.0-or-later + *:*/ + +#include "info.h" + +#include <glib.h> + +static GgazeInfo * +info_from_fixture(const char *c_name) { + const char *c_dir = g_getenv("GGAZE_FIXTURES_DIR"); + g_assert_nonnull(c_dir); + char *c_path = g_build_filename(c_dir, c_name, NULL); + GFile *p_file = g_file_new_for_path(c_path); + g_free(c_path); + GgazeInfo *p_info = info_new(p_file); + g_assert_nonnull(p_info); + g_object_unref(p_file); + return (p_info); +} + +static void +test_plain_jpeg(void) { + GgazeInfo *p_info = info_from_fixture("plain.jpg"); + g_assert_cmpint(p_info->i_width, ==, 6); + g_assert_cmpint(p_info->i_height, ==, 3); + g_assert_cmpint(p_info->i_orientation, ==, 1); /* Horizontal (normal) */ + g_assert_nonnull(p_info->c_format); + g_assert(p_info->i_size > 0); + char *c_fmt = info_format(p_info); + g_assert_nonnull(c_fmt); + g_free(c_fmt); + info_delete(p_info); +} + +static void +test_rotated_jpeg(void) { + GgazeInfo *p_info = info_from_fixture("rot6.jpg"); + /* Stored dimensions are 8x4 (before orientation is applied). */ + g_assert_cmpint(p_info->i_width, ==, 8); + g_assert_cmpint(p_info->i_height, ==, 4); + g_assert_cmpint(p_info->i_orientation, ==, 6); /* Rotate 90 CW */ + info_delete(p_info); +} + +static void +test_png_no_exif(void) { + GgazeInfo *p_info = info_from_fixture("small.png"); + g_assert_cmpint(p_info->i_width, ==, 5); + g_assert_cmpint(p_info->i_height, ==, 2); + g_assert_cmpint(p_info->i_orientation, ==, 0); /* no EXIF */ + g_assert_null(p_info->c_camera); /* no EXIF → no camera */ + info_delete(p_info); +} + +int +main(int i_argc, char **c_argv) { + g_test_init(&i_argc, &c_argv, NULL); + if (g_getenv("GGAZE_FIXTURES_DIR") == NULL) { + g_test_skip("GGAZE_FIXTURES_DIR unset"); + return (g_test_run()); + } + g_test_add_func("/info/plain_jpeg", test_plain_jpeg); + g_test_add_func("/info/rotated_jpeg", test_rotated_jpeg); + g_test_add_func("/info/png_no_exif", test_png_no_exif); + return (g_test_run()); +}
\ No newline at end of file |
