1// Copyright 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/animation/scrollbar_animation_controller_linear_fade.h" 6 7#include "cc/layers/scrollbar_layer_impl.h" 8#include "cc/test/fake_impl_proxy.h" 9#include "cc/test/fake_layer_tree_host_impl.h" 10#include "testing/gtest/include/gtest/gtest.h" 11 12namespace cc { 13namespace { 14 15class ScrollbarAnimationControllerLinearFadeTest : public testing::Test { 16 public: 17 ScrollbarAnimationControllerLinearFadeTest() : host_impl_(&proxy_) {} 18 19 protected: 20 virtual void SetUp() { 21 scroll_layer_ = LayerImpl::Create(host_impl_.active_tree(), 1); 22 scrollbar_layer_ = ScrollbarLayerImpl::Create( 23 host_impl_.active_tree(), 2, HORIZONTAL); 24 25 scroll_layer_->SetMaxScrollOffset(gfx::Vector2d(50, 50)); 26 scroll_layer_->SetBounds(gfx::Size(50, 50)); 27 scroll_layer_->SetHorizontalScrollbarLayer(scrollbar_layer_.get()); 28 29 scrollbar_controller_ = ScrollbarAnimationControllerLinearFade::Create( 30 scroll_layer_.get(), 31 base::TimeDelta::FromSeconds(2), 32 base::TimeDelta::FromSeconds(3)); 33 } 34 35 FakeImplProxy proxy_; 36 FakeLayerTreeHostImpl host_impl_; 37 scoped_ptr<ScrollbarAnimationControllerLinearFade> scrollbar_controller_; 38 scoped_ptr<LayerImpl> scroll_layer_; 39 scoped_ptr<ScrollbarLayerImpl> scrollbar_layer_; 40}; 41 42TEST_F(ScrollbarAnimationControllerLinearFadeTest, HiddenInBegin) { 43 scrollbar_controller_->Animate(base::TimeTicks()); 44 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); 45} 46 47TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByScrollGesture) { 48 base::TimeTicks time; 49 time += base::TimeDelta::FromSeconds(1); 50 scrollbar_controller_->DidScrollGestureBegin(); 51 EXPECT_TRUE(scrollbar_controller_->IsScrollGestureInProgress()); 52 EXPECT_FALSE(scrollbar_controller_->IsAnimating()); 53 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 54 55 time += base::TimeDelta::FromSeconds(100); 56 scrollbar_controller_->Animate(time); 57 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 58 scrollbar_controller_->DidScrollGestureEnd(time); 59 60 EXPECT_FALSE(scrollbar_controller_->IsScrollGestureInProgress()); 61 EXPECT_TRUE(scrollbar_controller_->IsAnimating()); 62 EXPECT_EQ(2, scrollbar_controller_->DelayBeforeStart(time).InSeconds()); 63 64 time += base::TimeDelta::FromSeconds(1); 65 scrollbar_controller_->Animate(time); 66 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 67 68 time += base::TimeDelta::FromSeconds(1); 69 scrollbar_controller_->Animate(time); 70 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 71 72 time += base::TimeDelta::FromSeconds(1); 73 scrollbar_controller_->Animate(time); 74 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); 75 76 time += base::TimeDelta::FromSeconds(1); 77 scrollbar_controller_->Animate(time); 78 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); 79 80 time += base::TimeDelta::FromSeconds(1); 81 82 scrollbar_controller_->DidScrollGestureBegin(); 83 scrollbar_controller_->DidScrollGestureEnd(time); 84 85 time += base::TimeDelta::FromSeconds(1); 86 scrollbar_controller_->Animate(time); 87 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 88 89 time += base::TimeDelta::FromSeconds(1); 90 scrollbar_controller_->Animate(time); 91 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 92 93 time += base::TimeDelta::FromSeconds(1); 94 scrollbar_controller_->Animate(time); 95 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); 96 97 time += base::TimeDelta::FromSeconds(1); 98 scrollbar_controller_->Animate(time); 99 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); 100 101 time += base::TimeDelta::FromSeconds(1); 102 scrollbar_controller_->Animate(time); 103 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); 104} 105 106TEST_F(ScrollbarAnimationControllerLinearFadeTest, AwakenByProgrammaticScroll) { 107 base::TimeTicks time; 108 time += base::TimeDelta::FromSeconds(1); 109 scrollbar_controller_->DidProgrammaticallyUpdateScroll(time); 110 EXPECT_FALSE(scrollbar_controller_->IsScrollGestureInProgress()); 111 EXPECT_TRUE(scrollbar_controller_->IsAnimating()); 112 EXPECT_EQ(2, scrollbar_controller_->DelayBeforeStart(time).InSeconds()); 113 scrollbar_controller_->Animate(time); 114 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 115 116 time += base::TimeDelta::FromSeconds(1); 117 scrollbar_controller_->Animate(time); 118 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 119 scrollbar_controller_->DidProgrammaticallyUpdateScroll(time); 120 121 time += base::TimeDelta::FromSeconds(1); 122 scrollbar_controller_->Animate(time); 123 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 124 125 time += base::TimeDelta::FromSeconds(1); 126 scrollbar_controller_->Animate(time); 127 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 128 129 time += base::TimeDelta::FromSeconds(1); 130 scrollbar_controller_->Animate(time); 131 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); 132 133 time += base::TimeDelta::FromSeconds(1); 134 scrollbar_controller_->Animate(time); 135 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); 136 137 time += base::TimeDelta::FromSeconds(1); 138 scrollbar_controller_->DidProgrammaticallyUpdateScroll(time); 139 time += base::TimeDelta::FromSeconds(1); 140 scrollbar_controller_->Animate(time); 141 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 142 143 time += base::TimeDelta::FromSeconds(1); 144 scrollbar_controller_->Animate(time); 145 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 146 147 time += base::TimeDelta::FromSeconds(1); 148 scrollbar_controller_->Animate(time); 149 EXPECT_FLOAT_EQ(2.0f / 3.0f, scrollbar_layer_->opacity()); 150 151 time += base::TimeDelta::FromSeconds(1); 152 scrollbar_controller_->Animate(time); 153 EXPECT_FLOAT_EQ(1.0f / 3.0f, scrollbar_layer_->opacity()); 154 155 time += base::TimeDelta::FromSeconds(1); 156 scrollbar_controller_->Animate(time); 157 EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity()); 158} 159 160} // namespace 161} // namespace cc 162