1// Copyright (c) 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 "ui/wm/core/visibility_controller.h"
6
7#include "ui/aura/test/aura_test_base.h"
8#include "ui/aura/test/test_window_delegate.h"
9#include "ui/aura/test/test_windows.h"
10#include "ui/aura/window.h"
11#include "ui/aura/window_event_dispatcher.h"
12#include "ui/compositor/layer.h"
13#include "ui/compositor/layer_animator.h"
14#include "ui/compositor/scoped_animation_duration_scale_mode.h"
15#include "ui/compositor/scoped_layer_animation_settings.h"
16
17namespace wm {
18
19typedef aura::test::AuraTestBase VisibilityControllerTest;
20
21// Check that a transparency change to 0 will not cause a hide call to be
22// ignored.
23TEST_F(VisibilityControllerTest, AnimateTransparencyToZeroAndHideHides) {
24  // We cannot disable animations for this test.
25  ui::ScopedAnimationDurationScaleMode test_duration_mode(
26      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
27
28  VisibilityController controller;
29  aura::client::SetVisibilityClient(root_window(), &controller);
30
31  SetChildWindowVisibilityChangesAnimated(root_window());
32
33  aura::test::TestWindowDelegate d;
34  scoped_ptr<aura::Window> window(aura::test::CreateTestWindowWithDelegate(
35      &d, -2, gfx::Rect(0, 0, 50, 50), root_window()));
36  ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
37  settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(5));
38
39  EXPECT_TRUE(window->layer()->visible());
40  EXPECT_TRUE(window->IsVisible());
41
42  window->layer()->SetOpacity(0.0);
43  EXPECT_TRUE(window->layer()->visible());
44  EXPECT_TRUE(window->IsVisible());
45  EXPECT_TRUE(window->layer()->GetAnimator()->
46      IsAnimatingProperty(ui::LayerAnimationElement::OPACITY));
47  EXPECT_EQ(0.0f, window->layer()->GetTargetOpacity());
48
49  // Check that the visibility is correct after the hide animation has finished.
50  window->Hide();
51  window->layer()->GetAnimator()->StopAnimating();
52  EXPECT_FALSE(window->layer()->visible());
53  EXPECT_FALSE(window->IsVisible());
54}
55
56}  // namespace wm
57