blob: 89c0fc66afe6989ad767da869d743bd78c49b962 [file] [log] [blame]
// Copyright (c) 2009 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/scoped_ptr.h"
#include "window_manager/compositor/compositor.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()));
}
scoped_ptr<MockXConnection> xconn_;
scoped_ptr<MockCompositor> compositor_;
};
TEST_F(ShadowTest, Basic) {
scoped_ptr<Shadow> shadow(
Shadow::Create(compositor_.get(), Shadow::TYPE_RECTANGULAR));
int x = 10;
int y = 20;
int w = 200;
int h = 100;
shadow->Move(x, y, 0);
shadow->Resize(w, h, 0);
shadow->SetOpacity(0.75, 0);
shadow->Show();
// Check the group transform
EXPECT_EQ(10, shadow->group_->GetX());
EXPECT_EQ(20, shadow->group_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->group_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->group_->GetYScale());
// Check the sides.
EXPECT_EQ(0, shadow->top_actor_->GetX());
EXPECT_EQ(-1, shadow->top_actor_->GetY());
EXPECT_FLOAT_EQ(200.0f, shadow->top_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->top_actor_->GetYScale());
EXPECT_EQ(0, shadow->bottom_actor_->GetX());
EXPECT_EQ(100, shadow->bottom_actor_->GetY());
EXPECT_FLOAT_EQ(200.0f, shadow->bottom_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->bottom_actor_->GetYScale());
EXPECT_EQ(-1, shadow->left_actor_->GetX());
EXPECT_EQ(0, shadow->left_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->left_actor_->GetXScale());
EXPECT_FLOAT_EQ(100.0f, shadow->left_actor_->GetYScale());
EXPECT_EQ(200, shadow->right_actor_->GetX());
EXPECT_EQ(0, shadow->right_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->right_actor_->GetXScale());
EXPECT_FLOAT_EQ(100.0f, shadow->right_actor_->GetYScale());
// Check the corners.
EXPECT_EQ(-1, shadow->top_left_actor_->GetX());
EXPECT_EQ(-1, shadow->top_left_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->top_left_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->top_left_actor_->GetYScale());
EXPECT_EQ(200, shadow->top_right_actor_->GetX());
EXPECT_EQ(-1, shadow->top_right_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->top_right_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->top_right_actor_->GetYScale());
EXPECT_EQ(200, shadow->bottom_right_actor_->GetX());
EXPECT_EQ(100, shadow->bottom_right_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->bottom_right_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->bottom_right_actor_->GetYScale());
EXPECT_EQ(-1, shadow->bottom_left_actor_->GetX());
EXPECT_EQ(100, shadow->bottom_left_actor_->GetY());
EXPECT_FLOAT_EQ(1.0f, shadow->bottom_left_actor_->GetXScale());
EXPECT_FLOAT_EQ(1.0f, shadow->bottom_left_actor_->GetYScale());
}
} // 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);
}