blob: 1ecbf86db73cdbc698b7de651124069cbe2032ed [file] [log] [blame]
// Copyright 2016 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 "base/message_loop/message_loop.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/mojo/traits_test_service.mojom.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/selection_bound.h"
#include "ui/gfx/transform.h"
namespace gfx {
namespace {
gfx::AcceleratedWidget castToAcceleratedWidget(int i) {
#if defined(USE_OZONE) || defined(USE_X11)
return static_cast<gfx::AcceleratedWidget>(i);
#else
return reinterpret_cast<gfx::AcceleratedWidget>(i);
#endif
}
class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
public:
StructTraitsTest() {}
protected:
mojom::TraitsTestServicePtr GetTraitsTestProxy() {
return traits_test_bindings_.CreateInterfacePtrAndBind(this);
}
private:
// TraitsTestService:
void EchoSelectionBound(const SelectionBound& s,
const EchoSelectionBoundCallback& callback) override {
callback.Run(s);
}
void EchoTransform(const Transform& t,
const EchoTransformCallback& callback) override {
callback.Run(t);
}
void EchoAcceleratedWidget(
const AcceleratedWidget& t,
const EchoAcceleratedWidgetCallback& callback) override {
callback.Run(t);
}
base::MessageLoop loop_;
mojo::BindingSet<TraitsTestService> traits_test_bindings_;
DISALLOW_COPY_AND_ASSIGN(StructTraitsTest);
};
} // namespace
TEST_F(StructTraitsTest, SelectionBound) {
const gfx::SelectionBound::Type type = gfx::SelectionBound::CENTER;
const gfx::PointF edge_top(1234.5f, 5678.6f);
const gfx::PointF edge_bottom(910112.5f, 13141516.6f);
const bool visible = true;
gfx::SelectionBound input;
input.set_type(type);
input.SetEdge(edge_top, edge_bottom);
input.set_visible(visible);
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
gfx::SelectionBound output;
proxy->EchoSelectionBound(input, &output);
EXPECT_EQ(type, output.type());
EXPECT_EQ(edge_top, output.edge_top());
EXPECT_EQ(edge_bottom, output.edge_bottom());
EXPECT_EQ(input.edge_top_rounded(), output.edge_top_rounded());
EXPECT_EQ(input.edge_bottom_rounded(), output.edge_bottom_rounded());
EXPECT_EQ(visible, output.visible());
}
TEST_F(StructTraitsTest, Transform) {
const float col1row1 = 1.f;
const float col2row1 = 2.f;
const float col3row1 = 3.f;
const float col4row1 = 4.f;
const float col1row2 = 5.f;
const float col2row2 = 6.f;
const float col3row2 = 7.f;
const float col4row2 = 8.f;
const float col1row3 = 9.f;
const float col2row3 = 10.f;
const float col3row3 = 11.f;
const float col4row3 = 12.f;
const float col1row4 = 13.f;
const float col2row4 = 14.f;
const float col3row4 = 15.f;
const float col4row4 = 16.f;
gfx::Transform input(col1row1, col2row1, col3row1, col4row1, col1row2,
col2row2, col3row2, col4row2, col1row3, col2row3,
col3row3, col4row3, col1row4, col2row4, col3row4,
col4row4);
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
gfx::Transform output;
proxy->EchoTransform(input, &output);
EXPECT_EQ(col1row1, output.matrix().get(0, 0));
EXPECT_EQ(col2row1, output.matrix().get(0, 1));
EXPECT_EQ(col3row1, output.matrix().get(0, 2));
EXPECT_EQ(col4row1, output.matrix().get(0, 3));
EXPECT_EQ(col1row2, output.matrix().get(1, 0));
EXPECT_EQ(col2row2, output.matrix().get(1, 1));
EXPECT_EQ(col3row2, output.matrix().get(1, 2));
EXPECT_EQ(col4row2, output.matrix().get(1, 3));
EXPECT_EQ(col1row3, output.matrix().get(2, 0));
EXPECT_EQ(col2row3, output.matrix().get(2, 1));
EXPECT_EQ(col3row3, output.matrix().get(2, 2));
EXPECT_EQ(col4row3, output.matrix().get(2, 3));
EXPECT_EQ(col1row4, output.matrix().get(3, 0));
EXPECT_EQ(col2row4, output.matrix().get(3, 1));
EXPECT_EQ(col3row4, output.matrix().get(3, 2));
EXPECT_EQ(col4row4, output.matrix().get(3, 3));
}
// AcceleratedWidgets can only be sent between processes on X11, Ozone, Win
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
#define MAYBE_AcceleratedWidget AcceleratedWidget
#else
#define MAYBE_AcceleratedWidget DISABLED_AcceleratedWidget
#endif
TEST_F(StructTraitsTest, MAYBE_AcceleratedWidget) {
gfx::AcceleratedWidget input(castToAcceleratedWidget(1001));
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
gfx::AcceleratedWidget output;
proxy->EchoAcceleratedWidget(input, &output);
EXPECT_EQ(input, output);
}
} // namespace gfx