| // Copyright (c) 2011 The Chromium OS 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 <gflags/gflags.h> |
| #include <gtest/gtest.h> |
| |
| #include "base/logging.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "window_manager/compositor/compositor.h" |
| #include "window_manager/image_grid.h" |
| #include "window_manager/shadow.h" |
| #include "window_manager/test_lib.h" |
| #include "window_manager/x11/mock_x_connection.h" |
| |
| DEFINE_bool(logtostderr, false, |
| "Print debugging messages to stderr (suppressed otherwise)"); |
| |
| DECLARE_string(rectangular_shadow_image_dir); // from shadow.cc |
| |
| namespace window_manager { |
| |
| class ShadowTest : public ::testing::Test { |
| protected: |
| virtual void SetUp() { |
| xconn_.reset(new MockXConnection); |
| compositor_.reset(new MockCompositor(xconn_.get())); |
| compositor_->set_should_load_images(true); |
| } |
| |
| scoped_ptr<MockXConnection> xconn_; |
| scoped_ptr<MockCompositor> compositor_; |
| }; |
| |
| TEST_F(ShadowTest, Basic) { |
| const int kShadowTopHeight = 2; |
| const int kShadowBottomHeight = 6; |
| const int kShadowLeftWidth = 4; |
| const int kShadowRightWidth = 4; |
| scoped_ptr<Shadow> shadow( |
| Shadow::Create(compositor_.get(), Shadow::TYPE_RECTANGULAR)); |
| |
| Rect kBounds(10, 20, 200, 100); |
| shadow->Move(kBounds.x, kBounds.y, 0); |
| shadow->Resize(kBounds.width, kBounds.height, 0); |
| |
| double kOpacity = 0.75; |
| shadow->SetOpacity(kOpacity, 0); |
| |
| // Check the group's position and scale. It should be offset based on the |
| // size of the shadow's top and left edges. |
| EXPECT_EQ(Point(kBounds.x - kShadowLeftWidth, |
| kBounds.y - kShadowTopHeight), |
| shadow->group()->GetBounds().position()); |
| EXPECT_DOUBLE_EQ(1.0, shadow->group()->GetXScale()); |
| EXPECT_DOUBLE_EQ(1.0, shadow->group()->GetYScale()); |
| |
| // Check the size of the ImageGrid. It should be the size of the window plus |
| // the size of the shadow's edges. |
| EXPECT_EQ(Size(kBounds.width + kShadowLeftWidth + kShadowRightWidth, |
| kBounds.height + kShadowTopHeight + kShadowBottomHeight), |
| shadow->grid_->size()); |
| |
| EXPECT_DOUBLE_EQ(kOpacity, shadow->group()->GetOpacity()); |
| } |
| |
| } // namespace window_manager |
| |
| int main(int argc, char** argv) { |
| // We need the image files for rectangular shadows to be present so that |
| // the image actors will be initialized. |
| FLAGS_rectangular_shadow_image_dir = "data/rectangular_shadow"; |
| return window_manager::InitAndRunTests(&argc, argv, &FLAGS_logtostderr); |
| } |