Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1080)

Unified Diff: ui/views/controls/combobox/combobox_unittest.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/combobox/combobox_listener.h ('k') | ui/views/controls/focusable_border.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/combobox/combobox_unittest.cc
diff --git a/ui/views/controls/combobox/combobox_unittest.cc b/ui/views/controls/combobox/combobox_unittest.cc
deleted file mode 100644
index 8a2043f02890cb626fa43c3d17d3a746a2343a41..0000000000000000000000000000000000000000
--- a/ui/views/controls/combobox/combobox_unittest.cc
+++ /dev/null
@@ -1,701 +0,0 @@
-// Copyright 2013 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 "ui/views/controls/combobox/combobox.h"
-
-#include <set>
-
-#include "base/basictypes.h"
-#include "base/strings/utf_string_conversions.h"
-#include "ui/base/ime/text_input_client.h"
-#include "ui/base/models/combobox_model.h"
-#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/views/controls/combobox/combobox_listener.h"
-#include "ui/views/controls/menu/menu_runner.h"
-#include "ui/views/controls/menu/menu_runner_handler.h"
-#include "ui/views/ime/mock_input_method.h"
-#include "ui/views/test/menu_runner_test_api.h"
-#include "ui/views/test/views_test_base.h"
-#include "ui/views/widget/widget.h"
-
-using base::ASCIIToUTF16;
-
-namespace views {
-
-namespace {
-
-// An dummy implementation of MenuRunnerHandler to check if the dropdown menu is
-// shown or not.
-class TestMenuRunnerHandler : public MenuRunnerHandler {
- public:
- TestMenuRunnerHandler() : executed_(false) {}
-
- bool executed() const { return executed_; }
-
- virtual MenuRunner::RunResult RunMenuAt(Widget* parent,
- MenuButton* button,
- const gfx::Rect& bounds,
- MenuAnchorPosition anchor,
- ui::MenuSourceType source_type,
- int32 types) override {
- executed_ = true;
- return MenuRunner::NORMAL_EXIT;
- }
-
- private:
- bool executed_;
-
- DISALLOW_COPY_AND_ASSIGN(TestMenuRunnerHandler);
-};
-
-// A wrapper of Combobox to intercept the result of OnKeyPressed() and
-// OnKeyReleased() methods.
-class TestCombobox : public Combobox {
- public:
- explicit TestCombobox(ui::ComboboxModel* model)
- : Combobox(model),
- key_handled_(false),
- key_received_(false) {}
-
- virtual bool OnKeyPressed(const ui::KeyEvent& e) override {
- key_received_ = true;
- key_handled_ = Combobox::OnKeyPressed(e);
- return key_handled_;
- }
-
- virtual bool OnKeyReleased(const ui::KeyEvent& e) override {
- key_received_ = true;
- key_handled_ = Combobox::OnKeyReleased(e);
- return key_handled_;
- }
-
- bool key_handled() const { return key_handled_; }
- bool key_received() const { return key_received_; }
-
- void clear() {
- key_received_ = key_handled_ = false;
- }
-
- private:
- bool key_handled_;
- bool key_received_;
-
- DISALLOW_COPY_AND_ASSIGN(TestCombobox);
-};
-
-// A concrete class is needed to test the combobox.
-class TestComboboxModel : public ui::ComboboxModel {
- public:
- TestComboboxModel() {}
- virtual ~TestComboboxModel() {}
-
- static const int kItemCount = 10;
-
- // ui::ComboboxModel:
- virtual int GetItemCount() const override {
- return kItemCount;
- }
- virtual base::string16 GetItemAt(int index) override {
- if (IsItemSeparatorAt(index)) {
- NOTREACHED();
- return ASCIIToUTF16("SEPARATOR");
- }
- return ASCIIToUTF16(index % 2 == 0 ? "PEANUT BUTTER" : "JELLY");
- }
- virtual bool IsItemSeparatorAt(int index) override {
- return separators_.find(index) != separators_.end();
- }
-
- virtual int GetDefaultIndex() const override {
- // Return the first index that is not a separator.
- for (int index = 0; index < kItemCount; ++index) {
- if (separators_.find(index) == separators_.end())
- return index;
- }
- NOTREACHED();
- return 0;
- }
-
- void SetSeparators(const std::set<int>& separators) {
- separators_ = separators;
- }
-
- private:
- std::set<int> separators_;
-
- DISALLOW_COPY_AND_ASSIGN(TestComboboxModel);
-};
-
-// A combobox model which refers to a vector.
-class VectorComboboxModel : public ui::ComboboxModel {
- public:
- explicit VectorComboboxModel(std::vector<std::string>* values)
- : values_(values) {}
- virtual ~VectorComboboxModel() {}
-
- // ui::ComboboxModel:
- virtual int GetItemCount() const override {
- return (int)values_->size();
- }
- virtual base::string16 GetItemAt(int index) override {
- return ASCIIToUTF16(values_->at(index));
- }
- virtual bool IsItemSeparatorAt(int index) override {
- return false;
- }
-
- private:
- std::vector<std::string>* values_;
-};
-
-class EvilListener : public ComboboxListener {
- public:
- EvilListener() : deleted_(false) {}
- virtual ~EvilListener() {};
-
- // ComboboxListener:
- virtual void OnPerformAction(Combobox* combobox) override {
- delete combobox;
- deleted_ = true;
- }
-
- bool deleted() const { return deleted_; }
-
- private:
- bool deleted_;
-
- DISALLOW_COPY_AND_ASSIGN(EvilListener);
-};
-
-class TestComboboxListener : public views::ComboboxListener {
- public:
- TestComboboxListener() : perform_action_index_(-1), actions_performed_(0) {}
- virtual ~TestComboboxListener() {}
-
- virtual void OnPerformAction(views::Combobox* combobox) override {
- perform_action_index_ = combobox->selected_index();
- actions_performed_++;
- }
-
- int perform_action_index() const {
- return perform_action_index_;
- }
-
- bool on_perform_action_called() const {
- return actions_performed_ > 0;
- }
-
- int actions_performed() const {
- return actions_performed_;
- }
-
- private:
- int perform_action_index_;
- int actions_performed_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestComboboxListener);
-};
-
-} // namespace
-
-class ComboboxTest : public ViewsTestBase {
- public:
- ComboboxTest() : widget_(NULL), combobox_(NULL) {}
-
- virtual void TearDown() override {
- if (widget_)
- widget_->Close();
- ViewsTestBase::TearDown();
- }
-
- void InitCombobox(const std::set<int>* separators) {
- model_.reset(new TestComboboxModel());
-
- if (separators)
- model_->SetSeparators(*separators);
-
- ASSERT_FALSE(combobox_);
- combobox_ = new TestCombobox(model_.get());
- combobox_->set_id(1);
-
- widget_ = new Widget;
- Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
- params.bounds = gfx::Rect(200, 200, 200, 200);
- widget_->Init(params);
- View* container = new View();
- widget_->SetContentsView(container);
- container->AddChildView(combobox_);
-
- widget_->ReplaceInputMethod(new MockInputMethod);
-
- // Assumes the Widget is always focused.
- widget_->GetInputMethod()->OnFocus();
-
- combobox_->RequestFocus();
- combobox_->SizeToPreferredSize();
- }
-
- protected:
- void SendKeyEvent(ui::KeyboardCode key_code) {
- SendKeyEventWithType(key_code, ui::ET_KEY_PRESSED);
- }
-
- void SendKeyEventWithType(ui::KeyboardCode key_code, ui::EventType type) {
- ui::KeyEvent event(type, key_code, ui::EF_NONE);
- widget_->GetInputMethod()->DispatchKeyEvent(event);
- }
-
- View* GetFocusedView() {
- return widget_->GetFocusManager()->GetFocusedView();
- }
-
- void PerformClick(const gfx::Point& point) {
- ui::MouseEvent pressed_event = ui::MouseEvent(ui::ET_MOUSE_PRESSED, point,
- point,
- ui::EF_LEFT_MOUSE_BUTTON,
- ui::EF_LEFT_MOUSE_BUTTON);
- widget_->OnMouseEvent(&pressed_event);
- ui::MouseEvent released_event = ui::MouseEvent(ui::ET_MOUSE_RELEASED, point,
- point,
- ui::EF_LEFT_MOUSE_BUTTON,
- ui::EF_LEFT_MOUSE_BUTTON);
- widget_->OnMouseEvent(&released_event);
- }
-
- // We need widget to populate wrapper class.
- Widget* widget_;
-
- // |combobox_| will be allocated InitCombobox() and then owned by |widget_|.
- TestCombobox* combobox_;
-
- // Combobox does not take ownership of the model, hence it needs to be scoped.
- scoped_ptr<TestComboboxModel> model_;
-};
-
-TEST_F(ComboboxTest, KeyTest) {
- InitCombobox(NULL);
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(combobox_->selected_index() + 1, model_->GetItemCount());
- SendKeyEvent(ui::VKEY_HOME);
- EXPECT_EQ(combobox_->selected_index(), 0);
- SendKeyEvent(ui::VKEY_DOWN);
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(combobox_->selected_index(), 2);
- SendKeyEvent(ui::VKEY_RIGHT);
- EXPECT_EQ(combobox_->selected_index(), 2);
- SendKeyEvent(ui::VKEY_LEFT);
- EXPECT_EQ(combobox_->selected_index(), 2);
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(combobox_->selected_index(), 1);
- SendKeyEvent(ui::VKEY_PRIOR);
- EXPECT_EQ(combobox_->selected_index(), 0);
- SendKeyEvent(ui::VKEY_NEXT);
- EXPECT_EQ(combobox_->selected_index(), model_->GetItemCount() - 1);
-}
-
-// Check that if a combobox is disabled before it has a native wrapper, then the
-// native wrapper inherits the disabled state when it gets created.
-TEST_F(ComboboxTest, DisabilityTest) {
- model_.reset(new TestComboboxModel());
-
- ASSERT_FALSE(combobox_);
- combobox_ = new TestCombobox(model_.get());
- combobox_->SetEnabled(false);
-
- widget_ = new Widget;
- Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
- params.bounds = gfx::Rect(100, 100, 100, 100);
- widget_->Init(params);
- View* container = new View();
- widget_->SetContentsView(container);
- container->AddChildView(combobox_);
- EXPECT_FALSE(combobox_->enabled());
-}
-
-// Verifies that we don't select a separator line in combobox when navigating
-// through keyboard.
-TEST_F(ComboboxTest, SkipSeparatorSimple) {
- std::set<int> separators;
- separators.insert(2);
- InitCombobox(&separators);
- EXPECT_EQ(0, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(1, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(3, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(1, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_HOME);
- EXPECT_EQ(0, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_PRIOR);
- EXPECT_EQ(0, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(9, combobox_->selected_index());
-}
-
-// Verifies that we never select the separator that is in the beginning of the
-// combobox list when navigating through keyboard.
-TEST_F(ComboboxTest, SkipSeparatorBeginning) {
- std::set<int> separators;
- separators.insert(0);
- InitCombobox(&separators);
- EXPECT_EQ(1, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(2, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(3, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(2, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_HOME);
- EXPECT_EQ(1, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_PRIOR);
- EXPECT_EQ(1, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(9, combobox_->selected_index());
-}
-
-// Verifies that we never select the separator that is in the end of the
-// combobox list when navigating through keyboard.
-TEST_F(ComboboxTest, SkipSeparatorEnd) {
- std::set<int> separators;
- separators.insert(TestComboboxModel::kItemCount - 1);
- InitCombobox(&separators);
- combobox_->SetSelectedIndex(8);
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(8, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(7, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(8, combobox_->selected_index());
-}
-
-// Verifies that we never select any of the adjacent separators (multiple
-// consecutive) that appear in the beginning of the combobox list when
-// navigating through keyboard.
-TEST_F(ComboboxTest, SkipMultipleSeparatorsAtBeginning) {
- std::set<int> separators;
- separators.insert(0);
- separators.insert(1);
- separators.insert(2);
- InitCombobox(&separators);
- EXPECT_EQ(3, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(4, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(3, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_NEXT);
- EXPECT_EQ(9, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_HOME);
- EXPECT_EQ(3, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(9, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_PRIOR);
- EXPECT_EQ(3, combobox_->selected_index());
-}
-
-// Verifies that we never select any of the adjacent separators (multiple
-// consecutive) that appear in the middle of the combobox list when navigating
-// through keyboard.
-TEST_F(ComboboxTest, SkipMultipleAdjacentSeparatorsAtMiddle) {
- std::set<int> separators;
- separators.insert(4);
- separators.insert(5);
- separators.insert(6);
- InitCombobox(&separators);
- combobox_->SetSelectedIndex(3);
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(7, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(3, combobox_->selected_index());
-}
-
-// Verifies that we never select any of the adjacent separators (multiple
-// consecutive) that appear in the end of the combobox list when navigating
-// through keyboard.
-TEST_F(ComboboxTest, SkipMultipleSeparatorsAtEnd) {
- std::set<int> separators;
- separators.insert(7);
- separators.insert(8);
- separators.insert(9);
- InitCombobox(&separators);
- combobox_->SetSelectedIndex(6);
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_EQ(6, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_EQ(5, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_HOME);
- EXPECT_EQ(0, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_NEXT);
- EXPECT_EQ(6, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_PRIOR);
- EXPECT_EQ(0, combobox_->selected_index());
- SendKeyEvent(ui::VKEY_END);
- EXPECT_EQ(6, combobox_->selected_index());
-}
-
-TEST_F(ComboboxTest, GetTextForRowTest) {
- std::set<int> separators;
- separators.insert(0);
- separators.insert(1);
- separators.insert(9);
- InitCombobox(&separators);
- for (int i = 0; i < combobox_->GetRowCount(); ++i) {
- if (separators.count(i) != 0) {
- EXPECT_TRUE(combobox_->GetTextForRow(i).empty()) << i;
- } else {
- EXPECT_EQ(ASCIIToUTF16(i % 2 == 0 ? "PEANUT BUTTER" : "JELLY"),
- combobox_->GetTextForRow(i)) << i;
- }
- }
-}
-
-// Verifies selecting the first matching value (and returning whether found).
-TEST_F(ComboboxTest, SelectValue) {
- InitCombobox(NULL);
- ASSERT_EQ(model_->GetDefaultIndex(), combobox_->selected_index());
- EXPECT_TRUE(combobox_->SelectValue(ASCIIToUTF16("PEANUT BUTTER")));
- EXPECT_EQ(0, combobox_->selected_index());
- EXPECT_TRUE(combobox_->SelectValue(ASCIIToUTF16("JELLY")));
- EXPECT_EQ(1, combobox_->selected_index());
- EXPECT_FALSE(combobox_->SelectValue(ASCIIToUTF16("BANANAS")));
- EXPECT_EQ(1, combobox_->selected_index());
-
- // With the action style, the selected index is always 0.
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- EXPECT_FALSE(combobox_->SelectValue(ASCIIToUTF16("PEANUT BUTTER")));
- EXPECT_EQ(0, combobox_->selected_index());
- EXPECT_FALSE(combobox_->SelectValue(ASCIIToUTF16("JELLY")));
- EXPECT_EQ(0, combobox_->selected_index());
- EXPECT_FALSE(combobox_->SelectValue(ASCIIToUTF16("BANANAS")));
- EXPECT_EQ(0, combobox_->selected_index());
-}
-
-TEST_F(ComboboxTest, SelectIndexActionStyle) {
- InitCombobox(NULL);
-
- // With the action style, the selected index is always 0.
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- combobox_->SetSelectedIndex(1);
- EXPECT_EQ(0, combobox_->selected_index());
- combobox_->SetSelectedIndex(2);
- EXPECT_EQ(0, combobox_->selected_index());
- combobox_->SetSelectedIndex(3);
- EXPECT_EQ(0, combobox_->selected_index());
-}
-
-TEST_F(ComboboxTest, ListenerHandlesDelete) {
- TestComboboxModel model;
-
- // |combobox| will be deleted on change.
- TestCombobox* combobox = new TestCombobox(&model);
- scoped_ptr<EvilListener> evil_listener(new EvilListener());
- combobox->set_listener(evil_listener.get());
- ASSERT_NO_FATAL_FAILURE(combobox->ExecuteCommand(2));
- EXPECT_TRUE(evil_listener->deleted());
-
- // With STYLE_ACTION
- // |combobox| will be deleted on change.
- combobox = new TestCombobox(&model);
- evil_listener.reset(new EvilListener());
- combobox->set_listener(evil_listener.get());
- combobox->SetStyle(Combobox::STYLE_ACTION);
- ASSERT_NO_FATAL_FAILURE(combobox->ExecuteCommand(2));
- EXPECT_TRUE(evil_listener->deleted());
-}
-
-TEST_F(ComboboxTest, Click) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- combobox_->Layout();
-
- // Click the left side. The menu is shown.
- TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler();
- scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler);
- test::MenuRunnerTestAPI test_api(
- combobox_->dropdown_list_menu_runner_.get());
- test_api.SetMenuRunnerHandler(menu_runner_handler.Pass());
- PerformClick(gfx::Point(combobox_->x() + 1,
- combobox_->y() + combobox_->height() / 2));
- EXPECT_FALSE(listener.on_perform_action_called());
- EXPECT_TRUE(test_menu_runner_handler->executed());
-}
-
-TEST_F(ComboboxTest, ClickButDisabled) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- combobox_->Layout();
- combobox_->SetEnabled(false);
-
- // Click the left side, but nothing happens since the combobox is disabled.
- TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler();
- scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler);
- test::MenuRunnerTestAPI test_api(
- combobox_->dropdown_list_menu_runner_.get());
- test_api.SetMenuRunnerHandler(menu_runner_handler.Pass());
- PerformClick(gfx::Point(combobox_->x() + 1,
- combobox_->y() + combobox_->height() / 2));
- EXPECT_FALSE(listener.on_perform_action_called());
- EXPECT_FALSE(test_menu_runner_handler->executed());
-}
-
-TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- // With STYLE_NORMAL, the click event is ignored.
- SendKeyEvent(ui::VKEY_RETURN);
- EXPECT_FALSE(listener.on_perform_action_called());
-
- // With STYLE_ACTION, the click event is notified.
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- SendKeyEvent(ui::VKEY_RETURN);
- EXPECT_TRUE(listener.on_perform_action_called());
- EXPECT_EQ(0, listener.perform_action_index());
-}
-
-TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- // With STYLE_NORMAL, the click event is ignored.
- SendKeyEvent(ui::VKEY_SPACE);
- EXPECT_FALSE(listener.on_perform_action_called());
- SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
- EXPECT_FALSE(listener.on_perform_action_called());
-
- // With STYLE_ACTION, the click event is notified after releasing.
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- SendKeyEvent(ui::VKEY_SPACE);
- EXPECT_FALSE(listener.on_perform_action_called());
- SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
- EXPECT_TRUE(listener.on_perform_action_called());
- EXPECT_EQ(0, listener.perform_action_index());
-}
-
-TEST_F(ComboboxTest, NotifyOnClickWithMouse) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- combobox_->Layout();
-
- // Click the right side (arrow button). The menu is shown.
- TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler();
- scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler);
- scoped_ptr<test::MenuRunnerTestAPI> test_api(
- new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get()));
- test_api->SetMenuRunnerHandler(menu_runner_handler.Pass());
-
- PerformClick(gfx::Point(combobox_->x() + combobox_->width() - 1,
- combobox_->y() + combobox_->height() / 2));
- EXPECT_FALSE(listener.on_perform_action_called());
- EXPECT_TRUE(test_menu_runner_handler->executed());
-
- // Click the left side (text button). The click event is notified.
- test_menu_runner_handler = new TestMenuRunnerHandler();
- menu_runner_handler.reset(test_menu_runner_handler);
- test_api.reset(
- new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get()));
- test_api->SetMenuRunnerHandler(menu_runner_handler.Pass());
- PerformClick(gfx::Point(combobox_->x() + 1,
- combobox_->y() + combobox_->height() / 2));
- EXPECT_TRUE(listener.on_perform_action_called());
- EXPECT_FALSE(test_menu_runner_handler->executed());
- EXPECT_EQ(0, listener.perform_action_index());
-}
-
-TEST_F(ComboboxTest, ConsumingPressKeyEvents) {
- InitCombobox(NULL);
-
- EXPECT_FALSE(combobox_->OnKeyPressed(
- ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE)));
- EXPECT_FALSE(combobox_->OnKeyPressed(
- ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE)));
-
- // When the combobox's style is STYLE_ACTION, pressing events of a space key
- // or an enter key will be consumed.
- combobox_->SetStyle(Combobox::STYLE_ACTION);
- EXPECT_TRUE(combobox_->OnKeyPressed(
- ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE)));
- EXPECT_TRUE(combobox_->OnKeyPressed(
- ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE)));
-}
-
-TEST_F(ComboboxTest, ContentWidth) {
- std::vector<std::string> values;
- VectorComboboxModel model(&values);
- TestCombobox combobox(&model);
-
- std::string long_item = "this is the long item";
- std::string short_item = "s";
-
- values.resize(1);
- values[0] = long_item;
- combobox.ModelChanged();
-
- const int long_item_width = combobox.content_size_.width();
-
- values[0] = short_item;
- combobox.ModelChanged();
-
- const int short_item_width = combobox.content_size_.width();
-
- values.resize(2);
- values[0] = short_item;
- values[1] = long_item;
- combobox.ModelChanged();
-
- // When the style is STYLE_NORMAL, the width will fit with the longest item.
- combobox.SetStyle(Combobox::STYLE_NORMAL);
- EXPECT_EQ(long_item_width, combobox.content_size_.width());
-
- // When the style is STYLE_ACTION, the width will fit with the first items'
- // width.
- combobox.SetStyle(Combobox::STYLE_ACTION);
- EXPECT_EQ(short_item_width, combobox.content_size_.width());
-}
-
-TEST_F(ComboboxTest, TypingPrefixNotifiesListener) {
- InitCombobox(NULL);
-
- TestComboboxListener listener;
- combobox_->set_listener(&listener);
-
- // Type the first character of the second menu item ("JELLY").
- combobox_->GetTextInputClient()->InsertChar('J', ui::EF_NONE);
- EXPECT_EQ(1, listener.actions_performed());
- EXPECT_EQ(1, listener.perform_action_index());
-
- // Type the second character of "JELLY", item shouldn't change and
- // OnPerformAction() shouldn't be re-called.
- combobox_->GetTextInputClient()->InsertChar('E', ui::EF_NONE);
- EXPECT_EQ(1, listener.actions_performed());
- EXPECT_EQ(1, listener.perform_action_index());
-
- // Clears the typed text.
- combobox_->OnBlur();
-
- // Type the first character of "PEANUT BUTTER", which should change the
- // selected index and perform an action.
- combobox_->GetTextInputClient()->InsertChar('P', ui::EF_NONE);
- EXPECT_EQ(2, listener.actions_performed());
- EXPECT_EQ(2, listener.perform_action_index());
-}
-
-} // namespace views
« no previous file with comments | « ui/views/controls/combobox/combobox_listener.h ('k') | ui/views/controls/focusable_border.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698