27
27
#include "mir/graphics/platform.h"
28
28
#include "mir/graphics/platform_ipc_package.h"
29
29
#include "mir/surfaces/surface.h"
30
#include "mir_test_doubles/mock_display.h"
31
#include "mir_test_doubles/mock_display_changer.h"
30
32
#include "mir_test_doubles/null_display.h"
33
#include "mir_test_doubles/null_display_changer.h"
31
34
#include "mir_test_doubles/mock_display.h"
32
35
#include "mir_test_doubles/mock_shell.h"
33
36
#include "mir_test_doubles/mock_frontend_surface.h"
62
struct StubConfig : public mtd::NullDisplayConfig
64
StubConfig(std::shared_ptr<mg::DisplayConfigurationOutput> const& conf)
68
virtual void for_each_output(std::function<void(mg::DisplayConfigurationOutput const&)> f) const override
70
for(auto const& disp : outputs)
76
std::vector<std::shared_ptr<mg::DisplayConfigurationOutput>> outputs;
79
struct MockConfig : public mg::DisplayConfiguration
81
MOCK_CONST_METHOD1(for_each_card, void(std::function<void(mg::DisplayConfigurationCard const&)>));
82
MOCK_CONST_METHOD1(for_each_output, void(std::function<void(mg::DisplayConfigurationOutput const&)>));
83
MOCK_METHOD4(configure_output, void(mg::DisplayConfigurationOutputId, bool, geom::Point, size_t));
60
90
class StubbedSession : public mtd::StubSession
141
171
SessionMediatorTest()
142
172
: shell{std::make_shared<testing::NiceMock<mtd::MockShell>>()},
143
173
graphics_platform{std::make_shared<testing::NiceMock<MockPlatform>>()},
144
graphics_display{std::make_shared<mtd::NullDisplay>()},
174
graphics_changer{std::make_shared<mtd::NullDisplayChanger>()},
145
175
buffer_allocator{std::make_shared<testing::NiceMock<MockGraphicBufferAllocator>>()},
146
176
report{std::make_shared<mf::NullSessionMediatorReport>()},
147
177
resource_cache{std::make_shared<mf::ResourceCache>()},
148
mediator{shell, graphics_platform, graphics_display,
178
mediator{shell, graphics_platform, graphics_changer,
149
179
buffer_allocator, report,
150
180
std::make_shared<NullEventSink>(),
161
191
std::shared_ptr<testing::NiceMock<mtd::MockShell>> const shell;
162
192
std::shared_ptr<MockPlatform> const graphics_platform;
163
std::shared_ptr<mg::Display> const graphics_display;
193
std::shared_ptr<msh::DisplayChanger> const graphics_changer;
164
194
std::shared_ptr<testing::NiceMock<MockGraphicBufferAllocator>> const buffer_allocator;
165
195
std::shared_ptr<mf::SessionMediatorReport> const report;
166
196
std::shared_ptr<mf::ResourceCache> const resource_cache;
299
329
mediator.connect(nullptr, &connect_parameters, &connection, null_callback.get());
304
struct StubConfig : public mg::DisplayConfiguration
306
StubConfig(std::shared_ptr<mg::DisplayConfigurationOutput> const& conf)
307
: outputs{conf, conf}
310
virtual void for_each_card(std::function<void(mg::DisplayConfigurationCard const&)>) const
313
virtual void for_each_output(std::function<void(mg::DisplayConfigurationOutput const&)> f) const
315
for (auto const& disp : outputs)
320
virtual void configure_output(mg::DisplayConfigurationOutputId, bool, geom::Point, size_t)
324
std::vector<std::shared_ptr<mg::DisplayConfigurationOutput>> outputs;
329
332
TEST_F(SessionMediatorTest, connect_packs_display_output)
331
334
using namespace testing;
341
344
StubConfig config(mt::fake_shared(output));
343
auto mock_display = std::make_shared<mtd::MockDisplay>();
344
EXPECT_CALL(*mock_display, configuration())
346
auto mock_display = std::make_shared<mtd::MockDisplayChanger>();
347
EXPECT_CALL(*mock_display, active_configuration())
346
349
.WillOnce(Return(mt::fake_shared(config)));
347
mf::SessionMediator mediator{
350
mf::SessionMediator mediator(
348
351
shell, graphics_platform, mock_display,
349
352
buffer_allocator, report,
350
353
std::make_shared<NullEventSink>(),
353
356
mp::ConnectParameters connect_parameters;
354
357
mp::Connection connection;
478
481
mediator.disconnect(nullptr, nullptr, nullptr, null_callback.get());
484
TEST_F(SessionMediatorTest, display_config_request)
486
using namespace testing;
487
mp::ConnectParameters connect_parameters;
488
mp::Connection connection;
490
bool used0 = false, used1 = true;
491
geom::Point pt0{44,22}, pt1{3,2};
492
size_t mode_index0 = 1, mode_index1 = 3;
493
mg::DisplayConfigurationOutputId id0{6}, id1{3};
495
NiceMock<MockConfig> mock_display_config;
496
auto mock_display_selector = std::make_shared<mtd::MockDisplayChanger>();
499
EXPECT_CALL(*mock_display_selector, active_configuration())
501
.WillOnce(Return(mt::fake_shared(mock_display_config)));
502
EXPECT_CALL(*mock_display_selector, active_configuration())
504
.WillOnce(Return(mt::fake_shared(mock_display_config)));
505
EXPECT_CALL(mock_display_config, configure_output(id0, used0, pt0, mode_index0))
507
EXPECT_CALL(mock_display_config, configure_output(id1, used1, pt1, mode_index1))
509
EXPECT_CALL(*mock_display_selector, configure(_,_))
512
mf::SessionMediator session_mediator{
513
shell, graphics_platform, mock_display_selector,
514
buffer_allocator, report, std::make_shared<NullEventSink>(), resource_cache};
516
session_mediator.connect(nullptr, &connect_parameters, &connection, null_callback.get());
519
mp::DisplayConfiguration configuration;
520
auto disp0 = configuration.add_display_output();
521
disp0->set_output_id(id0.as_value());
522
disp0->set_used(used0);
523
disp0->set_position_x(pt0.x.as_uint32_t());
524
disp0->set_position_y(pt0.y.as_uint32_t());
525
disp0->set_current_mode(mode_index0);
527
auto disp1 = configuration.add_display_output();
528
disp1->set_output_id(id1.as_value());
529
disp1->set_used(used1);
530
disp1->set_position_x(pt1.x.as_uint32_t());
531
disp1->set_position_y(pt1.y.as_uint32_t());
532
disp1->set_current_mode(mode_index1);
534
session_mediator.configure_display(nullptr, &configuration, &ignored, null_callback.get());
536
session_mediator.disconnect(nullptr, nullptr, nullptr, null_callback.get());