#include #include #include int debug = 0; #define D(...) if (debug) printf(__VA_ARGS__) #define EXPECT_OK(x) EXPECT_FALSE(x) #define EXPECT_ERR(x) EXPECT_TRUE(x) #define TOPDIR SRC_DIR #define IMGDIR TOPDIR "/test/images" #define FILE_REF "icon-64.png" static const char *const pfxs[] = { "argb", "bmp", "ff.bz2", // bz2 "ff", "gif", "ico", "jpg.mp3", // id3 "jpeg", "ilbm", // lbm "png", "ppm", // pnm "tga", "tiff", "webp", "xbm", "xpm", "ff.gz", // zlib }; #define N_PFX (sizeof(pfxs) / sizeof(char*)) static int progress(Imlib_Image im, char percent, int update_x, int update_y, int update_w, int update_h) { D("%s: %3d%% %4d,%4d %4dx%4d\n", __func__, percent, update_x, update_y, update_w, update_h); return 1; /* Continue */ } static void image_free(Imlib_Image im) { imlib_context_set_image(im); imlib_free_image_and_decache(); } static void test_load(void) { char filei[256]; char fileo[256]; unsigned int i, j; Imlib_Image im; Imlib_Load_Error lerr; FILE *fp; int fd; int err; snprintf(filei, sizeof(filei), "%s/%s", IMGDIR, FILE_REF); D("Load '%s'\n", filei); im = imlib_load_image(filei); ASSERT_TRUE(im); image_free(im); for (i = 0; i < N_PFX; i++) { // Load files of all types snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "icon-64", pfxs[i]); D("Load '%s'\n", fileo); im = imlib_load_image_with_error_return(fileo, &lerr); EXPECT_EQ(lerr, 0); if (lerr) D("Error %d loading '%s'\n", lerr, fileo); if (im) image_free(im); if (strchr(pfxs[i], '.') == 0) { snprintf(filei, sizeof(filei), "%s.%s", "icon-64", pfxs[i]); for (j = 0; j < N_PFX; j++) { // Load certain types pretending they are something else snprintf(fileo, sizeof(fileo), "%s/%s.%s.%s", IMGDIR, "icon-64", pfxs[i], pfxs[j]); unlink(fileo); symlink(filei, fileo); D("Load incorrect suffix '%s'\n", fileo); im = imlib_load_image_with_error_return(fileo, &lerr); EXPECT_EQ(lerr, 0); if (lerr) D("Error %d loading '%s'\n", lerr, fileo); if (im) image_free(im); } } // Empty files of all types snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "empty", pfxs[i]); unlink(fileo); fp = fopen(fileo, "wb"); fclose(fp); D("Load empty '%s'\n", fileo); im = imlib_load_image_with_error_return(fileo, &lerr); D(" err = %d\n", lerr); EXPECT_TRUE(lerr == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT || lerr == IMLIB_LOAD_ERROR_UNKNOWN || lerr == IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST); // Non-existing files of all types snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "nonex", pfxs[i]); unlink(fileo); symlink("non-existing", fileo); D("Load non-existing '%s'\n", fileo); im = imlib_load_image_with_error_return(fileo, &lerr); EXPECT_EQ(lerr, IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST); // Load via fd snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "icon-64", pfxs[i]); fd = open(fileo, O_RDONLY); D("Load fd %d '%s'\n", fd, fileo); snprintf(fileo, sizeof(fileo), ".%s", pfxs[i]); im = imlib_load_image_fd(fd, pfxs[i]); EXPECT_TRUE(im); if (im) image_free(im); err = close(fd); EXPECT_TRUE(err != 0); } } TEST(LOAD, load_1) { test_load(); } TEST(LOAD, load_2) { imlib_context_set_progress_function(progress); imlib_context_set_progress_granularity(10); test_load(); } int main(int argc, char **argv) { const char *s; ::testing::InitGoogleTest(&argc, argv); for (argc--, argv++; argc > 0; argc--, argv++) { s = argv[0]; if (*s++ != '-') break; switch (*s) { case 'd': debug++; break; } } return RUN_ALL_TESTS(); }