21
21
#include " src/platforms/virtual/platform.h"
22
22
23
23
#include " mir/graphics/display_configuration.h"
24
+ #include " mir/graphics/default_display_configuration_policy.h"
24
25
25
26
#include " mir/test/doubles/null_display_configuration_policy.h"
26
27
#include " mir/test/doubles/mock_egl.h"
@@ -31,9 +32,8 @@ namespace mg = mir::graphics;
31
32
namespace mgv = mg::virt;
32
33
namespace mt = mir::test;
33
34
namespace mtd = mt::doubles;
34
- namespace geom = mir::geometry;
35
35
using namespace testing ;
36
-
36
+ using namespace mir ::geometry ;
37
37
38
38
namespace
39
39
{
@@ -58,14 +58,14 @@ class VirtualDisplayTest : public ::testing::Test
58
58
TEST_F (VirtualDisplayTest, reports_a_mode_size_that_matches_the_provided_size)
59
59
{
60
60
auto display = create_display ({
61
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }})
61
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
62
62
});
63
63
auto config = display->configuration ();
64
64
int output_count = 0 ;
65
65
config->for_each_output ([&output_count](mg::DisplayConfigurationOutput const & output)
66
66
{
67
67
EXPECT_THAT (output.modes .size (), Eq (1 ));
68
- EXPECT_THAT (output.modes [0 ].size , Eq (geom:: Size {1280 , 1024 }));
68
+ EXPECT_THAT (output.modes [0 ].size , Eq (Size {1280 , 1024 }));
69
69
output_count++;
70
70
});
71
71
@@ -75,15 +75,15 @@ TEST_F(VirtualDisplayTest, reports_a_mode_size_that_matches_the_provided_size)
75
75
TEST_F (VirtualDisplayTest, reports_multiple_mode_sizes_that_matches_the_provided_sizes)
76
76
{
77
77
auto display = create_display ({
78
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }, geom:: Size {800 , 600 }})
78
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }, Size {800 , 600 }})
79
79
});
80
80
auto config = display->configuration ();
81
81
int output_count = 0 ;
82
82
config->for_each_output ([&output_count](mg::DisplayConfigurationOutput const & output)
83
83
{
84
84
EXPECT_THAT (output.modes .size (), Eq (2 ));
85
- EXPECT_THAT (output.modes [0 ].size , Eq (geom:: Size {1280 , 1024 }));
86
- EXPECT_THAT (output.modes [1 ].size , Eq (geom:: Size {800 , 600 }));
85
+ EXPECT_THAT (output.modes [0 ].size , Eq (Size {1280 , 1024 }));
86
+ EXPECT_THAT (output.modes [1 ].size , Eq (Size {800 , 600 }));
87
87
output_count++;
88
88
});
89
89
@@ -93,8 +93,8 @@ TEST_F(VirtualDisplayTest, reports_multiple_mode_sizes_that_matches_the_provided
93
93
TEST_F (VirtualDisplayTest, reports_multiple_outputs_when_provided_multiple_outputs)
94
94
{
95
95
auto display = create_display ({
96
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }}),
97
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }})
96
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }}),
97
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
98
98
});
99
99
auto config = display->configuration ();
100
100
int output_count = 0 ;
@@ -109,8 +109,8 @@ TEST_F(VirtualDisplayTest, reports_multiple_outputs_when_provided_multiple_outpu
109
109
TEST_F (VirtualDisplayTest, for_each_display_group_iterates_no_display_groups)
110
110
{
111
111
auto display = create_display ({
112
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }}),
113
- mgv::VirtualOutputConfig ({geom:: Size {1280 , 1024 }})
112
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }}),
113
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
114
114
});
115
115
116
116
int count = 0 ;
@@ -122,4 +122,85 @@ TEST_F(VirtualDisplayTest, for_each_display_group_iterates_no_display_groups)
122
122
EXPECT_THAT (count, Eq (0 ));
123
123
}
124
124
125
- }
125
+ }
126
+
127
+ TEST_F (VirtualDisplayTest, displays_can_be_positioned)
128
+ {
129
+ auto display = create_display ({
130
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }}),
131
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
132
+ });
133
+
134
+ {
135
+ auto const conf = display->configuration ();
136
+
137
+ mg::SideBySideDisplayConfigurationPolicy{}.apply_to (*conf);
138
+
139
+ EXPECT_THAT (display->apply_if_configuration_preserves_display_buffers (*conf), IsTrue ());
140
+ }
141
+
142
+ auto const conf = display->configuration ();
143
+
144
+ std::vector<Point > positions;
145
+
146
+ conf->for_each_output ([&](mg::DisplayConfigurationOutput const & c) { positions.push_back (c.top_left ); });
147
+
148
+ EXPECT_THAT (positions, ElementsAre (Point {0 , 0 }, Point {1280 , 0 }));
149
+ }
150
+
151
+ TEST_F (VirtualDisplayTest, displays_can_be_inverted)
152
+ {
153
+ auto display = create_display ({
154
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }}),
155
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
156
+ });
157
+
158
+ {
159
+ auto const conf = display->configuration ();
160
+
161
+ conf->for_each_output ([](mg::UserDisplayConfigurationOutput& conf) { conf.orientation = mir_orientation_inverted; });
162
+
163
+ EXPECT_THAT (display->apply_if_configuration_preserves_display_buffers (*conf), IsTrue ());
164
+ }
165
+
166
+ auto const conf = display->configuration ();
167
+
168
+ std::vector<MirOrientation> orientations;
169
+
170
+ conf->for_each_output ([&](mg::DisplayConfigurationOutput const & c) { orientations.push_back (c.orientation ); });
171
+
172
+ EXPECT_THAT (orientations, ElementsAre (mir_orientation_inverted, mir_orientation_inverted));
173
+ }
174
+
175
+ TEST_F (VirtualDisplayTest, displays_can_be_resized_without_reallocating_buffers)
176
+ {
177
+ auto display = create_display ({
178
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }, Size {640 , 512 }}),
179
+ mgv::VirtualOutputConfig ({Size {1280 , 1024 }})
180
+ });
181
+
182
+ {
183
+ auto const conf = display->configuration ();
184
+
185
+ conf->for_each_output ([](mg::UserDisplayConfigurationOutput& conf)
186
+ {
187
+ if (conf.modes .size () > 1 )
188
+ {
189
+ conf.current_mode_index = 1 ;
190
+ }
191
+ });
192
+
193
+ // This may seem unexpected, but there are no buffers for this platform
194
+ EXPECT_THAT (display->apply_if_configuration_preserves_display_buffers (*conf), IsTrue ());
195
+ display->configure (*conf);
196
+ }
197
+
198
+ auto const conf = display->configuration ();
199
+
200
+ std::vector<Size > sizes;
201
+
202
+ conf->for_each_output ([&](mg::DisplayConfigurationOutput const & c)
203
+ { sizes.push_back (c.modes [c.current_mode_index ].size ); });
204
+
205
+ EXPECT_THAT (sizes, ElementsAre (Size {640 , 512 }, Size {1280 , 1024 }));
206
+ }
0 commit comments