[M120 Migration][MM] Support W3C EME
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / unittest / utc_blink_ewk_context_menu_item_link_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_link_url_get : public utc_blink_ewk_base {
9 public:
10   utc_blink_ewk_context_menu_item_link_url_get()
11   : utc_blink_ewk_base()
12   , is_failed(EINA_FALSE)
13   , url(0)
14   , select_timer(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.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   }
40
41   void PreTearDown() override {
42     evas_object_smart_callback_del(GetEwkWebView(), "contextmenu,customize", contextmenu_customize_callback);
43     evas_object_smart_callback_del(GetEwkWebView(), "contextmenu,selected", contextmenu_selected_callback);
44     if (url) {
45       free(url);
46     }
47     if (select_timer) {
48       ecore_timer_del(select_timer);
49     }
50   }
51
52   static void contextmenu_customize_callback(void* data, Evas_Object* webview, void* event_info)
53   {
54     utc_message("[contextmenu_customize_callback] :: \n");
55     if (!data || !event_info) {
56       FAIL();
57     }
58     Ewk_Context_Menu* contextmenu = static_cast<Ewk_Context_Menu*>(event_info);
59     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test >", EINA_TRUE);
60     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test >", EINA_TRUE);
61     ewk_context_menu_item_append_as_action(contextmenu, CUSTOM_CONTEXT_MENU_ITEM_TEST_TAG, "< Item for Test >", EINA_TRUE);
62
63     utc_blink_ewk_context_menu_item_link_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_link_url_get*>(data);
64     owner->select_item();
65   }
66
67   static void contextmenu_selected_callback(void* data, Evas_Object* webview, void* event_info)
68   {
69     utc_message("[contextmenu_selected_callback] :: \n");
70     if (!data || !event_info) {
71       FAIL();
72     }
73     Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(event_info);
74     utc_blink_ewk_context_menu_item_link_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_link_url_get*>(data);
75
76     const char* link_url = ewk_context_menu_item_link_url_get(item);
77     if (!link_url) {
78       owner->is_failed = EINA_TRUE;
79     }
80     else {
81       owner->url = strdup(link_url);
82     }
83     owner->EventLoopStop(utc_blink_ewk_base::Success);
84   }
85
86   static Eina_Bool select_timer_callback(void* data)
87   {
88     utc_message("[select_timer_callback] :: \n");
89     if (data) {
90       utc_blink_ewk_context_menu_item_link_url_get *owner = static_cast<utc_blink_ewk_context_menu_item_link_url_get*>(data);
91       feed_mouse_click(1, 250, 500, owner->GetEwkEvas());
92       owner->select_timer = 0;
93     }
94     return ECORE_CALLBACK_CANCEL;
95   }
96
97   void select_item()
98   {
99     select_timer = ecore_timer_add(1, select_timer_callback, this);
100   }
101
102
103 protected:
104   Eina_Bool is_failed;
105   char* url;
106   Ecore_Timer* select_timer;
107 };
108
109 /**
110  * @brief Tests whether the getting link url from context menu item is performed properly.
111  */
112 TEST_F(utc_blink_ewk_context_menu_item_link_url_get, POS_TEST)
113 {
114   if (!is_failed) {
115     utc_blink_ewk_base::MainLoopResult result_loop = EventLoopStart();
116     if (result_loop != utc_blink_ewk_base::Success) {
117       FAIL();
118     }
119   }
120
121   if (is_failed) {
122     FAIL();
123   }
124   if (!url) {
125     FAIL();
126   }
127   EXPECT_STREQ(url, "http://www.webkit.org/");
128 }
129
130 /**
131  * @brief Tests whether the function works properly for case Ewk_Context_Menu object is NULL.
132  */
133 TEST_F(utc_blink_ewk_context_menu_item_link_url_get, NEG_TEST)
134 {
135   int check = 0;
136   if (ewk_context_menu_item_link_url_get(NULL)) {
137     check = 1;
138   }
139   EXPECT_EQ(check, 0);
140 }