| Index: Source/platform/scroll/ScrollbarStateTransitionAnimatorTest.cpp
|
| diff --git a/Source/platform/scroll/ScrollbarStateTransitionAnimatorTest.cpp b/Source/platform/scroll/ScrollbarStateTransitionAnimatorTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1abe3fa1492e21a1a5b3cacb74a0b4490c55f99e
|
| --- /dev/null
|
| +++ b/Source/platform/scroll/ScrollbarStateTransitionAnimatorTest.cpp
|
| @@ -0,0 +1,174 @@
|
| +// 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 "config.h"
|
| +
|
| +#include "platform/scroll/ScrollbarStateTransitionAnimator.h"
|
| +
|
| +#include "platform/HostWindow.h"
|
| +#include "platform/Logging.h"
|
| +#include "platform/geometry/FloatPoint.h"
|
| +#include "platform/geometry/IntRect.h"
|
| +#include "platform/scroll/ScrollableArea.h"
|
| +#include "platform/scroll/ScrollbarThemeOverlayMock.h"
|
| +#include "public/platform/WebScreenInfo.h"
|
| +#include <gmock/gmock.h>
|
| +#include <gtest/gtest.h>
|
| +
|
| +using testing::AtLeast;
|
| +using testing::Return;
|
| +using testing::_;
|
| +
|
| +namespace blink {
|
| +
|
| +class MockScrollbarStateTransitionAnimator : public ScrollbarStateTransitionAnimator {
|
| +public:
|
| + MockScrollbarStateTransitionAnimator(ScrollableArea* scrollableArea)
|
| + : ScrollbarStateTransitionAnimator(scrollableArea)
|
| + {
|
| + }
|
| +
|
| + void reset()
|
| + {
|
| + m_data.reset();
|
| + m_mockCurrentTime = 0;
|
| + stopAnimationTimerIfNeeded();
|
| + }
|
| +
|
| + void setCurrentTime(double time)
|
| + {
|
| + m_mockCurrentTime = time;
|
| + }
|
| + virtual double currentTime() const OVERRIDE
|
| + {
|
| + return m_mockCurrentTime;
|
| + }
|
| +
|
| +private:
|
| + double m_mockCurrentTime;
|
| +};
|
| +
|
| +class MockHostWindow : public HostWindow {
|
| +public:
|
| + MOCK_METHOD1(invalidateContentsAndRootView, void(const IntRect&));
|
| + MOCK_METHOD1(invalidateContentsForSlowScroll, void(const IntRect&));
|
| + MOCK_CONST_METHOD1(rootViewToScreen, IntRect(const IntRect&));
|
| + MOCK_CONST_METHOD0(screenInfo, WebScreenInfo());
|
| + MOCK_METHOD0(scheduleAnimation, void());
|
| +};
|
| +
|
| +class MockScrollableAreaForAnimator : public ScrollableArea {
|
| +public:
|
| + MockScrollableAreaForAnimator(bool enabled)
|
| + : m_scrollbarAnimatorEnabled(enabled)
|
| + {
|
| + }
|
| +
|
| + virtual bool hasOverlayScrollbars() const OVERRIDE
|
| + {
|
| + return m_scrollbarAnimatorEnabled;
|
| + }
|
| +
|
| + virtual HostWindow* hostWindow() const OVERRIDE
|
| + {
|
| + return m_hostWindow;
|
| + }
|
| +
|
| + MOCK_CONST_METHOD0(isActive, bool());
|
| + MOCK_CONST_METHOD1(scrollSize, int(ScrollbarOrientation));
|
| + MOCK_METHOD2(invalidateScrollbar, void(Scrollbar*, const IntRect&));
|
| + MOCK_CONST_METHOD0(isScrollCornerVisible, bool());
|
| + MOCK_CONST_METHOD0(scrollCornerRect, IntRect());
|
| + MOCK_METHOD1(setScrollOffset, void(const IntPoint&));
|
| + MOCK_METHOD2(invalidateScrollbarRect, void(Scrollbar*, const IntRect&));
|
| + MOCK_METHOD1(invalidateScrollCornerRect, void(const IntRect&));
|
| + MOCK_METHOD1(setScrollOffsetFromAnimation, void(const IntPoint&));
|
| + MOCK_CONST_METHOD0(enclosingScrollableArea, ScrollableArea*());
|
| + MOCK_CONST_METHOD0(minimumScrollPosition, IntPoint());
|
| + MOCK_CONST_METHOD0(maximumScrollPosition, IntPoint());
|
| + MOCK_CONST_METHOD1(visibleContentRect, IntRect(IncludeScrollbarsInRect));
|
| + MOCK_CONST_METHOD0(contentsSize, IntSize());
|
| + MOCK_CONST_METHOD0(overhangAmount, IntSize());
|
| + MOCK_CONST_METHOD0(scrollbarsCanBeActive, bool());
|
| + MOCK_CONST_METHOD0(scrollableAreaBoundingBox, IntRect());
|
| + MOCK_CONST_METHOD0(scrollPosition, IntPoint());
|
| + MOCK_CONST_METHOD0(shouldPlaceVerticalScrollbarOnLeft, bool());
|
| + MOCK_CONST_METHOD1(userInputScrollable, bool(ScrollbarOrientation));
|
| + MOCK_CONST_METHOD0(visibleHeight, int());
|
| + MOCK_CONST_METHOD0(visibleWidth, int());
|
| +
|
| +private:
|
| + MockHostWindow* m_hostWindow;
|
| + bool m_scrollbarAnimatorEnabled;
|
| +};
|
| +
|
| +TEST(ScrollbarStateTransitionAnimatorEnabled, Enabled)
|
| +{
|
| + MockScrollableAreaForAnimator scrollableArea(true);
|
| + MockScrollbarStateTransitionAnimator scrollbarAnimator(&scrollableArea);
|
| +
|
| + scrollbarAnimator.reset();
|
| + scrollbarAnimator.setCurrentTime(1.0);
|
| + scrollbarAnimator.mouseEnteredScrollbar(0);
|
| + scrollbarAnimator.setCurrentTime(1.1);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_TRUE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + EXPECT_NE(0.f, scrollbarAnimator.stateTransitionProgress());
|
| + EXPECT_EQ(blink::WebThemeEngine::StateNormal, scrollbarAnimator.stateTransitionStartState());
|
| + EXPECT_EQ(blink::WebThemeEngine::StateHover, scrollbarAnimator.stateTransitionEndState());
|
| + scrollbarAnimator.setCurrentTime(2.0);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.reset();
|
| + scrollbarAnimator.setCurrentTime(1.0);
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.mouseExitedScrollbar(0);
|
| + scrollbarAnimator.setCurrentTime(1.1);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_TRUE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + EXPECT_NE(0.f, scrollbarAnimator.stateTransitionProgress());
|
| + EXPECT_EQ(blink::WebThemeEngine::StateHover, scrollbarAnimator.stateTransitionStartState());
|
| + EXPECT_EQ(blink::WebThemeEngine::StateNormal, scrollbarAnimator.stateTransitionEndState());
|
| + scrollbarAnimator.setCurrentTime(2.0);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.reset();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| +}
|
| +
|
| +TEST(ScrollbarStateTransitionAnimatorEnabled, Disabled)
|
| +{
|
| + MockScrollableAreaForAnimator scrollableArea(false);
|
| + MockScrollbarStateTransitionAnimator scrollbarAnimator(&scrollableArea);
|
| +
|
| + scrollbarAnimator.reset();
|
| + scrollbarAnimator.setCurrentTime(1.0);
|
| + scrollbarAnimator.mouseEnteredScrollbar(0);
|
| + scrollbarAnimator.setCurrentTime(1.1);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + EXPECT_EQ(0.f, scrollbarAnimator.stateTransitionProgress());
|
| + EXPECT_NE(blink::WebThemeEngine::StateNormal, scrollbarAnimator.stateTransitionStartState());
|
| + EXPECT_NE(blink::WebThemeEngine::StateHover, scrollbarAnimator.stateTransitionEndState());
|
| + scrollbarAnimator.setCurrentTime(2.0);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.reset();
|
| + scrollbarAnimator.setCurrentTime(1.0);
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.mouseExitedScrollbar(0);
|
| + scrollbarAnimator.setCurrentTime(1.1);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + EXPECT_EQ(0.f, scrollbarAnimator.stateTransitionProgress());
|
| + EXPECT_NE(blink::WebThemeEngine::StateHover, scrollbarAnimator.stateTransitionStartState());
|
| + EXPECT_NE(blink::WebThemeEngine::StateNormal, scrollbarAnimator.stateTransitionEndState());
|
| + scrollbarAnimator.setCurrentTime(2.0);
|
| + scrollbarAnimator.serviceAnimations();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| + scrollbarAnimator.reset();
|
| + EXPECT_FALSE(scrollbarAnimator.isDuringStateTransitionAnimation());
|
| +}
|
| +
|
| +} // namespace blink
|
|
|