diff options
Diffstat (limited to 'src/tests/evas/evas_test_image.c')
-rw-r--r-- | src/tests/evas/evas_test_image.c | 154 |
1 files changed, 131 insertions, 23 deletions
diff --git a/src/tests/evas/evas_test_image.c b/src/tests/evas/evas_test_image.c index bfc581992a..5753651f30 100644 --- a/src/tests/evas/evas_test_image.c +++ b/src/tests/evas/evas_test_image.c @@ -9,6 +9,7 @@ #include <Evas.h> #include <Ecore_Evas.h> +#include <Ecore.h> #include "evas_suite.h" #include "evas_tests_helpers.h" @@ -52,6 +53,11 @@ static const char *exts[] = { ,"jpeg" ,"jpg" #endif +#ifdef BUILD_LOADER_HEIF + ,"heif" + ,"heic" +// ,"avif" +#endif }; EFL_START_TEST(evas_object_image_loader) @@ -642,8 +648,18 @@ _file_to_memory(const char *filename, char **result) fseek(f, 0, SEEK_END); size = ftell(f); + if (size <= 0) + { + fclose(f); + return -1; + } fseek(f, 0, SEEK_SET); *result = (char *)malloc(size + 1); + if (*result == NULL) + { + fclose(f); + return -1; + } if ((size_t)size != fread(*result, sizeof(char), size, f)) { free(*result); @@ -668,7 +684,7 @@ EFL_START_TEST(evas_object_image_cached_data_comparision) const uint32_t *d, *n_d; const uint32_t *d2, *n_d2; const char *img_path, *img_path2; - Evas_Object *img, *img2; + Evas_Object *img, *img2, *img3, *img4; Eina_Rect region; Evas *e = _setup_evas(); @@ -697,39 +713,39 @@ EFL_START_TEST(evas_object_image_cached_data_comparision) evas_object_move(img2, 250, 250); evas_object_show(img2); - evas_object_image_size_get(img, &w2, &h2); - d2 = evas_object_image_data_get(img, EINA_FALSE); + evas_object_image_size_get(img2, &w2, &h2); + d2 = evas_object_image_data_get(img2, EINA_FALSE); for (i = 0; i < 100; i++) { - evas_object_del(img); - evas_object_del(img2); - - img = evas_object_image_add(e); - evas_object_image_memfile_set(img, content, size, "png", NULL); - evas_object_image_fill_set(img, 0, 0, 250, 250); - evas_object_resize(img, 250, 250); - evas_object_move(img, 0, 0); - evas_object_show(img); + img3 = evas_object_image_add(e); + evas_object_image_memfile_set(img3, content, size, "png", NULL); + evas_object_image_fill_set(img3, 0, 0, 250, 250); + evas_object_resize(img3, 250, 250); + evas_object_move(img3, 0, 0); + evas_object_show(img3); - evas_object_image_size_get(img, &n_w, &n_h); - n_d = evas_object_image_data_get(img, EINA_FALSE); + evas_object_image_size_get(img3, &n_w, &n_h); + n_d = evas_object_image_data_get(img3, EINA_FALSE); fail_if(w != n_w || h != n_h); fail_if(memcmp(d, n_d, w * h * 4)); - img2 = evas_object_image_add(e); - evas_object_image_memfile_set(img2, content2, size2, "png", NULL); - evas_object_image_fill_set(img2, 0, 0, 250, 250); - evas_object_resize(img2, 250, 250); - evas_object_move(img2, 250, 250); - evas_object_show(img2); + img4 = evas_object_image_add(e); + evas_object_image_memfile_set(img4, content2, size2, "png", NULL); + evas_object_image_fill_set(img4, 0, 0, 250, 250); + evas_object_resize(img4, 250, 250); + evas_object_move(img4, 250, 250); + evas_object_show(img4); - evas_object_image_size_get(img, &n_w2, &n_h2); - n_d2 = evas_object_image_data_get(img, EINA_FALSE); + evas_object_image_size_get(img4, &n_w2, &n_h2); + n_d2 = evas_object_image_data_get(img4, EINA_FALSE); fail_if(w2 != n_w2 || h2 != n_h2); fail_if(memcmp(d2, n_d2, w2 * h2 * 4)); + + evas_object_del(img3); + evas_object_del(img4); } region = efl_gfx_image_content_region_get(img); @@ -751,6 +767,9 @@ EFL_START_TEST(evas_object_image_cached_data_comparision) ck_assert_int_eq(region.y, 8); ck_assert_int_eq(region.w, 120); ck_assert_int_eq(region.h, 77); + + evas_object_del(img); + evas_object_del(img2); } EFL_END_TEST @@ -903,7 +922,8 @@ EFL_START_TEST(evas_object_image_map_unmap) // save file, verify its pixels fd = eina_file_mkstemp("/tmp/evas-test.XXXXXX.png", &tmp); - close(fd); + fail_if(fd <= 0); + fail_if(close(fd)); if (efl_file_save(o, tmp, NULL, NULL)) { Eina_Rw_Slice sorig, sdest; @@ -1117,6 +1137,92 @@ EFL_START_TEST(evas_object_image_9patch) } EFL_END_TEST +EFL_START_TEST(evas_object_image_save_from_proxy) +{ + Evas *e; + Evas_Object *obj, *proxy, *ref; + int w, h, r_w, r_h; + const uint32_t *d, *r_d; + const char *img_path, *img_path2; + Eina_Bool ret; + + e = _setup_evas(); + img_path = TESTS_IMG_DIR "/Pic1.png"; + img_path2 = TESTS_IMG_DIR "/Pic1_saved.png"; + + obj = evas_object_image_add(e); + proxy = evas_object_image_add(e); + ref = evas_object_image_add(e); + + evas_object_image_file_set(obj, img_path, NULL); + fail_if(evas_object_image_load_error_get(obj) != EVAS_LOAD_ERROR_NONE); + evas_object_image_size_get(obj, &w, &h); + d = evas_object_image_data_get(obj, EINA_FALSE); + + evas_object_image_source_set(proxy, obj); + ret = evas_object_image_save(proxy, img_path2, NULL, NULL); + fail_if(!ret); + + evas_object_image_file_set(ref, img_path2, NULL); + fail_if(evas_object_image_load_error_get(ref) != EVAS_LOAD_ERROR_NONE); + evas_object_image_size_get(ref, &r_w, &r_h); + r_d = evas_object_image_data_get(ref, EINA_FALSE); + + fail_if(w != r_w || h != r_h); + fail_if(memcmp(d, r_d, w * h * 4)); + + evas_object_del(proxy); + evas_object_del(obj); + evas_object_del(ref); + + remove(img_path2); + + evas_free(e); +} +EFL_END_TEST + +static void +_preload(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + int *called = data; + int w, h; + + *called = 1; + evas_object_image_size_get(obj, &w, &h); + ck_assert_int_ge(w, 1); + ck_assert_int_ge(h, 1); + ecore_main_loop_quit(); +} + +EFL_START_TEST(evas_object_image_load_head_skip) +{ + Evas *e; + Evas_Object *obj; + const char *img_path; + int called = 0; + + e = _setup_evas(); + img_path = TESTS_IMG_DIR "/Pic1.png"; + + obj = evas_object_image_filled_add(e); + evas_object_resize(obj, 100, 100); + + evas_object_image_load_head_skip_set(obj, EINA_TRUE); + evas_object_event_callback_add(obj, EVAS_CALLBACK_IMAGE_PRELOADED, _preload, &called); + evas_object_image_file_set(obj, img_path, NULL); + evas_object_image_preload(obj, EINA_FALSE); + + ck_assert(!efl_file_mmap_get(obj)); + ck_assert(!efl_file_loaded_get(obj)); + ecore_main_loop_begin(); + ck_assert_int_eq(called, 1); + ck_assert(efl_file_loaded_get(obj)); + ck_assert(efl_file_mmap_get(obj)); + + evas_free(e); +} +EFL_END_TEST + void evas_test_image_object(TCase *tc) { tcase_add_test(tc, evas_object_image_api); @@ -1143,6 +1249,8 @@ void evas_test_image_object(TCase *tc) tcase_add_test(tc, evas_object_image_partially_load_orientation); tcase_add_test(tc, evas_object_image_cached_data_comparision); tcase_add_test(tc, evas_object_image_9patch); + tcase_add_test(tc, evas_object_image_save_from_proxy); + tcase_add_test(tc, evas_object_image_load_head_skip); } |