--- /dev/null
+#include "tc-main.h"
+#include "evas_wrapper.h"
+
+#include "src/bin/core/e_view_intern.h"
+#include "e_view_layout.h"
+#include "e_view_rect.h"
+#include "e_canvas.h"
+
+using ::testing::Return;
+using ::testing::_;
+using ::testing::SetArgPointee;
+using ::testing::DoAll;
+using ::testing::AnyNumber;
+
+
+class EViewLayoutTest : public ::testing::Test
+{
+public:
+ Evas *evas;
+ E_Canvas *canvas;
+ E_View_Tree *tree;
+
+ void SetUp(void) override {
+ evasMock = new EvasMock();
+ this->evas = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+ this->canvas = e_canvas_create(this->evas);
+ this->tree = e_canvas_layer_view_tree_get(this->canvas, E_CANVAS_LAYER_BOTTOM);
+ }
+
+ void TearDown(void) override {
+ e_canvas_destroy(this->canvas);
+ free(this->evas);
+ delete evasMock;
+ }
+};
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Create)
+{
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ EXPECT_NE(layout, nullptr);
+ E_View *view = e_view_layout_view_get(layout);
+ EXPECT_NE(view, nullptr);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+}
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Pack_UnPack)
+{
+ const int color[4] = {0, 0, 0, 0};
+
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+ Evas_Object *obj2 = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ E_View *view = e_view_layout_view_get(layout);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_stack_above(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_color_set(_, _, _, _, _));
+ EXPECT_CALL(*evasMock, evas_object_resize(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_rectangle_add(_))
+ .Times(1)
+ .WillOnce(Return(obj2));
+ E_View_Rect* view_rect = e_view_rect_create(this->tree, 1, 1, color);
+ E_View *childView = e_view_rect_view_get(view_rect);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_visible_get(_))
+ .Times(AnyNumber());
+ e_view_layout_pack(layout, childView);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_layout_unpack(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ e_view_destroy(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+ free(obj2);
+}
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Virtual_Size_Set)
+{
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ E_View *view = e_view_layout_view_get(layout);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ e_view_layout_virtual_size_set(layout, 100, 200);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+}
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Children_Move)
+{
+ const int color[4] = {0, 0, 0, 0};
+
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+ Evas_Object *obj2 = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ E_View *view = e_view_layout_view_get(layout);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_stack_above(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_color_set(_, _, _, _, _));
+ EXPECT_CALL(*evasMock, evas_object_resize(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_rectangle_add(_))
+ .Times(1)
+ .WillOnce(Return(obj2));
+ E_View_Rect* view_rect = e_view_rect_create(this->tree, 1, 1, color);
+ E_View *childView = e_view_rect_view_get(view_rect);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_visible_get(_))
+ .Times(AnyNumber());
+ e_view_layout_pack(layout, childView);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ e_view_layout_child_move(childView, 10, 20);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_layout_unpack(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ e_view_destroy(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+ free(obj2);
+}
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Children_Resize)
+{
+ const int color[4] = {0, 0, 0, 0};
+
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+ Evas_Object *obj2 = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ E_View *view = e_view_layout_view_get(layout);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_stack_above(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_color_set(_, _, _, _, _));
+ EXPECT_CALL(*evasMock, evas_object_resize(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_rectangle_add(_))
+ .Times(1)
+ .WillOnce(Return(obj2));
+ E_View_Rect* view_rect = e_view_rect_create(this->tree, 1, 1, color);
+ E_View *childView = e_view_rect_view_get(view_rect);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_visible_get(_))
+ .Times(AnyNumber());
+ e_view_layout_pack(layout, childView);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ e_view_layout_child_resize(childView, 100, 200);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_layout_unpack(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ e_view_destroy(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+ free(obj2);
+}
+
+TEST_F(EViewLayoutTest, Test_E_View_Layout_Children_Raise)
+{
+ const int color[4] = {0, 0, 0, 0};
+
+ Evas_Object *obj = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+ Evas_Object *obj2 = (Evas_Object *)malloc(EVAS_OBJECT_SIZE);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_smart_class_new(_));
+ EXPECT_CALL(*evasMock, evas_object_smart_add(_, _))
+ .Times(1)
+ .WillOnce(Return(obj));
+ E_View_Layout *layout = e_view_layout_create(this->tree);
+ E_View *view = e_view_layout_view_get(layout);
+
+ EXPECT_CALL(*evasMock, evas_object_data_set(_, _, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_layer_set(_, _));
+ EXPECT_CALL(*evasMock, evas_object_stack_above(_, _));
+ EXPECT_CALL(*evasMock, evas_object_move(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_color_set(_, _, _, _, _));
+ EXPECT_CALL(*evasMock, evas_object_resize(_, _, _));
+ EXPECT_CALL(*evasMock, evas_object_rectangle_add(_))
+ .Times(1)
+ .WillOnce(Return(obj2));
+ E_View_Rect* view_rect = e_view_rect_create(this->tree, 1, 1, color);
+ E_View *childView = e_view_rect_view_get(view_rect);
+
+ EXPECT_CALL(*evasMock, evas_object_smart_data_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_smart_smart_get(_))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_visible_get(_))
+ .Times(AnyNumber());
+ e_view_layout_pack(layout, childView);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ e_view_layout_child_raise(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_data_get(_, _))
+ .Times(AnyNumber());
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_layout_unpack(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ e_view_destroy(childView);
+
+ EXPECT_CALL(*evasMock, evas_object_del(_));
+ EXPECT_CALL(*evasMock, evas_object_data_del(_, _));
+ e_view_destroy(view);
+ free(obj);
+ free(obj2);
+}