X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2FWebKit%2FSource%2Fweb%2FExternalPopupMenuTest.cpp;h=ecb284c7d12e8a5ae412296a6bec5ab36ec365cc;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=33a9a0a5af42e792b9a3df6f4a5f40a7d154fe65;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp b/src/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp index 33a9a0a..ecb284c 100644 --- a/src/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp +++ b/src/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp @@ -5,9 +5,22 @@ #include "config.h" #include "web/ExternalPopupMenu.h" +#include "core/HTMLNames.h" +#include "core/frame/FrameHost.h" +#include "core/frame/PinchViewport.h" +#include "core/html/HTMLSelectElement.h" +#include "core/page/Page.h" +#include "core/rendering/RenderMenuList.h" +#include "core/testing/URLTestHelpers.h" #include "platform/PopupMenu.h" #include "platform/PopupMenuClient.h" +#include "public/platform/Platform.h" +#include "public/platform/WebUnitTestSupport.h" +#include "public/web/WebExternalPopupMenu.h" #include "public/web/WebPopupMenuInfo.h" +#include "public/web/WebSettings.h" +#include "web/WebLocalFrameImpl.h" +#include "web/tests/FrameTestHelpers.h" #include using namespace blink; @@ -21,15 +34,15 @@ public: TestPopupMenuClient() : m_listSize(0) { } virtual ~TestPopupMenuClient() { } - virtual void valueChanged(unsigned listIndex, bool fireEvents = true) OVERRIDE { } - virtual void selectionChanged(unsigned listIndex, bool fireEvents = true) OVERRIDE { } - virtual void selectionCleared() OVERRIDE { } + virtual void valueChanged(unsigned listIndex, bool fireEvents = true) override { } + virtual void selectionChanged(unsigned listIndex, bool fireEvents = true) override { } + virtual void selectionCleared() override { } - virtual String itemText(unsigned listIndex) const OVERRIDE { return emptyString(); } - virtual String itemToolTip(unsigned listIndex) const OVERRIDE { return emptyString(); } - virtual String itemAccessibilityText(unsigned listIndex) const OVERRIDE { return emptyString(); } - virtual bool itemIsEnabled(unsigned listIndex) const OVERRIDE { return true; } - virtual PopupMenuStyle itemStyle(unsigned listIndex) const OVERRIDE + virtual String itemText(unsigned listIndex) const override { return emptyString(); } + virtual String itemToolTip(unsigned listIndex) const override { return emptyString(); } + virtual String itemAccessibilityText(unsigned listIndex) const override { return emptyString(); } + virtual bool itemIsEnabled(unsigned listIndex) const override { return true; } + virtual PopupMenuStyle itemStyle(unsigned listIndex) const override { FontDescription fontDescription; fontDescription.setComputedSize(12.0); @@ -38,17 +51,17 @@ public: bool displayNone = m_displayNoneIndexSet.find(listIndex) != m_displayNoneIndexSet.end(); return PopupMenuStyle(Color::black, Color::white, font, true, displayNone, Length(), TextDirection(), false); } - virtual PopupMenuStyle menuStyle() const OVERRIDE { return itemStyle(0); } - virtual LayoutUnit clientPaddingLeft() const OVERRIDE { return 0; } - virtual LayoutUnit clientPaddingRight() const OVERRIDE { return 0; } - virtual int listSize() const OVERRIDE { return m_listSize; } - virtual int selectedIndex() const OVERRIDE { return 0; } - virtual void popupDidHide() OVERRIDE { } - virtual bool itemIsSeparator(unsigned listIndex) const OVERRIDE { return false;} - virtual bool itemIsLabel(unsigned listIndex) const OVERRIDE { return false; } - virtual bool itemIsSelected(unsigned listIndex) const OVERRIDE { return listIndex == 0;} - virtual void setTextFromItem(unsigned listIndex) OVERRIDE { } - virtual bool multiple() const OVERRIDE { return false; } + virtual PopupMenuStyle menuStyle() const override { return itemStyle(0); } + virtual LayoutUnit clientPaddingLeft() const override { return 0; } + virtual LayoutUnit clientPaddingRight() const override { return 0; } + virtual int listSize() const override { return m_listSize; } + virtual int selectedIndex() const override { return 0; } + virtual void popupDidHide() override { } + virtual bool itemIsSeparator(unsigned listIndex) const override { return false;} + virtual bool itemIsLabel(unsigned listIndex) const override { return false; } + virtual bool itemIsSelected(unsigned listIndex) const override { return listIndex == 0;} + virtual void setTextFromItem(unsigned listIndex) override { } + virtual bool multiple() const override { return false; } void setListSize(size_t size) { m_listSize = size; } void setDisplayNoneIndex(unsigned index) { m_displayNoneIndexSet.insert(index); } @@ -62,7 +75,7 @@ public: ExternalPopupMenuDisplayNoneItemsTest() { } protected: - virtual void SetUp() OVERRIDE + virtual void SetUp() override { m_popupMenuClient.setListSize(kListSize); @@ -93,4 +106,161 @@ TEST_F(ExternalPopupMenuDisplayNoneItemsTest, IndexMappingTest) EXPECT_EQ(-1, ExternalPopupMenu::toPopupMenuItemIndex(8, m_popupMenuClient)); } +class ExternalPopupMenuWebFrameClient : public FrameTestHelpers::TestWebFrameClient { +public: + virtual WebExternalPopupMenu* createExternalPopupMenu(const WebPopupMenuInfo&, WebExternalPopupMenuClient*) override + { + return &m_mockWebExternalPopupMenu; + } + WebRect shownBounds() const + { + return m_mockWebExternalPopupMenu.shownBounds(); + } +private: + class MockWebExternalPopupMenu : public WebExternalPopupMenu { + virtual void show(const WebRect& bounds) override + { + m_shownBounds = bounds; + } + virtual void close() override { } + + public: + WebRect shownBounds() const + { + return m_shownBounds; + } + + private: + WebRect m_shownBounds; + }; + WebRect m_shownBounds; + MockWebExternalPopupMenu m_mockWebExternalPopupMenu; +}; + +class ExternalPopupMenuTest : public testing::Test { +public: + ExternalPopupMenuTest() : m_baseURL("http://www.test.com") { } + +protected: + virtual void SetUp() override + { + m_helper.initialize(false, &m_webFrameClient, &m_webViewClient, &configureSettings); + webView()->setUseExternalPopupMenus(true); + } + virtual void TearDown() override + { + Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); + } + + void registerMockedURLLoad(const std::string& fileName) + { + URLTestHelpers::registerMockedURLLoad(URLTestHelpers::toKURL(m_baseURL + fileName), WebString::fromUTF8(fileName.c_str()), WebString::fromUTF8("popup/"), WebString::fromUTF8("text/html")); + } + + void loadFrame(const std::string& fileName) + { + FrameTestHelpers::loadFrame(mainFrame(), m_baseURL + fileName); + } + + WebViewImpl* webView() const { return m_helper.webViewImpl(); } + const ExternalPopupMenuWebFrameClient& client() const { return m_webFrameClient; } + WebLocalFrameImpl* mainFrame() const { return m_helper.webViewImpl()->mainFrameImpl(); } + +private: + static void configureSettings(WebSettings* settings) + { + settings->setPinchVirtualViewportEnabled(true); + } + + std::string m_baseURL; + FrameTestHelpers::TestWebViewClient m_webViewClient; + ExternalPopupMenuWebFrameClient m_webFrameClient; + FrameTestHelpers::WebViewHelper m_helper; +}; + +TEST_F(ExternalPopupMenuTest, PopupAccountsForPinchViewportOffset) +{ + registerMockedURLLoad("select_mid_screen.html"); + loadFrame("select_mid_screen.html"); + + webView()->resize(WebSize(100, 100)); + webView()->layout(); + + HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); + RenderMenuList* menuList = toRenderMenuList(select->renderer()); + ASSERT_TRUE(menuList); + + PinchViewport& pinchViewport = webView()->page()->frameHost().pinchViewport(); + + IntRect rectInDocument = menuList->absoluteBoundingBoxRect(); + + webView()->setPageScaleFactor(2); + IntPoint scrollDelta(20, 30); + pinchViewport.move(scrollDelta); + + menuList->showPopup(); + + EXPECT_EQ(rectInDocument.x() - scrollDelta.x(), client().shownBounds().x); + EXPECT_EQ(rectInDocument.y() - scrollDelta.y(), client().shownBounds().y); +} + +TEST_F(ExternalPopupMenuTest, DidAcceptIndex) +{ + registerMockedURLLoad("select.html"); + loadFrame("select.html"); + + HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); + RenderMenuList* menuList = toRenderMenuList(select->renderer()); + ASSERT_TRUE(menuList); + + menuList->showPopup(); + ASSERT_TRUE(menuList->popupIsVisible()); + + WebExternalPopupMenuClient* client = static_cast(menuList->popup()); + client->didAcceptIndex(2); + EXPECT_FALSE(menuList->popupIsVisible()); + ASSERT_STREQ("2", menuList->text().utf8().data()); + EXPECT_EQ(2, select->selectedIndex()); +} + +TEST_F(ExternalPopupMenuTest, DidAcceptIndices) +{ + registerMockedURLLoad("select.html"); + loadFrame("select.html"); + + HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); + RenderMenuList* menuList = toRenderMenuList(select->renderer()); + ASSERT_TRUE(menuList); + + menuList->showPopup(); + ASSERT_TRUE(menuList->popupIsVisible()); + + WebExternalPopupMenuClient* client = static_cast(menuList->popup()); + int indices[] = { 2 }; + WebVector indicesVector(indices, 1); + client->didAcceptIndices(indicesVector); + EXPECT_FALSE(menuList->popupIsVisible()); + EXPECT_STREQ("2", menuList->text().utf8().data()); + EXPECT_EQ(2, select->selectedIndex()); +} + +TEST_F(ExternalPopupMenuTest, DidAcceptIndicesClearSelect) +{ + registerMockedURLLoad("select.html"); + loadFrame("select.html"); + + HTMLSelectElement* select = toHTMLSelectElement(mainFrame()->frame()->document()->getElementById("select")); + RenderMenuList* menuList = toRenderMenuList(select->renderer()); + ASSERT_TRUE(menuList); + + menuList->showPopup(); + ASSERT_TRUE(menuList->popupIsVisible()); + + WebExternalPopupMenuClient* client = static_cast(menuList->popup()); + WebVector indices; + client->didAcceptIndices(indices); + EXPECT_FALSE(menuList->popupIsVisible()); + EXPECT_EQ(-1, select->selectedIndex()); +} + } // namespace