efl_ui_spec_suite: support custom widgets

sooo, this test suite is testing interfaces. And when a content needs to
be passed into the API, a lightweight version of a widget will be passed
in. But sometimes implementations *do* requires special classes, they
can now be specified with a custom-mapping in json.

Reviewed-by: SangHyeon Jade Lee <sh10233.lee@samsung.com>
Differential Revision: https://phab.enlightenment.org/D8701
This commit is contained in:
Marcel Hollerbach 2019-04-24 17:35:45 +02:00
parent 7aa9ea071a
commit d4a5f1525e
6 changed files with 51 additions and 30 deletions

View File

@ -17,7 +17,7 @@
EFL_START_TEST(content_set_get)
{
Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w = create_test_widget();
ck_assert_int_eq(efl_content_set(widget, w), EINA_TRUE);
ck_assert_ptr_eq(efl_ui_widget_parent_get(w), widget);
@ -32,7 +32,7 @@ EFL_END_TEST
EFL_START_TEST(content_set_get2)
{
Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w = create_test_widget();
ck_assert_int_eq(efl_content_set(widget, w), EINA_TRUE);
ck_assert_ptr_eq(efl_ui_widget_parent_get(w), widget);
@ -46,7 +46,7 @@ EFL_END_TEST
EFL_START_TEST(content_unset)
{
Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w = create_test_widget();
ck_assert_int_eq(efl_content_set(widget, w), EINA_TRUE);
efl_content_unset(widget);
@ -56,7 +56,7 @@ EFL_END_TEST
EFL_START_TEST(content_lifetime1)
{
Efl_Ui_Widget *w1 = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w1 = create_test_widget();
efl_wref_add(w1, &w1);
ck_assert_int_eq(efl_content_set(widget, w1), EINA_TRUE);
@ -67,7 +67,7 @@ EFL_END_TEST
EFL_START_TEST(content_lifetime2)
{
Efl_Ui_Widget *w1 = efl_add(WIDGET_CLASS, win), *w2 = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w1 = create_test_widget(), *w2 = create_test_widget();
efl_wref_add(w2, &w2);
efl_wref_add(w1, &w1);
@ -82,7 +82,7 @@ EFL_END_TEST
EFL_START_TEST(content_lifetime3)
{
Efl_Ui_Widget *w1 = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w1 = create_test_widget();
Eina_Bool content_changed_event = EINA_FALSE;
ck_assert_int_eq(efl_content_set(widget, w1), EINA_TRUE);
@ -95,7 +95,7 @@ EFL_END_TEST
EFL_START_TEST(content_event)
{
Efl_Ui_Widget *w1 = efl_add(WIDGET_CLASS, win), *w2 = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *w1 = create_test_widget(), *w2 = create_test_widget();
Eina_Bool content_changed_event;
content_changed_event = EINA_FALSE;

View File

@ -31,7 +31,7 @@ _setup_std_pack(Efl_Ui_Widget *wid[3])
for (i = 0; i < 3; ++i)
{
wid[i] = efl_add(WIDGET_CLASS, widget);
wid[i] = create_test_widget();
ck_assert_int_eq(efl_pack(widget, wid[i]), EINA_TRUE);
efl_gfx_entity_visible_set(widget, EINA_TRUE);
}
@ -162,7 +162,7 @@ EFL_START_TEST(unpack3)
Efl_Ui_Widget *wid[3], *invalid;
_setup_std_pack(wid);
invalid = efl_add(WIDGET_CLASS, win);
invalid = create_test_widget();
ck_assert_int_eq(efl_pack_unpack(widget, wid[2]), EINA_TRUE);
EXPECT_ERROR_START;
ck_assert_int_eq(efl_pack_unpack(widget, wid[2]), EINA_FALSE);
@ -238,7 +238,7 @@ EFL_END_TEST
EFL_START_TEST(evt_content_added)
{
Eina_Bool called = EINA_TRUE;
Efl_Ui_Widget *wid = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *wid = create_test_widget();
efl_test_container_expect_evt_content_added(widget, EFL_CONTAINER_EVENT_CONTENT_ADDED, &called, wid);
efl_pack(widget, wid);
ck_assert_int_eq(called, EINA_TRUE);

View File

@ -17,7 +17,7 @@ _fill_array(Efl_Ui_Widget *wid[3])
{
for (int i = 0; i < 3; ++i)
{
wid[i] = efl_add(WIDGET_CLASS, win);
wid[i] = create_test_widget();
}
}
@ -34,7 +34,7 @@ _ordering_equals(Efl_Ui_Widget **wid, unsigned int len)
EFL_START_TEST(pack_begin1)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -73,7 +73,7 @@ EFL_END_TEST
EFL_START_TEST(pack_end1)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -113,7 +113,7 @@ EFL_END_TEST
EFL_START_TEST(pack_before1)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -136,7 +136,7 @@ EFL_END_TEST
EFL_START_TEST(pack_before2)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -157,7 +157,7 @@ EFL_END_TEST
EFL_START_TEST(pack_after1)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -180,7 +180,7 @@ EFL_END_TEST
EFL_START_TEST(pack_after2)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
@ -203,7 +203,7 @@ EFL_START_TEST(pack_at1)
for (int x = -3; x < 3; ++x)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
unsigned int i;
_fill_array(wid);
@ -234,7 +234,7 @@ EFL_START_TEST(pack_at2)
for (int x = -3; x < 3; ++x)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
unsigned int i;
_fill_array(wid);
@ -268,8 +268,8 @@ EFL_END_TEST
EFL_START_TEST(pack_at3)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv2 = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
Efl_Ui_Widget *inv2 = create_test_widget();
_fill_array(wid);
for (int i = 0; i < 3; i++)
@ -308,7 +308,7 @@ EFL_END_TEST
EFL_START_TEST(pack_index_get1)
{
Efl_Ui_Widget *wid[3];
Efl_Ui_Widget *inv = efl_add(WIDGET_CLASS, win);
Efl_Ui_Widget *inv = create_test_widget();
_fill_array(wid);
for (int i = 0; i < 3; i++)

View File

@ -10,9 +10,8 @@
Evas_Object *win = NULL;
Evas_Object *widget = NULL;
const Efl_Class *test_content_klass = NULL;
EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "efl_ui_widget", EFL_UI_WIDGET_CLASS);
static int tree_abort;
static int tree_abort_level;
@ -33,11 +32,12 @@ _setup(void)
}
static void
_setup_window_and_widget(const Efl_Class *klass)
_setup_window_and_widget(const Efl_Class *klass, const Efl_Class *content_klass)
{
ck_assert(!win);
ck_assert(!widget);
test_content_klass = content_klass;
win = win_add();
widget = efl_add(klass, win);
efl_content_set(win, widget);
@ -46,6 +46,14 @@ _setup_window_and_widget(const Efl_Class *klass)
ck_assert(widget);
}
Eo*
create_test_widget(void)
{
Eo *ret = efl_add(test_content_klass, win);
return ret;
}
#include "efl_ui_spec_suite_gen.x"
int
main(int argc, char **argv)

View File

@ -18,6 +18,8 @@ void efl_gfx_arrangement_behavior_test(TCase *tc);
void efl_test_container_content_equal(Efl_Ui_Widget **wid, unsigned int len);
void efl_test_container_expect_evt_content_added(Efl_Ui_Widget *widget, const Efl_Event_Description *ev, Eina_Bool *flag, void *event_data);
Eo* create_test_widget(void);
Evas_Object * win_add();
const Efl_Class* efl_ui_widget_realized_class_get(void);

View File

@ -4,7 +4,7 @@ fixture_gen_template = """
static void
_{}_fixture(void)
{{
_setup_window_and_widget({});
_setup_window_and_widget({}, {});
}}
"""
@ -58,18 +58,29 @@ for input_file in input_files:
tests.append(tmp)
widgets = []
widget_hitmap = []
for test in tests:
interface_test = to_func_name(test["test-interface"])
if "custom-mapping" in test:
custom_mapping = test["custom-mapping"]
else:
custom_mapping = {}
for widget_class in test["test-widgets"]:
if widget_class in custom_mapping:
widget_test_klass = custom_mapping[widget_class]
else:
widget_test_klass = "WIDGET_CLASS"
combo_name = "_{}_{}".format(to_func_name(interface_test), to_func_name(widget_class));
combo_klass_test_name = "{}_{}".format(to_func_name(widget_class), to_func_name(widget_test_klass))
list_of_tcases += list_entry.format(interface_test, to_func_name(widget_class), combo_name)
generated_api += tcase_gen_template.format(combo_name, to_func_name(widget_class), interface_to_api(interface_test))
if widget_class not in widgets:
widgets += [widget_class]
generated_api += tcase_gen_template.format(combo_name, combo_klass_test_name, interface_to_api(interface_test))
if combo_klass_test_name not in widget_hitmap:
widgets += [{ "widget" : widget_class, "test-class" : widget_test_klass, "combo-name" : combo_klass_test_name}]
widget_hitmap += [combo_klass_test_name]
for widget in widgets:
generated_api = fixture_gen_template.format(to_func_name(widget), to_class_getter(widget)) + generated_api
generated_api = fixture_gen_template.format(widget["combo-name"], to_class_getter(widget["widget"]), widget["test-class"]) + generated_api
list_of_tcases += " { NULL, NULL }\n};"