| Index: ash/wm/window_animations_unittest.cc
|
| ===================================================================
|
| --- ash/wm/window_animations_unittest.cc (revision 245869)
|
| +++ ash/wm/window_animations_unittest.cc (working copy)
|
| @@ -36,6 +36,37 @@
|
| DISALLOW_COPY_AND_ASSIGN(WindowAnimationsTest);
|
| };
|
|
|
| +// Listens to animation scheduled notifications. Remembers the transition
|
| +// duration of the first sequence.
|
| +class MinimizeAnimationObserver : public ui::LayerAnimationObserver {
|
| + public:
|
| + explicit MinimizeAnimationObserver(ui::LayerAnimator* animator)
|
| + : animator_(animator) {
|
| + animator_->AddObserver(this);
|
| + // RemoveObserver is called when the first animation is scheduled and so
|
| + // there should be no need for now to remove it in destructor.
|
| + };
|
| + base::TimeDelta duration() { return duration_; }
|
| +
|
| + protected:
|
| + // ui::LayerAnimationObserver:
|
| + virtual void OnLayerAnimationScheduled(
|
| + ui::LayerAnimationSequence* sequence) OVERRIDE {
|
| + duration_ = animator_->GetTransitionDuration();
|
| + animator_->RemoveObserver(this);
|
| + }
|
| + virtual void OnLayerAnimationEnded(
|
| + ui::LayerAnimationSequence* sequence) OVERRIDE {}
|
| + virtual void OnLayerAnimationAborted(
|
| + ui::LayerAnimationSequence* sequence) OVERRIDE {}
|
| +
|
| + private:
|
| + ui::LayerAnimator* animator_;
|
| + base::TimeDelta duration_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MinimizeAnimationObserver);
|
| +};
|
| +
|
| TEST_F(WindowAnimationsTest, HideShowBrightnessGrayscaleAnimation) {
|
| scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
|
| window->Show();
|
| @@ -136,5 +167,77 @@
|
| Step(base::TimeTicks::Now() + base::TimeDelta::FromSeconds(1));
|
| }
|
|
|
| +TEST_F(WindowAnimationsTest, LockAnimationDuration) {
|
| + ui::ScopedAnimationDurationScaleMode normal_duration_mode(
|
| + ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
|
| +
|
| + scoped_ptr<Window> window(CreateTestWindowInShellWithId(0));
|
| + Layer* layer = window->layer();
|
| + window->SetBounds(gfx::Rect(5, 10, 320, 240));
|
| + window->Show();
|
| +
|
| + // Test that it is possible to override transition duration when it is not
|
| + // locked.
|
| + {
|
| + ui::ScopedLayerAnimationSettings settings1(layer->GetAnimator());
|
| + settings1.SetTransitionDuration(base::TimeDelta::FromMilliseconds(1000));
|
| + {
|
| + ui::ScopedLayerAnimationSettings settings2(layer->GetAnimator());
|
| + // Duration is not locked so it gets overridden.
|
| + settings2.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
|
| + wm::GetWindowState(window.get())->Minimize();
|
| + EXPECT_TRUE(layer->GetAnimator()->is_animating());
|
| + // Expect duration from the inner scope
|
| + EXPECT_EQ(50,
|
| + layer->GetAnimator()->GetTransitionDuration().InMilliseconds());
|
| + }
|
| + window->Show();
|
| + layer->GetAnimator()->StopAnimating();
|
| + }
|
| +
|
| + // Test that it is possible to lock transition duration
|
| + {
|
| + ui::ScopedLayerAnimationSettings settings1(layer->GetAnimator());
|
| + settings1.SetTransitionDuration(base::TimeDelta::FromMilliseconds(1000));
|
| + // Duration is locked in outer scope.
|
| + settings1.LockTransitionDuration();
|
| + {
|
| + ui::ScopedLayerAnimationSettings settings2(layer->GetAnimator());
|
| + // Transition duration setting is ignored.
|
| + settings2.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
|
| + wm::GetWindowState(window.get())->Minimize();
|
| + EXPECT_TRUE(layer->GetAnimator()->is_animating());
|
| + // Expect duration from the outer scope
|
| + EXPECT_EQ(1000,
|
| + layer->GetAnimator()->GetTransitionDuration().InMilliseconds());
|
| + }
|
| + window->Show();
|
| + layer->GetAnimator()->StopAnimating();
|
| + }
|
| +
|
| + // Test that duration respects default.
|
| + {
|
| + // Query default duration.
|
| + MinimizeAnimationObserver observer(layer->GetAnimator());
|
| + wm::GetWindowState(window.get())->Minimize();
|
| + EXPECT_TRUE(layer->GetAnimator()->is_animating());
|
| + base::TimeDelta default_duration(observer.duration());
|
| + window->Show();
|
| + layer->GetAnimator()->StopAnimating();
|
| +
|
| + ui::ScopedLayerAnimationSettings settings(layer->GetAnimator());
|
| + settings.LockTransitionDuration();
|
| + // Setting transition duration is ignored since duration is locked
|
| + settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(1000));
|
| + wm::GetWindowState(window.get())->Minimize();
|
| + EXPECT_TRUE(layer->GetAnimator()->is_animating());
|
| + // Expect default duration (200ms for stock ash minimizing animation).
|
| + EXPECT_EQ(default_duration.InMilliseconds(),
|
| + layer->GetAnimator()->GetTransitionDuration().InMilliseconds());
|
| + window->Show();
|
| + layer->GetAnimator()->StopAnimating();
|
| + }
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace ash
|
|
|