2
* Copyright (C) 2015-2016 Canonical, Ltd.
4
* This program is free software: you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License version 3, as published by
6
* the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10
* SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
#ifndef STUB_DISPLAY_H
18
#define STUB_DISPLAY_H
20
#include <mir/test/doubles/null_display.h>
21
#include <mir/test/doubles/null_display_sync_group.h>
22
namespace mg = mir::graphics; // Bug lp:1614983
23
#include <mir/test/doubles/mock_display_configuration.h>
25
#include <mir/compositor/display_listener.h>
27
namespace geom = mir::geometry;
29
using NullDisplay = mir::test::doubles::NullDisplay;
30
using MockDisplayConfiguration = mir::test::doubles::MockDisplayConfiguration;
32
class MockGLDisplayBuffer;
34
class StubDisplayConfiguration : public MockDisplayConfiguration
37
StubDisplayConfiguration(const std::vector<mg::DisplayConfigurationOutput> &config)
41
void for_each_output(std::function<void(mg::DisplayConfigurationOutput const&)> f) const override
43
for (auto config : m_config) {
49
const std::vector<mg::DisplayConfigurationOutput> m_config;
53
class StubDisplaySyncGroup : public mir::test::doubles::NullDisplaySyncGroup
56
StubDisplaySyncGroup(mg::DisplayBuffer *buffer) : m_buffer(buffer) {}
58
void for_each_display_buffer(std::function<void(mg::DisplayBuffer&)> const& f) override
64
mg::DisplayBuffer *m_buffer;
68
class StubDisplay : public NullDisplay
71
// Note, GMock cannot mock functions which return non-copyable objects, so stubbing needed
72
std::unique_ptr<mg::DisplayConfiguration> configuration() const override
74
return std::unique_ptr<mg::DisplayConfiguration>(
75
new StubDisplayConfiguration(m_config)
79
void for_each_display_sync_group(std::function<void(mg::DisplaySyncGroup&)> const& f) override
81
for (auto displayBuffer : m_displayBuffers) {
82
StubDisplaySyncGroup b(reinterpret_cast<mg::DisplayBuffer *>(displayBuffer));
87
void setFakeConfiguration(std::vector<mg::DisplayConfigurationOutput> &config,
88
std::vector<MockGLDisplayBuffer*> displayBuffers)
91
m_displayBuffers = displayBuffers;
95
std::vector<mg::DisplayConfigurationOutput> m_config;
96
std::vector<MockGLDisplayBuffer*> m_displayBuffers;
99
class StubDisplayListener : public mir::compositor::DisplayListener
101
void add_display(mir::geometry::Rectangle const& /*area*/) override {};
103
void remove_display(mir::geometry::Rectangle const& /*area*/) override {};
106
#endif // STUB_DISPLAY_H