edje: fix backward compatibility issue caused by legacy cursor funcs

Summary:
edje_object_part_text_cursor_prev/next/up/down has return value.
It has to return EINA_TRUE when only it successed.
But, when these funcs moved to legacy, it changed to return EINA_TRUE
whenever it fails or success. It must return EINA_FALSE when it fails.
@fix

Test Plan:
- Run test suite
  make check

Reviewers: herdsman, raster, cedric, woohyun

Subscribers: zmike

Differential Revision: https://phab.enlightenment.org/D5972
This commit is contained in:
Youngbok Shin 2018-05-02 10:33:35 +03:00 committed by Daniel Hirt
parent f1d411db2f
commit cd0bd865eb
4 changed files with 157 additions and 12 deletions

View File

@ -299,6 +299,7 @@ tests/edje/data/test_combine_keywords.edc \
tests/edje/data/test_messages.edc \
tests/edje/data/test_signals.edc \
tests/edje/data/test_signal_callback_del_full.edc \
tests/edje/data/test_text_cursor.edc \
tests/edje/data/filter.lua
@ -342,6 +343,7 @@ EDJE_TEST_FILES = tests/edje/data/test_layout.edj \
tests/edje/data/test_messages.edj \
tests/edje/data/test_signals.edj \
tests/edje/data/test_signal_callback_del_full.edj \
tests/edje/data/test_text_cursor.edj \
$(NULL)
CLEANFILES += $(EDJE_TEST_FILES)

View File

@ -325,33 +325,73 @@ edje_object_part_text_cursor_line_end_set(Edje_Object *obj, const char *part, Ed
EAPI Eina_Bool
edje_object_part_text_cursor_prev(Edje_Object *obj, const char *part, Edje_Cursor cur)
{
efl_text_cursor_char_prev(efl_part(obj, part),
efl_text_cursor_get(efl_part(obj, part), (int) cur));
return EINA_TRUE;
Efl_Text_Cursor_Cursor *c;
int old_pos, new_pos;
c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
efl_text_cursor_char_prev(efl_part(obj, part), c);
new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
if (old_pos != new_pos)
return EINA_TRUE;
return EINA_FALSE;
}
EAPI Eina_Bool
edje_object_part_text_cursor_next(Edje_Object *obj, const char *part, Edje_Cursor cur)
{
efl_text_cursor_char_next(efl_part(obj, part),
efl_text_cursor_get(efl_part(obj, part), (int) cur));
return EINA_TRUE;
Efl_Text_Cursor_Cursor *c;
int old_pos, new_pos;
c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
efl_text_cursor_char_next(efl_part(obj, part), c);
new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
if (old_pos != new_pos)
return EINA_TRUE;
return EINA_FALSE;
}
EAPI Eina_Bool
edje_object_part_text_cursor_down(Edje_Object *obj, const char *part, Edje_Cursor cur)
{
efl_text_cursor_line_jump_by(efl_part(obj, part),
efl_text_cursor_get(efl_part(obj, part), (int) cur), 1);
return EINA_TRUE;
Efl_Text_Cursor_Cursor *c;
int old_pos, new_pos;
c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
efl_text_cursor_line_jump_by(efl_part(obj, part), c, 1);
new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
if (old_pos != new_pos)
return EINA_TRUE;
return EINA_FALSE;
}
EAPI Eina_Bool
edje_object_part_text_cursor_up(Edje_Object *obj, const char *part, Edje_Cursor cur)
{
efl_text_cursor_line_jump_by(efl_part(obj, part),
efl_text_cursor_get(efl_part(obj, part), (int) cur), -1);
return EINA_TRUE;
Efl_Text_Cursor_Cursor *c;
int old_pos, new_pos;
c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
efl_text_cursor_line_jump_by(efl_part(obj, part), c, -1);
new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
if (old_pos != new_pos)
return EINA_TRUE;
return EINA_FALSE;
}
EAPI void

View File

@ -0,0 +1,22 @@
collections {
styles {
style { name: "tb_style";
base: "font=Sans font_size=20 color=#fff";
}
}
group { name: "test_text_cursor";
parts {
part { name: "text";
type: TEXTBLOCK;
entry_mode: EDITABLE;
cursor_mode: BEFORE;
description { state: "default" 0.0;
min: 300 300;
text {
style: "tb_style";
}
}
}
}
}
}

View File

@ -943,6 +943,86 @@ EFL_START_TEST(edje_test_signal_callback_del_full)
}
EFL_END_TEST
EFL_START_TEST(edje_test_text_cursor)
{
Evas *evas;
Evas_Object *obj;
const char *buf = "ABC<br/>DEF";
const char *txt;
int i, old_pos, new_pos;
evas = EDJE_TEST_INIT_EVAS();
obj = edje_object_add(evas);
fail_unless(edje_object_file_set(obj, test_layout_get("test_text_cursor.edj"), "test_text_cursor"));
edje_object_part_text_set(obj, "text", buf);
txt = edje_object_part_text_get(obj, "text");
fail_if(!txt || strcmp(txt, buf));
edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 0);
ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 0);
edje_object_part_text_cursor_pos_set(obj, "text", EDJE_CURSOR_MAIN, 1);
ck_assert_int_eq(edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN), 1);
/* Move cursor to the 0 pos from 1 pos */
old_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert(edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_ne(old_pos, new_pos);
/* Move cursor to the -1 pos from 0 pos. It has to fail. */
old_pos = new_pos;
ck_assert(!edje_object_part_text_cursor_prev(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_eq(old_pos, new_pos);
/* Jump to 2nd line from 1st line.
* It has to return EINA_TRUE which means success. */
old_pos = new_pos;
ck_assert(edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_ne(old_pos, new_pos);
/* Try to jump to 3rd line from 2nd line. But, 3rd line does not exist.
* So, it has to return EINA_FALSE which means failure. */
old_pos = new_pos;
ck_assert(!edje_object_part_text_cursor_down(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_eq(old_pos, new_pos);
/* Move cursor to the end of 2nd line. */
for (i = 0; i < 3; i++)
{
old_pos = new_pos;
ck_assert(edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_ne(old_pos, new_pos);
}
/* Move cursor to the next of the end of 2nd line which does not exist. */
old_pos = new_pos;
ck_assert(!edje_object_part_text_cursor_next(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_eq(old_pos, new_pos);
/* Jump to 1st line from 2nd line.
* It has to return EINA_TRUE which means success. */
old_pos = new_pos;
ck_assert(edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_ne(old_pos, new_pos);
/* Try to jump to the above of 1st line from 1st line. But, there is no such line.
* So, it has to return EINA_FALSE which means failure. */
old_pos = new_pos;
ck_assert(!edje_object_part_text_cursor_up(obj, "text", EDJE_CURSOR_MAIN));
new_pos = edje_object_part_text_cursor_pos_get(obj, "text", EDJE_CURSOR_MAIN);
ck_assert_int_eq(old_pos, new_pos);
EDJE_TEST_FREE_EVAS();
}
EFL_END_TEST
void edje_test_edje(TCase *tc)
{
tcase_add_test(tc, edje_test_edje_init);
@ -968,4 +1048,5 @@ void edje_test_edje(TCase *tc)
tcase_add_test(tc, edje_test_message_send_eo);
tcase_add_test(tc, edje_test_signals);
tcase_add_test(tc, edje_test_signal_callback_del_full);
tcase_add_test(tc, edje_test_text_cursor);
}