0019_cnp: Add new copy paste test
[platform/core/uifw/e-tizen-testcase.git] / src / testcase / 0019_cnp.cpp
1 #include <Ecore_Wl2.h>
2
3 #include "e_test_event.h"
4 #include "e_test_base.h"
5 #include "e_test_efl_util.h"
6
7 #define CNP_INIT_W 640
8 #define CNP_INIT_H 240
9
10 //Copy and Paste test
11 class etTestCnP : public ::etTCBase
12 {
13 public:
14    etTestCnP() { };
15    ~etTestCnP() { };
16
17 protected:
18    std::string testCaseName;
19    std::string testName;
20    etWin *tw_src = NULL;
21    etWin *tw_dst = NULL;
22
23    Evas_Object *en_src = NULL;
24    Evas_Object *en_dst = NULL;
25
26    void initTC();
27 };
28
29 void
30 etTestCnP::initTC()
31 {
32    const ::testing::TestInfo *const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
33    Evas_Object *gd;
34    tw_src = initNormalWin("TCWin_Source", 0, 0, CNP_INIT_W, CNP_INIT_H, E_TC_WIN_COLOR_YELLOW);
35    showTCWin(tw_src);
36    ASSERT_FOCUS_IN(tw_src);
37    ASSERT_TRUE(tw_src != NULL) << "failed to initiation window";
38
39    elm_win_autodel_set(tw_src->getElmWin(), EINA_TRUE);
40
41    gd = elm_grid_add(tw_src->getElmWin());
42    elm_grid_size_set(gd, 100, 100);
43    evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
44    elm_win_resize_object_add(tw_src->getElmWin(), gd);
45    evas_object_show(gd);
46
47    Evas_Object *en = elm_entry_add(tw_src->getElmWin());
48    elm_entry_scrollable_set(en, EINA_TRUE);
49    elm_entry_line_wrap_set(en, ELM_WRAP_CHAR);
50    evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
51    evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
52    elm_grid_pack(gd, en, 0, 0, 100, 100);
53    evas_object_show(en);
54    en_src = en;
55
56    tw_dst = initNormalWin("TCWin_Source", 0, CNP_INIT_H, CNP_INIT_W, CNP_INIT_H, E_TC_WIN_COLOR_GREEN);
57    showTCWin(tw_dst);
58    ASSERT_FOCUS_IN(tw_dst);
59    ASSERT_TRUE(tw_dst != NULL) << "failed to initiation window";
60
61    elm_win_autodel_set(tw_dst->getElmWin(), EINA_TRUE);
62
63    gd = elm_grid_add(tw_dst->getElmWin());
64    elm_grid_size_set(gd, 100, 100);
65    evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
66    elm_win_resize_object_add(tw_dst->getElmWin(), gd);
67    evas_object_show(gd);
68
69    Evas_Object *en2 = elm_entry_add(tw_dst->getElmWin());
70    elm_entry_scrollable_set(en2, EINA_TRUE);
71    elm_entry_line_wrap_set(en2, ELM_WRAP_CHAR);
72    evas_object_size_hint_weight_set(en2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
73    evas_object_size_hint_align_set(en2, EVAS_HINT_FILL, EVAS_HINT_FILL);
74    elm_grid_pack(gd, en2, 0, 0, 100, 100);
75    evas_object_show(en2);
76    en_dst = en2;
77
78    testCaseName = test_info->test_case_name();
79    testName = test_info->name();
80 }
81
82 static Eina_Bool
83 _selection_get(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data *ev)
84 {
85    Evas_Object *en = (Evas_Object *)data;
86
87    if (ev->format == ELM_SEL_FORMAT_TEXT)
88      {
89         char *stripstr;
90
91         stripstr = (char *)malloc(ev->len + 1);
92         strncpy(stripstr, (char *)ev->data, ev->len);
93         stripstr[ev->len] = '\0';
94         elm_entry_entry_insert(en, stripstr);
95         free(stripstr);
96      }
97
98    return EINA_TRUE;
99 }
100
101 TEST_F(etTestCnP, copypaste_basic)
102 {
103    initTC();
104    const char *src_txt = "CnP test src context.";
105    const char *dst_txt;
106
107    elm_object_text_set(en_src, src_txt);
108    elm_cnp_selection_set(elm_object_parent_widget_get(en_src), ELM_SEL_TYPE_CLIPBOARD,
109                          ELM_SEL_FORMAT_TEXT, src_txt, strlen(src_txt));
110
111    etRunner::get().work(0.5);
112
113    elm_cnp_selection_get(en_dst, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT,
114                          _selection_get, en_dst);
115
116    etRunner::get().work(1.0);
117
118    dst_txt = elm_object_text_get(en_dst);
119
120    ASSERT_EQ(0, strcmp(src_txt, dst_txt));
121
122    ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
123 }