--- /dev/null
+#include <Ecore_Wl2.h>
+
+#include "e_test_event.h"
+#include "e_test_base.h"
+#include "e_test_efl_util.h"
+
+#define CNP_INIT_W 640
+#define CNP_INIT_H 240
+
+//Copy and Paste test
+class etTestCnP : public ::etTCBase
+{
+public:
+ etTestCnP() { };
+ ~etTestCnP() { };
+
+protected:
+ std::string testCaseName;
+ std::string testName;
+ etWin *tw_src = NULL;
+ etWin *tw_dst = NULL;
+
+ Evas_Object *en_src = NULL;
+ Evas_Object *en_dst = NULL;
+
+ void initTC();
+};
+
+void
+etTestCnP::initTC()
+{
+ const ::testing::TestInfo *const test_info = ::testing::UnitTest::GetInstance()->current_test_info();
+ Evas_Object *gd;
+ tw_src = initNormalWin("TCWin_Source", 0, 0, CNP_INIT_W, CNP_INIT_H, E_TC_WIN_COLOR_YELLOW);
+ showTCWin(tw_src);
+ ASSERT_FOCUS_IN(tw_src);
+ ASSERT_TRUE(tw_src != NULL) << "failed to initiation window";
+
+ elm_win_autodel_set(tw_src->getElmWin(), EINA_TRUE);
+
+ gd = elm_grid_add(tw_src->getElmWin());
+ elm_grid_size_set(gd, 100, 100);
+ evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(tw_src->getElmWin(), gd);
+ evas_object_show(gd);
+
+ Evas_Object *en = elm_entry_add(tw_src->getElmWin());
+ elm_entry_scrollable_set(en, EINA_TRUE);
+ elm_entry_line_wrap_set(en, ELM_WRAP_CHAR);
+ evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_grid_pack(gd, en, 0, 0, 100, 100);
+ evas_object_show(en);
+ en_src = en;
+
+ tw_dst = initNormalWin("TCWin_Source", 0, CNP_INIT_H, CNP_INIT_W, CNP_INIT_H, E_TC_WIN_COLOR_GREEN);
+ showTCWin(tw_dst);
+ ASSERT_FOCUS_IN(tw_dst);
+ ASSERT_TRUE(tw_dst != NULL) << "failed to initiation window";
+
+ elm_win_autodel_set(tw_dst->getElmWin(), EINA_TRUE);
+
+ gd = elm_grid_add(tw_dst->getElmWin());
+ elm_grid_size_set(gd, 100, 100);
+ evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(tw_dst->getElmWin(), gd);
+ evas_object_show(gd);
+
+ Evas_Object *en2 = elm_entry_add(tw_dst->getElmWin());
+ elm_entry_scrollable_set(en2, EINA_TRUE);
+ elm_entry_line_wrap_set(en2, ELM_WRAP_CHAR);
+ evas_object_size_hint_weight_set(en2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(en2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_grid_pack(gd, en2, 0, 0, 100, 100);
+ evas_object_show(en2);
+ en_dst = en2;
+
+ testCaseName = test_info->test_case_name();
+ testName = test_info->name();
+}
+
+static Eina_Bool
+_selection_get(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data *ev)
+{
+ Evas_Object *en = (Evas_Object *)data;
+
+ if (ev->format == ELM_SEL_FORMAT_TEXT)
+ {
+ char *stripstr;
+
+ stripstr = (char *)malloc(ev->len + 1);
+ strncpy(stripstr, (char *)ev->data, ev->len);
+ stripstr[ev->len] = '\0';
+ elm_entry_entry_insert(en, stripstr);
+ free(stripstr);
+ }
+
+ return EINA_TRUE;
+}
+
+TEST_F(etTestCnP, copypaste_basic)
+{
+ initTC();
+ const char *src_txt = "CnP test src context.";
+ const char *dst_txt;
+
+ elm_object_text_set(en_src, src_txt);
+ elm_cnp_selection_set(elm_object_parent_widget_get(en_src), ELM_SEL_TYPE_CLIPBOARD,
+ ELM_SEL_FORMAT_TEXT, src_txt, strlen(src_txt));
+
+ etRunner::get().work(0.5);
+
+ elm_cnp_selection_get(en_dst, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT,
+ _selection_get, en_dst);
+
+ etRunner::get().work(1.0);
+
+ dst_txt = elm_object_text_get(en_dst);
+
+ ASSERT_EQ(0, strcmp(src_txt, dst_txt));
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}