Mir

Merge lp:~alan-griffiths/mir/Migrate-ServerConfigurationWrapping-to-Server-API into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alexandros Frantzis
Approved revision: no longer in the source branch.
Merged at revision: 2000
Proposed branch: lp:~alan-griffiths/mir/Migrate-ServerConfigurationWrapping-to-Server-API
Merge into: lp:mir
Prerequisite: lp:~alan-griffiths/mir/make-stub-a-graphics-platform
Diff against target: 230 lines (+77/-32)
5 files modified
include/server/mir/server.h (+6/-0)
server-ABI-sha1sums (+1/-1)
src/server/server.cpp (+3/-1)
src/server/symbols.map (+4/-5)
tests/acceptance-tests/server_configuration_wrapping.cpp (+63/-25)
To merge this branch: bzr merge lp:~alan-griffiths/mir/Migrate-ServerConfigurationWrapping-to-Server-API
Reviewer Review Type Date Requested Status
Alexandros Frantzis (community) Approve
Kevin DuBois (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+239184@code.launchpad.net

Commit message

test: Move one of the acceptance test suites [ServerConfigurationWrapping.*] to the mir::Server based API

Description of the change

test: Move one of the acceptance test suites [ServerConfigurationWrapping.*] to the mir::Server based API

This requires stubbing the graphics platform: Hence the dependency on lp:~alan-griffiths/mir/make-stub-a-graphics-platform.

Note that our existing StubbedServerConfiguration overrides more than this. Vis:

    std::shared_ptr<graphics::Platform> the_graphics_platform() override;
    std::shared_ptr<compositor::RendererFactory> the_renderer_factory() override;
    std::shared_ptr<input::InputManager> the_input_manager() override;
    std::shared_ptr<input::InputDispatcher> the_input_dispatcher() override;
    std::shared_ptr<shell::InputTargeter> the_input_targeter() override;
    std::shared_ptr<input::InputSender> the_input_sender() override;
    std::shared_ptr<graphics::Cursor> the_cursor() override;

Empirically, only stubbing the graphics platform was needed for this test to run successfully. But more of the above may be needed for other tests. I'll no doubt need to update and move the stubbing mechanism into a wider scope as I migrate further tests, but this seems enough for now.

(the_input_dispatcher() is already overridable as it is used by qtmir.)

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

8 + /// \return the session authorizer.
session coordinator?

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

looks good to me

review: Approve
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/server/mir/server.h'
2--- include/server/mir/server.h 2014-10-21 17:44:27 +0000
3+++ include/server/mir/server.h 2014-10-22 21:50:22 +0000
4@@ -214,6 +214,9 @@
5 /// \return the session authorizer.
6 auto the_session_authorizer() const -> std::shared_ptr<frontend::SessionAuthorizer>;
7
8+ /// \return the session coordinator.
9+ auto the_session_coordinator() const -> std::shared_ptr<scene::SessionCoordinator>;
10+
11 /// \return the session listener.
12 auto the_session_listener() const -> std::shared_ptr<scene::SessionListener>;
13
14@@ -222,6 +225,9 @@
15
16 /// \return the surface configurator.
17 auto the_surface_configurator() const -> std::shared_ptr<scene::SurfaceConfigurator>;
18+
19+ /// \return the surface coordinator.
20+ auto the_surface_coordinator() const -> std::shared_ptr<scene::SurfaceCoordinator>;
21 /** @} */
22
23 private:
24
25=== modified file 'server-ABI-sha1sums'
26--- server-ABI-sha1sums 2014-10-21 23:45:37 +0000
27+++ server-ABI-sha1sums 2014-10-22 21:50:22 +0000
28@@ -95,7 +95,7 @@
29 993e9f458ffc4288d304413f3fa0b1dcc95a093d include/server/mir/scene/surface_observer.h
30 7ef3e99901168cda296d74d05a979f47bf9c3ff1 include/server/mir/server_action_queue.h
31 8d83a51c278b8b71866d2178d9b6387c1f91a7d0 include/server/mir/server_configuration.h
32-19719fd8f04e4547a4a2ca3accce84fde2855c46 include/server/mir/server.h
33+fd0af42ba541a54c46298e6dca375c905444c885 include/server/mir/server.h
34 86098b500339bfccd07a9bed8298f75a68b18f5c include/server/mir/server_status_listener.h
35 860c04f32b60e680140148dc9dc2295de145b9c1 include/server/mir/shell/display_layout.h
36 6a2107b01feae13060d5c305804906e53c52e0be include/server/mir/shell/focus_controller.h
37
38=== modified file 'src/server/server.cpp'
39--- src/server/server.cpp 2014-10-21 17:28:57 +0000
40+++ src/server/server.cpp 2014-10-22 21:50:22 +0000
41@@ -53,9 +53,11 @@
42 MACRO(the_main_loop)\
43 MACRO(the_prompt_session_listener)\
44 MACRO(the_session_authorizer)\
45+ MACRO(the_session_coordinator)\
46 MACRO(the_session_listener)\
47 MACRO(the_shell_display_layout)\
48- MACRO(the_surface_configurator)
49+ MACRO(the_surface_configurator)\
50+ MACRO(the_surface_coordinator)
51
52 #define MIR_SERVER_BUILDER(name)\
53 std::function<std::result_of<decltype(&mir::DefaultServerConfiguration::the_##name)(mir::DefaultServerConfiguration*)>::type()> name##_builder;
54
55=== modified file 'src/server/symbols.map'
56--- src/server/symbols.map 2014-10-20 18:38:40 +0000
57+++ src/server/symbols.map 2014-10-22 21:50:22 +0000
58@@ -13,10 +13,10 @@
59 mir::compositor::Compositor::stop*;
60 mir::compositor::Scene::add_observer*;
61 mir::compositor::SceneElement::is_a_surface*;
62- mir::compositor::SceneElement::occluded_in*;
63+ mir::compositor::SceneElement::occluded*;
64 mir::compositor::SceneElement::operator*;
65 mir::compositor::SceneElement::renderable*;
66- mir::compositor::SceneElement::rendered_in*;
67+ mir::compositor::SceneElement::rendered*;
68 mir::compositor::SceneElement::?SceneElement*;
69 mir::compositor::SceneElement::SceneElement*;
70 mir::compositor::Scene::register_compositor*;
71@@ -423,9 +423,11 @@
72 mir::Server::the_main_loop*;
73 mir::Server::the_prompt_session_listener*;
74 mir::Server::the_session_authorizer*;
75+ mir::Server::the_session_coordinator*;
76 mir::Server::the_session_listener*;
77 mir::Server::the_shell_display_layout*;
78 mir::Server::the_surface_configurator*;
79+ mir::Server::the_surface_coordinator*;
80 mir::Server::wrap_display_configuration_policy*;
81 mir::Server::wrap_session_coordinator*;
82 mir::Server::wrap_surface_coordinator*;
83@@ -579,7 +581,6 @@
84 non-virtual?thunk?to?mir::input::CursorImages::?CursorImages*;
85 non-virtual?thunk?to?mir::input::CursorListener::?CursorListener*;
86 non-virtual?thunk?to?mir::input::EventFilter::?EventFilter*;
87- non-virtual?thunk?to?mir::input::InputConfiguration::?InputConfiguration*;
88 non-virtual?thunk?to?mir::input::InputDispatcher::?InputDispatcher*;
89 non-virtual?thunk?to?mir::input::Surface::?Surface*;
90 non-virtual?thunk?to?mir::input::TouchVisualizer::?TouchVisualizer*;
91@@ -641,7 +642,6 @@
92 typeinfo?for?mir::input::CursorListener;
93 typeinfo?for?mir::input::EventFilter;
94 typeinfo?for?mir::input::InputChannel;
95- typeinfo?for?mir::input::InputConfiguration;
96 typeinfo?for?mir::input::InputDispatcher;
97 typeinfo?for?mir::input::InputManager;
98 typeinfo?for?mir::input::Surface;
99@@ -699,7 +699,6 @@
100 vtable?for?mir::input::CursorListener;
101 vtable?for?mir::input::EventFilter;
102 vtable?for?mir::input::InputChannel;
103- vtable?for?mir::input::InputConfiguration;
104 vtable?for?mir::input::InputDispatcher;
105 vtable?for?mir::input::InputManager;
106 vtable?for?mir::input::Surface;
107
108=== modified file 'tests/acceptance-tests/server_configuration_wrapping.cpp'
109--- tests/acceptance-tests/server_configuration_wrapping.cpp 2014-05-23 12:59:00 +0000
110+++ tests/acceptance-tests/server_configuration_wrapping.cpp 2014-10-22 21:50:22 +0000
111@@ -19,14 +19,13 @@
112 #include "mir/shell/session_coordinator_wrapper.h"
113 #include "mir/shell/surface_coordinator_wrapper.h"
114
115-#include "mir_test_framework/stubbed_server_configuration.h"
116+#include "mir/server.h"
117
118 #include <gtest/gtest.h>
119 #include <gmock/gmock.h>
120
121 namespace ms = mir::scene;
122 namespace msh = mir::shell;
123-namespace mtf = mir_test_framework;
124
125 using namespace testing;
126
127@@ -45,27 +44,66 @@
128 MOCK_METHOD0(focus_next, void());
129 };
130
131-struct MyConfig : mtf::StubbedServerConfiguration
132-{
133- std::shared_ptr<ms::SurfaceCoordinator> wrap_surface_coordinator(
134- std::shared_ptr<ms::SurfaceCoordinator> const& wrapped) override
135- {
136- return std::make_shared<MySurfaceCoordinator>(wrapped);
137- }
138-
139- std::shared_ptr<ms::SessionCoordinator> wrap_session_coordinator(
140- std::shared_ptr<ms::SessionCoordinator> const& wrapped) override
141- {
142- return std::make_shared<MySessionCoordinator>(wrapped);
143- }
144-};
145-
146-struct ServerConfigurationWrapping : Test
147-{
148- MyConfig config;
149-
150- std::shared_ptr<ms::SurfaceCoordinator> surface_coordinator{config.the_surface_coordinator()};
151- std::shared_ptr<ms::SessionCoordinator> session_coordinator{config.the_session_coordinator()};
152+class TemporaryEnvironmentValue
153+{
154+public:
155+ TemporaryEnvironmentValue(char const* name, char const* value)
156+ : name{name},
157+ has_old_value{getenv(name) != nullptr},
158+ old_value{has_old_value ? getenv(name) : ""}
159+ {
160+ if (value)
161+ setenv(name, value, overwrite);
162+ else
163+ unsetenv(name);
164+ }
165+
166+ ~TemporaryEnvironmentValue()
167+ {
168+ if (has_old_value)
169+ setenv(name.c_str(), old_value.c_str(), overwrite);
170+ else
171+ unsetenv(name.c_str());
172+ }
173+
174+private:
175+ static int const overwrite = 1;
176+ std::string const name;
177+ bool const has_old_value;
178+ std::string const old_value;
179+};
180+
181+struct AcceptanceTest : Test
182+{
183+ AcceptanceTest() : platform("MIR_SERVER_PLATFORM_GRAPHICS_LIB", "libmirplatformstub.so") {}
184+
185+ TemporaryEnvironmentValue platform;
186+};
187+
188+struct ServerConfigurationWrapping : AcceptanceTest
189+{
190+ mir::Server server;
191+
192+ void SetUp() override
193+ {
194+ server.wrap_surface_coordinator([]
195+ (std::shared_ptr<ms::SurfaceCoordinator> const& wrapped)
196+ {
197+ return std::make_shared<MySurfaceCoordinator>(wrapped);
198+ });
199+
200+ server.wrap_session_coordinator([]
201+ (std::shared_ptr<ms::SessionCoordinator> const& wrapped)
202+ {
203+ return std::make_shared<MySessionCoordinator>(wrapped);
204+ });
205+
206+ surface_coordinator = server.the_surface_coordinator();
207+ session_coordinator = server.the_session_coordinator();
208+ }
209+
210+ std::shared_ptr<ms::SurfaceCoordinator> surface_coordinator;
211+ std::shared_ptr<ms::SessionCoordinator> session_coordinator;
212 };
213 }
214
215@@ -86,7 +124,7 @@
216
217 TEST_F(ServerConfigurationWrapping, returns_same_surface_coordinator_from_cache)
218 {
219- ASSERT_THAT(config.the_surface_coordinator(), Eq(surface_coordinator));
220+ ASSERT_THAT(server.the_surface_coordinator(), Eq(surface_coordinator));
221 }
222
223 TEST_F(ServerConfigurationWrapping, session_coordinator_is_of_wrapper_type)
224@@ -106,5 +144,5 @@
225
226 TEST_F(ServerConfigurationWrapping, returns_same_session_coordinator_from_cache)
227 {
228- ASSERT_THAT(config.the_session_coordinator(), Eq(session_coordinator));
229+ ASSERT_THAT(server.the_session_coordinator(), Eq(session_coordinator));
230 }

Subscribers

People subscribed via source and target branches