Index: Source/web/ExternalPopupMenuTest.cpp |
diff --git a/Source/web/ExternalPopupMenuTest.cpp b/Source/web/ExternalPopupMenuTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..33a9a0a5af42e792b9a3df6f4a5f40a7d154fe65 |
--- /dev/null |
+++ b/Source/web/ExternalPopupMenuTest.cpp |
@@ -0,0 +1,96 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+#include "web/ExternalPopupMenu.h" |
+ |
+#include "platform/PopupMenu.h" |
+#include "platform/PopupMenuClient.h" |
+#include "public/web/WebPopupMenuInfo.h" |
+#include <gtest/gtest.h> |
+ |
+using namespace blink; |
+ |
+namespace { |
+ |
+const size_t kListSize = 7; |
+ |
+class TestPopupMenuClient : public PopupMenuClient { |
+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 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); |
+ Font font(fontDescription); |
+ font.update(nullptr); |
+ 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; } |
+ |
+ void setListSize(size_t size) { m_listSize = size; } |
+ void setDisplayNoneIndex(unsigned index) { m_displayNoneIndexSet.insert(index); } |
+private: |
+ size_t m_listSize; |
+ std::set<unsigned> m_displayNoneIndexSet; |
+}; |
+ |
+class ExternalPopupMenuDisplayNoneItemsTest : public testing::Test { |
+public: |
+ ExternalPopupMenuDisplayNoneItemsTest() { } |
+ |
+protected: |
+ virtual void SetUp() OVERRIDE |
+ { |
+ m_popupMenuClient.setListSize(kListSize); |
+ |
+ // Set the 4th an 5th items to have "display: none" property |
+ m_popupMenuClient.setDisplayNoneIndex(3); |
+ m_popupMenuClient.setDisplayNoneIndex(4); |
+ } |
+ |
+ TestPopupMenuClient m_popupMenuClient; |
+}; |
+ |
+TEST_F(ExternalPopupMenuDisplayNoneItemsTest, PopupMenuInfoSizeTest) |
+{ |
+ WebPopupMenuInfo info; |
+ ExternalPopupMenu::getPopupMenuInfo(info, m_popupMenuClient); |
+ EXPECT_EQ(5U, info.items.size()); |
+} |
+ |
+TEST_F(ExternalPopupMenuDisplayNoneItemsTest, IndexMappingTest) |
+{ |
+ // 6th indexed item in popupmenu would be the 4th item in ExternalPopupMenu, |
+ // and vice-versa. |
+ EXPECT_EQ(4, ExternalPopupMenu::toExternalPopupMenuItemIndex(6, m_popupMenuClient)); |
+ EXPECT_EQ(6, ExternalPopupMenu::toPopupMenuItemIndex(4, m_popupMenuClient)); |
+ |
+ // Invalid index, methods should return -1. |
+ EXPECT_EQ(-1, ExternalPopupMenu::toExternalPopupMenuItemIndex(8, m_popupMenuClient)); |
+ EXPECT_EQ(-1, ExternalPopupMenu::toPopupMenuItemIndex(8, m_popupMenuClient)); |
+} |
+ |
+} // namespace |