~cemil-azizoglu/mir/nested_lifecycle_events_test

« back to all changes in this revision

Viewing changes to tests/unit-tests/scene/test_prompt_session_manager.cpp

  • Committer: Alan Griffiths
  • Author(s): Nick Dedekind
  • Date: 2014-06-18 14:11:20 UTC
  • mfrom: (1701.1.3 mir)
  • Revision ID: alan@octopull.co.uk-20140618141120-c4d3xdihfm3yx2gm
Fixed prompt session manager deadlock when calling helper_for, application_for or for_each_provider_in during a prompt session listener notification.

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
 
102
102
        return results;
103
103
    }
 
104
 
 
105
    void helper_for()
 
106
    {
 
107
        session_manager.helper_for(prompt_session);
 
108
    }
 
109
 
 
110
    void application_for()
 
111
    {
 
112
        session_manager.application_for(prompt_session);
 
113
    }
 
114
 
 
115
    void iterate_providers()
 
116
    {
 
117
        session_manager.for_each_provider_in(prompt_session,
 
118
                                             [](std::shared_ptr<ms::Session> const&) {});
 
119
    }
104
120
};
105
121
}
106
122
 
215
231
        [&](std::shared_ptr<ms::Session> const& prompt_provider)
216
232
            { mock.enumerate(prompt_provider); });
217
233
}
 
234
 
 
235
TEST_F(PromptSessionManager, can_fetch_application_during_listener_notifications)
 
236
{
 
237
    ON_CALL(prompt_session_listener, starting(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::application_for));
 
238
    ON_CALL(prompt_session_listener, stopping(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::application_for));
 
239
    ON_CALL(prompt_session_listener, prompt_provider_added(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::application_for));
 
240
    ON_CALL(prompt_session_listener, prompt_provider_removed(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::application_for));
 
241
 
 
242
    auto const prompt_session = session_manager.start_prompt_session_for(helper, parameters);
 
243
    session_manager.add_prompt_provider(prompt_session, provider_session);
 
244
    session_manager.remove_session(provider_session);
 
245
    session_manager.stop_prompt_session(prompt_session);
 
246
}
 
247
 
 
248
TEST_F(PromptSessionManager, can_fetch_helper_during_listener_notifications)
 
249
{
 
250
    ON_CALL(prompt_session_listener, starting(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::helper_for));
 
251
    ON_CALL(prompt_session_listener, stopping(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::helper_for));
 
252
    ON_CALL(prompt_session_listener, prompt_provider_added(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::helper_for));
 
253
    ON_CALL(prompt_session_listener, prompt_provider_removed(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::helper_for));
 
254
 
 
255
    auto const prompt_session = session_manager.start_prompt_session_for(helper, parameters);
 
256
    session_manager.add_prompt_provider(prompt_session, provider_session);
 
257
    session_manager.remove_session(provider_session);
 
258
    session_manager.stop_prompt_session(prompt_session);
 
259
}
 
260
 
 
261
TEST_F(PromptSessionManager, can_iterating_over_prompt_providers_during_listener_notifications)
 
262
{
 
263
    ON_CALL(prompt_session_listener, starting(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::iterate_providers));
 
264
    ON_CALL(prompt_session_listener, stopping(_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::iterate_providers));
 
265
    ON_CALL(prompt_session_listener, prompt_provider_added(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::iterate_providers));
 
266
    ON_CALL(prompt_session_listener, prompt_provider_removed(_,_)).WillByDefault(InvokeWithoutArgs(this, &PromptSessionManager::iterate_providers));
 
267
 
 
268
    auto const prompt_session = session_manager.start_prompt_session_for(helper, parameters);
 
269
    session_manager.add_prompt_provider(prompt_session, provider_session);
 
270
    session_manager.remove_session(provider_session);
 
271
    session_manager.stop_prompt_session(prompt_session);
 
272
}
 
 
b'\\ No newline at end of file'