TEST_F(ContextCreatorTest, ClearAndTeardown) { // Create a context and verify it gets evicted from the context creator: std::weak_ptr<CoreContext> ctxtWeak; { AutoCreateContext mainContext; CurrentContextPusher pusher(mainContext); AutoRequired<Creator> creator; std::shared_ptr<CoreContext> ctxt; // Make a sub-context ctxt = creator->CreateContext(0).first; // Obtain a weak pointer, in order to ensure proper teardown: ctxtWeak = ctxt; //Call clear on the creator. creator->Clear(true); //Make another one! ctxt = creator->CreateContext(1).first; //Let the creator go out of scope } // Context must be destroyed as a precondition of the subsequent assertion ASSERT_TRUE(ctxtWeak.expired()) << "Expected the context to be destroyed"; // Verify that our creator is now empty: // ASSERT_EQ(0UL, creator->GetSize()) << "Context creator is non-empty after all created contexts were destroyed"; }
TEST_F(ContextCreatorTest, TeardownListenerTest) { // Create a context and verify teardown happens as expected AutoCreateContext mainContext; CurrentContextPusher pusher(mainContext); AutoRequired<ContextCreator<mySigil, int>> creator; { auto subctxt = creator->CreateContext(0).first; auto brc = subctxt->Inject<Runnable>(); subctxt->Initiate(); } creator->Clear(true); ASSERT_TRUE(true) << "Really all this test has to do is not crash by this point."; }
TEST_F(ContextCreatorTest, VoidKeyType) { AutoRequired<VoidCreator> vc; { std::shared_ptr<CoreContext> ctxt = vc->CreateContext(); ASSERT_EQ(1UL, vc->GetSize()) << "Requested that a context be created, but the void creator did not have any members"; ASSERT_EQ(1UL, vc->GetSize()) << "A created context was apparently destroyed after firing bolts"; ASSERT_EQ(0UL, vc->m_totalDestroyed) << "The void creator received a NotifyContextDestroyed call unexpectedly early"; vc->Clear(true); //Make another one to check about collisions std::shared_ptr<CoreContext> ctxt2 = vc->CreateContext(); ASSERT_EQ(1UL, vc->GetSize()) << "Second void context creation failed!"; } ASSERT_EQ(0UL, vc->GetSize()) << "A void context creator was not correctly updated when its dependent context went out of scope"; ASSERT_EQ(2UL, vc->m_totalDestroyed) << "The void creator did not receive the expected number of NotifyContextDestroyed calls"; }