| Index: views/controls/scrollbar/scrollbar_unittest.cc
|
| diff --git a/views/controls/scrollbar/scrollbar_unittest.cc b/views/controls/scrollbar/scrollbar_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..552c2b7982d2442d9a60e88aadd0524eb8a153e7
|
| --- /dev/null
|
| +++ b/views/controls/scrollbar/scrollbar_unittest.cc
|
| @@ -0,0 +1,152 @@
|
| +// Copyright (c) 2011 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 "views/controls/scrollbar/scroll_bar.h"
|
| +#include "views/controls/scrollbar/native_scroll_bar.h"
|
| +#include "views/controls/scrollbar/native_scroll_bar_views.h"
|
| +#include "views/test/views_test_base.h"
|
| +#include "views/widget/widget.h"
|
| +
|
| +namespace {
|
| +
|
| +// The Scrollbar controller. This is the widget that should do the real
|
| +// scrolling of contents.
|
| +class TestScrollBarController : public views::ScrollBarController {
|
| + public:
|
| + virtual ~TestScrollBarController() {}
|
| +
|
| + virtual void ScrollToPosition(views::ScrollBar* source,
|
| + int position) OVERRIDE {
|
| + last_source = source;
|
| + last_position = position;
|
| + }
|
| +
|
| + virtual int GetScrollIncrement(views::ScrollBar* source,
|
| + bool is_page,
|
| + bool is_positive) OVERRIDE {
|
| + last_source = source;
|
| + last_is_page = is_page;
|
| + last_is_positive = is_positive;
|
| +
|
| + if (is_page)
|
| + return 20;
|
| + return 10;
|
| + }
|
| +
|
| + // We save the last values in order to assert the corectness of the scroll
|
| + // operation.
|
| + views::ScrollBar* last_source;
|
| + bool last_is_positive;
|
| + bool last_is_page;
|
| + int last_position;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +namespace views {
|
| +
|
| +class NativeScrollBarTest : public ViewsTestBase {
|
| + public:
|
| + NativeScrollBarTest()
|
| + : widget_(NULL),
|
| + scrollbar_(NULL),
|
| + controller_(NULL) {
|
| + }
|
| +
|
| + virtual void SetUp() {
|
| + ViewsTestBase::SetUp();
|
| + Widget::SetPureViews(true);
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + Widget::SetPureViews(false);
|
| + if (widget_)
|
| + widget_->Close();
|
| + ViewsTestBase::TearDown();
|
| + }
|
| +
|
| + void InitScrollBar() {
|
| + controller_.reset(new TestScrollBarController());
|
| +
|
| + ASSERT_FALSE(scrollbar_);
|
| + native_scrollbar_ = new NativeScrollBar(true);
|
| + native_scrollbar_->SetBounds(0, 0, 100, 100);
|
| + scrollbar_ = new NativeScrollBarViews(native_scrollbar_);
|
| + scrollbar_->SetController(controller_.get());
|
| +
|
| + widget_ = new Widget;
|
| + Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
|
| + params.bounds = gfx::Rect(0, 0, 100, 100);
|
| + widget_->Init(params);
|
| + View* container = new View();
|
| + widget_->SetContentsView(container);
|
| + container->AddChildView(scrollbar_);
|
| + scrollbar_->SetBounds(0, 0, 100, 100);
|
| + scrollbar_->Update(100, 200, 0);
|
| +
|
| + track_size_ = scrollbar_->GetTrackBounds().width();
|
| + }
|
| +
|
| + protected:
|
| + Widget* widget_;
|
| +
|
| + // This is the native scrollbar the Views one wraps around.
|
| + NativeScrollBar* native_scrollbar_;
|
| +
|
| + // This is the Views scrollbar.
|
| + BaseScrollBar* scrollbar_;
|
| +
|
| + // Keep track of the size of the track. This is how we can tell when we
|
| + // scroll to the middle.
|
| + int track_size_;
|
| +
|
| + scoped_ptr<TestScrollBarController> controller_;
|
| +};
|
| +
|
| +// TODO(dnicoara) Can't run the test on Windows since the scrollbar |Part|
|
| +// isn't handled in NativeTheme.
|
| +#if defined(OS_WIN)
|
| +TEST_F(NativeScrollBarTest, DISABLED_Scrolling) {
|
| +#else
|
| +TEST_F(NativeScrollBarTest, Scrolling) {
|
| +#endif
|
| + InitScrollBar();
|
| + EXPECT_EQ(scrollbar_->GetPosition(), 0);
|
| + EXPECT_EQ(scrollbar_->GetMaxPosition(), 100);
|
| + EXPECT_EQ(scrollbar_->GetMinPosition(), 0);
|
| +
|
| + // Scroll to middle.
|
| + scrollbar_->ScrollToThumbPosition(track_size_ / 4, false);
|
| + EXPECT_EQ(controller_->last_position, 50);
|
| + EXPECT_EQ(controller_->last_source, native_scrollbar_);
|
| +
|
| + // Scroll to the end.
|
| + scrollbar_->ScrollToThumbPosition(track_size_ / 2, false);
|
| + EXPECT_EQ(controller_->last_position, 100);
|
| +
|
| + // Overscroll. Last position should be the maximum position.
|
| + scrollbar_->ScrollToThumbPosition(track_size_, false);
|
| + EXPECT_EQ(controller_->last_position, 100);
|
| +
|
| + // Underscroll. Last position should be the minimum position.
|
| + scrollbar_->ScrollToThumbPosition(-10, false);
|
| + EXPECT_EQ(controller_->last_position, 0);
|
| +
|
| + // Test the different fixed scrolling amounts. Generally used by buttons,
|
| + // or click on track.
|
| + scrollbar_->ScrollToThumbPosition(0, false);
|
| + scrollbar_->ScrollByAmount(BaseScrollBar::SCROLL_NEXT_LINE);
|
| + EXPECT_EQ(controller_->last_position, 10);
|
| +
|
| + scrollbar_->ScrollByAmount(BaseScrollBar::SCROLL_PREV_LINE);
|
| + EXPECT_EQ(controller_->last_position, 0);
|
| +
|
| + scrollbar_->ScrollByAmount(BaseScrollBar::SCROLL_NEXT_PAGE);
|
| + EXPECT_EQ(controller_->last_position, 20);
|
| +
|
| + scrollbar_->ScrollByAmount(BaseScrollBar::SCROLL_PREV_PAGE);
|
| + EXPECT_EQ(controller_->last_position, 0);
|
| +}
|
| +
|
| +} // namespace views
|
|
|