[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_context_menu_item_image_url_get_func.cpp
1 // Copyright 2014 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "utc_blink_ewk_base.h"
6 #include "utc_blink_ewk_context_menu.h"
7
8 class utc_blink_ewk_context_menu_item_image_url_get : public utc_blink_ewk_base {
9 public:
10   utc_blink_ewk_context_menu_item_image_url_get()
11   : utc_blink_ewk_base()
12   , is_failed(EINA_FALSE)
13   , select_timer(0)
14   , url(0)
15   {
16   }
17
18 protected:
19  void LoadFinished(Evas_Object* webview) override {
20    feed_mouse_click(3, 100, 100, GetEwkEvas());
21   }
22
23   bool LoadError(Evas_Object* webview, Ewk_Error* error) override {
24     is_failed = EINA_TRUE;
25     EventLoopStop(utc_blink_ewk_base::Success);
26     return false;
27   }
28
29   void PostSetUp() override {
30     /* Enable mouse events to feed events directly. */
31     ewk_view_mouse_events_enabled_set(GetEwkWebView(), EINA_TRUE);
32
33     Eina_Bool result_set = ewk_view_url_set(GetEwkWebView(), GetResourceUrl("/ewk_context_menu/index_1.html").c_str());
34     if (!result_set) {
35       FAIL();
36     }
37     evas_object_smart_callback_add(GetEwkWebView(), "contextmenu,customize", contextmenu_customize_callback, this);
38     evas_object_smart_callback_add(GetEwkWebView(), "contextmenu,selected", contextmenu_selected_callback, this);
39     image_path = GetResourceUrl("/ewk_context_menu/webkit.png");
40   }
41
42   void PreTearDown() override {
43     evas_object_smart_callback_del(GetEwkWebView(), "contextmenu,customize", contextmenu_customize_callback);
44     evas_object_smart_callback_del(GetEwkWebView(), "contextmenu,selected", contextmenu_selected_callback);
45     if (url) {
46       free(url);
47     }
48     if (select_timer) {
49       ecore_timer_del(select_timer);
50     }
51   }
52
53   static void contextmenu_customize_callback(void* data, Evas_Object* webview, void* event_info)
54   {
55     utc_message("[contextmenu_customize_callback] :: \n");
56     if (!data || !event_info) {
57       FAIL();
58     }
59     Ewk_Context_Menu* contextmenu = static_cast<Ewk_Context_Menu*>(event_info);
60
61     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test >", EINA_TRUE);
62     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test1 >", EINA_TRUE);
63     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test2 >", EINA_TRUE);
64
65     utc_blink_ewk_context_menu_item_image_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_image_url_get*>(data);
66     owner->select_item();
67   }
68
69   static void contextmenu_selected_callback(void* data, Evas_Object* webview, void* event_info)
70   {
71     utc_message("[contextmenu_selected_callback] :: \n");
72     if (!data || !event_info) {
73       FAIL();
74     }
75     Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(event_info);
76     utc_blink_ewk_context_menu_item_image_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_image_url_get*>(data);
77
78     const char* image_url = ewk_context_menu_item_image_url_get(item);
79
80     if (!image_url) {
81       owner->is_failed = EINA_TRUE;
82     }
83     else {
84       owner->url = strdup(image_url);
85     }
86     owner->EventLoopStop(utc_blink_ewk_base::Success);
87   }
88
89   static Eina_Bool select_timer_callback(void* data)
90   {
91     utc_message("[select_timer_callback] :: \n");
92     if (data) {
93       utc_blink_ewk_context_menu_item_image_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_image_url_get*>(data);
94       feed_mouse_click(1, 250, 500, owner->GetEwkEvas());
95       owner->select_timer = 0;
96     }
97     return ECORE_CALLBACK_CANCEL;
98   }
99
100   void select_item()
101   {
102     select_timer = ecore_timer_add(1, select_timer_callback, this);
103   }
104
105 protected:
106   Eina_Bool is_failed;
107   Ecore_Timer* select_timer;
108   std::string image_path;
109   char* url;
110 };
111
112 /**
113  * @brief Tests whether the getting image url from context menu item is performed properly.
114  */
115 TEST_F(utc_blink_ewk_context_menu_item_image_url_get, POS_TEST)
116 {
117   if (!is_failed) {
118     utc_blink_ewk_base::MainLoopResult result_loop = EventLoopStart();
119     if (result_loop != utc_blink_ewk_base::Success) {
120       FAIL();
121     }
122   }
123
124   if (is_failed) {
125     FAIL();
126   }
127   if (!url)
128     utc_fail();
129   utc_check_str_eq(url, image_path.c_str());
130 }
131
132 /**
133  * @brief Tests whether the function works properly for case Ewk_Context_Menu object is NULL.
134  */
135 TEST_F(utc_blink_ewk_context_menu_item_image_url_get, NEG_TEST)
136 {
137   int check = 0;
138   if (ewk_context_menu_item_image_url_get(NULL)) {
139     check = 1;
140   }
141   EXPECT_EQ(check, 0);
142 }