| 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..708ec920bfde70945ac4da91541803bc2ed01037
|
| --- /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* const kDummyCandidates[] = {
|
| + "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) const {
|
| + *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;
|
| + }
|
| + }
|
| +
|
| + DCHECK(last_pressed_ == NULL);
|
| + 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
|
|
|