From 5d69afdc09ff06e84dbfccffc15c405e0d2966a2 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 31 Oct 2019 09:02:56 -0400 Subject: [PATCH] tests/spec: pre-create a ton of widgets during test init Summary: similar to existing mechanics for elm/efl_ui tests, this pre-creates all the widgets used as test contents for all the test cases so they can be forked and reused without needing to spend time in every single test creating the same test contents Depends on D10573 Reviewers: cedric Reviewed By: cedric Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10574 --- .../elementary/spec/efl_test_pack_linear.c | 3 +- src/tests/elementary/spec/efl_ui_spec_suite.c | 38 +++++++++++++++++++ src/tests/elementary/spec/efl_ui_spec_suite.h | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/tests/elementary/spec/efl_test_pack_linear.c b/src/tests/elementary/spec/efl_test_pack_linear.c index 98ca1ef99f..f4c8955d4a 100644 --- a/src/tests/elementary/spec/efl_test_pack_linear.c +++ b/src/tests/elementary/spec/efl_test_pack_linear.c @@ -473,7 +473,8 @@ object_setup(void) { if (widget_klass == EFL_UI_GROUP_ITEM_CLASS) { - Efl_Ui_Collection *collection = efl_add(EFL_UI_GRID_CLASS, win); + Efl_Ui_Collection *collection = collection_grid; + if (!collection) collection = efl_add(EFL_UI_GRID_CLASS, win); efl_content_set(win, collection); efl_pack_end(collection, widget); } diff --git a/src/tests/elementary/spec/efl_ui_spec_suite.c b/src/tests/elementary/spec/efl_ui_spec_suite.c index 92858cb69b..d59072b51e 100644 --- a/src/tests/elementary/spec/efl_ui_spec_suite.c +++ b/src/tests/elementary/spec/efl_ui_spec_suite.c @@ -10,12 +10,17 @@ Evas_Object *win = NULL; Evas_Object *widget = NULL; +Eo *collection_grid = NULL; const Efl_Class *test_content_klass = NULL; const Efl_Class *widget_klass = NULL; EFL_CLASS_SIMPLE_CLASS(efl_ui_widget, "efl_ui_widget", EFL_UI_WIDGET_CLASS); EFL_CLASS_SIMPLE_CLASS(efl_ui_item, "efl_ui_item", EFL_UI_ITEM_CLASS); #define EFL_UI_ITEM_REALIZED_CLASS efl_ui_item_realized_class_get() + +#define NUM_TEST_WIDGETS 30 +static Eina_Hash *test_widgets; + static void _setup_window_and_widget(const Efl_Class *klass, const Efl_Class *content_klass) { @@ -37,11 +42,42 @@ _setup_window_and_widget(const Efl_Class *klass, const Efl_Class *content_klass) Eo* create_test_widget(void) { + static unsigned int i; + + if (is_forked()) + { + Eo **widgets = eina_hash_find(test_widgets, &test_content_klass); + ck_assert_int_lt(i, NUM_TEST_WIDGETS); + ck_assert(widgets[i]); + return widgets[i++]; + } Eo *ret = efl_add(test_content_klass, win); return ret; } +static void +spec_suite_setup(Eo *global_win) +{ + const Efl_Class *test_classes[] = + { + EFL_UI_GRID_DEFAULT_ITEM_CLASS, + EFL_UI_LIST_DEFAULT_ITEM_CLASS, + EFL_UI_RADIO_CLASS, + EFL_UI_TAB_BAR_DEFAULT_ITEM_CLASS, + WIDGET_CLASS + }; + collection_grid = efl_add(EFL_UI_GRID_CLASS, global_win); + test_widgets = eina_hash_pointer_new(NULL); + for (unsigned int t = 0; t < EINA_C_ARRAY_LENGTH(test_classes); t++) + { + Eo **widgets = malloc(NUM_TEST_WIDGETS * sizeof(void*)); + for (unsigned int i = 0; i < NUM_TEST_WIDGETS; i++) + efl_wref_add(efl_add(test_classes[t], global_win), &widgets[i]); + eina_hash_set(test_widgets, &test_classes[t], widgets); + } +} + #include "efl_ui_spec_suite_gen.x" int main(int argc, char **argv) @@ -54,6 +90,8 @@ main(int argc, char **argv) if (!_efl_test_option_disp(argc, argv, etc)) return 0; + suite_setup_cb_set(spec_suite_setup); + failed_count = suite_setup(EINA_FALSE); failed_count += _efl_suite_build_and_run(argc - 1, (const char **)argv + 1, diff --git a/src/tests/elementary/spec/efl_ui_spec_suite.h b/src/tests/elementary/spec/efl_ui_spec_suite.h index 9b785c5ce5..463f44dc70 100644 --- a/src/tests/elementary/spec/efl_ui_spec_suite.h +++ b/src/tests/elementary/spec/efl_ui_spec_suite.h @@ -9,6 +9,7 @@ extern Eo *win; extern Eo *widget; +extern Eo *collection_grid; extern const Efl_Class *widget_klass; void efl_pack_behavior_test(TCase *tc);