test_ewk2_context_menu.cpp [plain text]
#include "config.h"
#include "UnitTestUtils/EWK2UnitTestBase.h"
#include "UnitTestUtils/EWK2UnitTestEnvironment.h"
#include <Ecore.h>
using namespace EWK2UnitTest;
extern EWK2UnitTestEnvironment* environment;
static bool testFinished = false;
static const Ewk_Context_Menu_Item_Type customItemType = EWK_ACTION_TYPE;
static const Ewk_Context_Menu_Item_Action customItemTag = EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG;
static const char customItemTitle[] = "Custom Item";
static const bool customItemChecked = false;
static const bool customItemEnabled = true;
static const char webkitItemTitle1[] = "Open Link";
static const char webkitItemTitle2[] = "Open Link in New Window";
static const char webkitItemTitle3[] = "Download Linked File";
static const char webkitItemTitle4[] = "Copy Link Location";
static const char webkitItemNewTitle[] = "Copy Link";
class EWK2ContextMenuTest : public EWK2UnitTestBase {
public:
static void checkBasicContextMenuItem(Ewk_Context_Menu_Item* item, Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled)
{
ASSERT_TRUE(item);
EXPECT_EQ(type, ewk_context_menu_item_type_get(item));
EXPECT_EQ(action, ewk_context_menu_item_action_get(item));
EXPECT_STREQ(title, ewk_context_menu_item_title_get(item));
EXPECT_EQ(checked, ewk_context_menu_item_checked_get(item));
EXPECT_EQ(enabled, ewk_context_menu_item_enabled_get(item));
}
static Eina_Bool customItemSelected(Ewk_View_Smart_Data*, Ewk_Context_Menu_Item* item)
{
checkBasicContextMenuItem(item, customItemType, static_cast<Ewk_Context_Menu_Item_Action>(customItemTag), customItemTitle, customItemChecked, customItemEnabled);
return true;
}
static Eina_Bool testContextMenu(Ewk_View_Smart_Data*, Evas_Coord, Evas_Coord, Ewk_Context_Menu* contextMenu)
{
const Eina_List* list = ewk_context_menu_items_get(contextMenu);
EXPECT_EQ(4, eina_list_count(list));
Ewk_Context_Menu_Item* item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 0));
checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK, webkitItemTitle1, false, true);
item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 1));
checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW, webkitItemTitle2, false, true);
ewk_context_menu_item_enabled_set(item, false);
EXPECT_FALSE(ewk_context_menu_item_enabled_get(item));
item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 2));
checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK, webkitItemTitle3, false, true);
ewk_context_menu_item_checked_set(item, true);
EXPECT_TRUE(ewk_context_menu_item_checked_get(item));
item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 3));
checkBasicContextMenuItem(item, EWK_ACTION_TYPE, EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD, webkitItemTitle4, false, true);
ewk_context_menu_item_title_set(item, webkitItemNewTitle);
EXPECT_STREQ(webkitItemNewTitle, ewk_context_menu_item_title_get(item));
EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(item));
item = static_cast<Ewk_Context_Menu_Item*>(eina_list_nth(list, 0));
EXPECT_TRUE(ewk_context_menu_item_select(contextMenu, item));
return true;
}
static Eina_Bool testContextMenuForRemoveAndAppend(Ewk_View_Smart_Data*, Evas_Coord, Evas_Coord, Ewk_Context_Menu* contextMenu)
{
const Eina_List* list = ewk_context_menu_items_get(contextMenu);
EXPECT_EQ(4, eina_list_count(list));
const Eina_List* listIterator;
void* data;
EINA_LIST_FOREACH(list, listIterator, data)
ewk_context_menu_item_remove(contextMenu, static_cast<Ewk_Context_Menu_Item*>(data));
list = ewk_context_menu_items_get(contextMenu);
EXPECT_EQ(0, eina_list_count(list));
Ewk_Context_Menu_Item* newItem = ewk_context_menu_item_new(customItemType, customItemTag, customItemTitle, customItemChecked, customItemEnabled);
EXPECT_EQ(0, ewk_context_menu_item_parent_menu_get(newItem));
ewk_context_menu_item_append(contextMenu, newItem);
EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(newItem));
EXPECT_EQ(0, ewk_context_menu_item_submenu_get(newItem));
EXPECT_TRUE(ewk_context_menu_item_select(contextMenu, newItem));
ewk_context_menu_hide(contextMenu);
return true;
}
static Eina_Bool testContextMenuForSubmenu(Ewk_View_Smart_Data*, Evas_Coord, Evas_Coord, Ewk_Context_Menu* contextMenu)
{
Eina_List* subMenuItemList = 0;
Ewk_Context_Menu_Item* subMenuItem1 = ewk_context_menu_item_new(customItemType, customItemTag, customItemTitle, customItemChecked, customItemEnabled);
Ewk_Context_Menu_Item* subMenuItem2 = ewk_context_menu_item_new(EWK_ACTION_TYPE, static_cast<Ewk_Context_Menu_Item_Action>(customItemTag + 1), "New SubMenu Item 2", false, true);
Ewk_Context_Menu_Item* subMenuItem3 = ewk_context_menu_item_new(EWK_ACTION_TYPE, static_cast<Ewk_Context_Menu_Item_Action>(customItemTag + 2), "New SubMenu Item 3", false, true);
subMenuItemList = eina_list_append(subMenuItemList, subMenuItem1);
subMenuItemList = eina_list_append(subMenuItemList, subMenuItem2);
subMenuItemList = eina_list_append(subMenuItemList, subMenuItem3);
Ewk_Context_Menu* subMenu = ewk_context_menu_new_with_items(subMenuItemList);
EXPECT_EQ(subMenu, ewk_context_menu_item_parent_menu_get(subMenuItem1));
Ewk_Context_Menu_Item* newItem = ewk_context_menu_item_new_with_submenu(EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG, "New Custom Item", true, subMenu);
EXPECT_EQ(0, ewk_context_menu_item_parent_menu_get(newItem));
ewk_context_menu_item_append(contextMenu, newItem);
EXPECT_EQ(subMenu, ewk_context_menu_item_submenu_get(newItem));
EXPECT_EQ(contextMenu, ewk_context_menu_item_parent_menu_get(newItem));
Ewk_Context_Menu* subMenu2 = ewk_context_menu_new();
Ewk_Context_Menu_Item* newItem2 = ewk_context_menu_item_new_with_submenu(EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG, "New Custom Item 2", true, subMenu2);
ewk_context_menu_item_append(contextMenu, newItem2);
EXPECT_TRUE(ewk_context_menu_item_select(ewk_context_menu_item_parent_menu_get(subMenuItem1), subMenuItem1));
ewk_context_menu_hide(ewk_context_menu_item_parent_menu_get(subMenuItem1));
return true;
}
static Eina_Bool finishTest(Ewk_View_Smart_Data*)
{
testFinished = true;
return true;
}
protected:
void showContextMenu()
{
mouseClick(10, 20, 3);
}
};
TEST_F(EWK2ContextMenuTest, ewk_context_menu_item_select)
{
const char* itemSelectHTML =
"<html>"
"<body><a href=http://www.google.com>Test Link</a></body>"
"</html>";
ewkViewClass()->context_menu_show = testContextMenu;
ewk_view_html_string_load(webView(), itemSelectHTML, "file:///", 0);
ASSERT_TRUE(waitUntilLoadFinished());
showContextMenu();
ASSERT_TRUE(waitUntilLoadFinished());
}
TEST_F(EWK2ContextMenuTest, ewk_context_menu_custom_items)
{
const char* itemSelectHTML =
"<html>"
"<body><a href=http://www.google.com>Test Link</a></body>"
"</html>";
ewkViewClass()->custom_item_selected = customItemSelected;
ewkViewClass()->context_menu_show = testContextMenuForRemoveAndAppend;
ewkViewClass()->context_menu_hide = finishTest;
ewk_view_html_string_load(webView(), itemSelectHTML, "file:///", 0);
ASSERT_TRUE(waitUntilLoadFinished());
showContextMenu();
testFinished = false;
ASSERT_TRUE(waitUntilTrue(testFinished));
ewkViewClass()->context_menu_show = testContextMenuForSubmenu;
showContextMenu();
testFinished = false;
ASSERT_TRUE(waitUntilTrue(testFinished));
}