summaryrefslogtreecommitdiff
path: root/src/tests/evas/evas_test_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/evas/evas_test_image.c')
-rw-r--r--src/tests/evas/evas_test_image.c154
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);
}