19
19
#include "mir/client_platform.h"
20
20
#include "mir/shared_library.h"
21
22
#include "src/platforms/mesa/client/mesa_native_display_container.h"
22
23
#include "mir_test_framework/client_platform_factory.h"
23
#include "mir_test_doubles/mock_egl_native_surface.h"
25
#include "mir_toolkit/mir_client_library.h"
25
26
#include "mir_toolkit/mesa/native_display.h"
27
#include "mir_toolkit/mesa/platform_operation.h"
27
29
#include <gtest/gtest.h>
30
#include <gmock/gmock.h>
29
32
namespace mcl = mir::client;
30
33
namespace mclm = mir::client::mesa;
31
namespace mt = mir::test;
32
namespace mtd = mir::test::doubles;
33
34
namespace mtf = mir_test_framework;
35
TEST(MesaClientPlatformTest, egl_native_display_is_valid_until_released)
37
auto platform = mtf::create_mesa_client_platform();
39
struct StubClientContext : mcl::ClientContext
41
void populate_server_package(MirPlatformPackage& platform_package) override
43
platform_package.data_items = 0;
44
platform_package.fd_items = 1;
49
struct MesaClientPlatformTest : testing::Test
51
MirPlatformMessage* set_gbm_device(gbm_device* dev)
53
auto request_msg = mir::raii::deleter_for(
54
mir_platform_message_create(MirMesaPlatformOperation::set_gbm_device),
55
&mir_platform_message_release);
56
MirMesaSetGBMDeviceRequest const request{dev};
57
mir_platform_message_set_data(request_msg.get(), &request, sizeof(request));
59
return platform->platform_operation(request_msg.get());
62
StubClientContext client_context;
63
std::shared_ptr<mir::client::ClientPlatform> platform =
64
mtf::create_mesa_client_platform(&client_context);
69
TEST_F(MesaClientPlatformTest, egl_native_display_is_valid_until_released)
38
71
auto platform_lib = mtf::get_platform_library();
40
73
MirMesaEGLNativeDisplay* nd;
48
81
EXPECT_EQ(MIR_MESA_FALSE, mclm::mir_client_mesa_egl_native_display_is_valid(nd));
84
TEST_F(MesaClientPlatformTest, handles_set_gbm_device_platform_operation)
86
using namespace testing;
89
auto const gbm_dev_dummy = reinterpret_cast<gbm_device*>(this);
91
auto response_msg = mir::raii::deleter_for(
92
set_gbm_device(gbm_dev_dummy),
93
&mir_platform_message_release);
95
ASSERT_THAT(response_msg, NotNull());
96
auto const response_data = mir_platform_message_get_data(response_msg.get());
97
ASSERT_THAT(response_data.size, Eq(sizeof(MirMesaSetGBMDeviceResponse)));
98
auto const response_ptr =
99
reinterpret_cast<MirMesaSetGBMDeviceResponse const*>(response_data.data);
100
EXPECT_THAT(response_ptr->status, Eq(success));
103
TEST_F(MesaClientPlatformTest, appends_gbm_device_to_platform_package)
105
using namespace testing;
107
MirPlatformPackage pkg;
108
platform->populate(pkg);
109
int const previous_data_count{pkg.data_items};
110
auto const gbm_dev_dummy = reinterpret_cast<gbm_device*>(this);
112
auto response_msg = mir::raii::deleter_for(
113
set_gbm_device(gbm_dev_dummy),
114
&mir_platform_message_release);
116
platform->populate(pkg);
117
EXPECT_THAT(pkg.data_items, Eq(previous_data_count + (sizeof(gbm_dev_dummy) / sizeof(int))));
118
EXPECT_THAT(reinterpret_cast<struct gbm_device*>(pkg.data[previous_data_count]),