Chromium Code Reviews| Index: ash/ime/candidate_view_unittest.cc |
| diff --git a/ash/ime/candidate_view_unittest.cc b/ash/ime/candidate_view_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..10a2e0ae613789731f68ebfffbce3acb416cb9b3 |
| --- /dev/null |
| +++ b/ash/ime/candidate_view_unittest.cc |
| @@ -0,0 +1,185 @@ |
| +// Copyright 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 "ash/ime/candidate_view.h" |
| + |
| +#include "base/logging.h" |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "ui/aura/test/event_generator.h" |
| +#include "ui/aura/window.h" |
| +#include "ui/views/controls/button/button.h" |
| +#include "ui/views/layout/box_layout.h" |
| +#include "ui/views/layout/fill_layout.h" |
| +#include "ui/views/test/views_test_base.h" |
| +#include "ui/views/widget/widget_delegate.h" |
| + |
| +namespace ash { |
| +namespace ime { |
| +namespace { |
| + |
| +const char* kDummyCandidates[] = { |
|
oshima
2014/04/24 20:54:37
nit: this adds static initializer.
const char* co
Jun Mukai
2014/04/24 21:14:22
Done.
|
| + "candidate1", |
| + "candidate2", |
| + "candidate3", |
| +}; |
| + |
| +} // namespace |
| + |
| +class CandidateViewTest : public views::ViewsTestBase, |
| + public views::ButtonListener { |
| + public: |
| + CandidateViewTest() : widget_(NULL), last_pressed_(NULL) {} |
| + virtual ~CandidateViewTest() {} |
| + |
| + virtual void SetUp() OVERRIDE { |
| + views::ViewsTestBase::SetUp(); |
| + |
| + views::Widget::InitParams init_params(CreateParams( |
| + views::Widget::InitParams::TYPE_WINDOW)); |
| + |
| + init_params.delegate = new views::WidgetDelegateView(); |
| + |
| + container_ = init_params.delegate->GetContentsView(); |
| + container_->SetLayoutManager( |
| + new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
| + for (size_t i = 0; i < arraysize(kDummyCandidates); ++i) { |
| + CandidateView* candidate = new CandidateView( |
| + this, ui::CandidateWindow::VERTICAL); |
| + ui::CandidateWindow::Entry entry; |
| + entry.value = base::UTF8ToUTF16(kDummyCandidates[i]); |
| + candidate->SetEntry(entry); |
| + container_->AddChildView(candidate); |
| + } |
| + |
| + widget_ = new views::Widget(); |
| + widget_->Init(init_params); |
| + widget_->Show(); |
| + |
| + aura::Window* native_window = widget_->GetNativeWindow(); |
| + event_generator_.reset(new aura::test::EventGenerator( |
| + native_window->GetRootWindow(), native_window)); |
| + } |
| + |
| + virtual void TearDown() OVERRIDE { |
| + widget_->Close(); |
| + |
| + views::ViewsTestBase::TearDown(); |
| + } |
| + |
| + protected: |
| + CandidateView* GetCandidateAt(int index) { |
| + return static_cast<CandidateView*>(container_->child_at(index)); |
| + } |
| + |
| + int GetHighlightedIndex(int* highlighted_count) { |
|
oshima
2014/04/24 20:54:37
const {
Jun Mukai
2014/04/24 21:14:22
Done.
|
| + *highlighted_count = 0; |
| + int last_highlighted = -1; |
| + for (int i = 0; i < container_->child_count(); ++i) { |
| + if (container_->child_at(i)->background() != NULL) { |
| + (*highlighted_count)++; |
| + last_highlighted = i; |
| + } |
| + } |
| + return last_highlighted; |
| + } |
| + |
| + int GetLastPressedIndexAndReset() { |
| + for (int i = 0; i < container_->child_count(); ++i) { |
| + if (last_pressed_ == container_->child_at(i)) { |
| + last_pressed_ = NULL; |
| + return i; |
| + } |
| + } |
| + if (last_pressed_ != NULL) |
| + LOG(ERROR) << "ButtonPressed is called for non candidates"; |
|
oshima
2014/04/24 20:54:37
Shouldn't this be ASSERT if it's error?
Jun Mukai
2014/04/24 21:14:22
ASSERT requires 'void' argument. Use DCHECK instea
|
| + last_pressed_ = NULL; |
| + return -1; |
| + } |
| + |
| + aura::test::EventGenerator* event_generator() { |
| + return event_generator_.get(); |
| + } |
| + |
| + private: |
| + virtual void ButtonPressed(views::Button* sender, |
| + const ui::Event& event) OVERRIDE { |
| + last_pressed_ = sender; |
| + } |
| + |
| + views::Widget* widget_; |
| + views::View* container_; |
| + scoped_ptr<aura::test::EventGenerator> event_generator_; |
| + views::View* last_pressed_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(CandidateViewTest); |
| +}; |
| + |
| +TEST_F(CandidateViewTest, MouseHovers) { |
| + GetCandidateAt(0)->SetHighlighted(true); |
| + |
| + int highlighted_count = 0; |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + // Mouse hover shouldn't change the background. |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(0)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + // Mouse hover shouldn't change the background. |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(1)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + // Mouse hover shouldn't change the background. |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(2)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| +} |
| + |
| +TEST_F(CandidateViewTest, MouseClick) { |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(1)->GetBoundsInScreen().CenterPoint()); |
| + event_generator()->ClickLeftButton(); |
| + EXPECT_EQ(1, GetLastPressedIndexAndReset()); |
| +} |
| + |
| +TEST_F(CandidateViewTest, ClickAndMove) { |
| + GetCandidateAt(0)->SetHighlighted(true); |
| + |
| + int highlighted_count = 0; |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(2)->GetBoundsInScreen().CenterPoint()); |
| + event_generator()->PressLeftButton(); |
| + EXPECT_EQ(2, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + // Highlight follows the drag. |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(1)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(1, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(0)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(0, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + event_generator()->MoveMouseTo( |
| + GetCandidateAt(1)->GetBoundsInScreen().CenterPoint()); |
| + EXPECT_EQ(1, GetHighlightedIndex(&highlighted_count)); |
| + EXPECT_EQ(1, highlighted_count); |
| + |
| + event_generator()->ReleaseLeftButton(); |
| + EXPECT_EQ(1, GetLastPressedIndexAndReset()); |
| +} |
| + |
| +} // namespace ime |
| +} // namespace ash |