// 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 "ui/compositor/layer_owner.h" #include "base/test/null_task_runner.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/compositor/compositor.h" #include "ui/compositor/layer.h" #include "ui/compositor/layer_animator.h" #include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/compositor/test/context_factories_for_test.h" #include "ui/gfx/native_widget_types.h" namespace ui { namespace { // Test fixture for LayerOwner tests that require a ui::Compositor. class LayerOwnerTestWithCompositor : public testing::Test { public: LayerOwnerTestWithCompositor(); ~LayerOwnerTestWithCompositor() override; void SetUp() override; void TearDown() override; protected: ui::Compositor* compositor() { return compositor_.get(); } private: scoped_ptr compositor_; DISALLOW_COPY_AND_ASSIGN(LayerOwnerTestWithCompositor); }; LayerOwnerTestWithCompositor::LayerOwnerTestWithCompositor() { } LayerOwnerTestWithCompositor::~LayerOwnerTestWithCompositor() { } void LayerOwnerTestWithCompositor::SetUp() { scoped_refptr task_runner = new base::NullTaskRunner(); ui::ContextFactory* context_factory = ui::InitializeContextFactoryForTests(false); compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget, context_factory, task_runner)); } void LayerOwnerTestWithCompositor::TearDown() { compositor_.reset(); ui::TerminateContextFactoryForTests(); } } // namespace TEST(LayerOwnerTest, RecreateLayerHonorsTargetVisibilityAndOpacity) { LayerOwner owner; Layer* layer = new Layer; layer->SetVisible(true); layer->SetOpacity(1.0f); owner.SetLayer(layer); ScopedLayerAnimationSettings settings(layer->GetAnimator()); layer->SetVisible(false); layer->SetOpacity(0.0f); EXPECT_TRUE(layer->visible()); EXPECT_EQ(1.0f, layer->opacity()); scoped_ptr old_layer(owner.RecreateLayer()); EXPECT_FALSE(owner.layer()->visible()); EXPECT_EQ(0.0f, owner.layer()->opacity()); } TEST(LayerOwnerTest, RecreateRootLayerWithNullCompositor) { LayerOwner owner; Layer* layer = new Layer; owner.SetLayer(layer); scoped_ptr layer_copy = owner.RecreateLayer(); EXPECT_EQ(nullptr, owner.layer()->GetCompositor()); EXPECT_EQ(nullptr, layer_copy->GetCompositor()); } TEST_F(LayerOwnerTestWithCompositor, RecreateRootLayerWithCompositor) { LayerOwner owner; Layer* layer = new Layer; owner.SetLayer(layer); compositor()->SetRootLayer(layer); scoped_ptr layer_copy = owner.RecreateLayer(); EXPECT_EQ(compositor(), owner.layer()->GetCompositor()); EXPECT_EQ(owner.layer(), compositor()->root_layer()); EXPECT_EQ(nullptr, layer_copy->GetCompositor()); } } // namespace ui