Home | History | Annotate | Download | only in animation
      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 
     12 namespace cc {
     13 namespace {
     14 
     15 class 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 
     42 TEST_F(ScrollbarAnimationControllerLinearFadeTest, HiddenInBegin) {
     43   scrollbar_controller_->Animate(base::TimeTicks());
     44   EXPECT_FLOAT_EQ(0.0f, scrollbar_layer_->opacity());
     45 }
     46 
     47 TEST_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 
    106 TEST_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