diff options
Diffstat (limited to 'mojo/shell/tests/lifecycle/lifecycle_unittest.cc')
-rw-r--r-- | mojo/shell/tests/lifecycle/lifecycle_unittest.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/mojo/shell/tests/lifecycle/lifecycle_unittest.cc b/mojo/shell/tests/lifecycle/lifecycle_unittest.cc index fd34f11..27e068f 100644 --- a/mojo/shell/tests/lifecycle/lifecycle_unittest.cc +++ b/mojo/shell/tests/lifecycle/lifecycle_unittest.cc @@ -18,6 +18,7 @@ namespace shell { namespace { const char kTestAppName[] = "mojo:lifecycle_unittest_app"; +const char kTestParentName[] = "mojo:lifecycle_unittest_parent"; const char kTestExeName[] = "exe:lifecycle_unittest_exe"; const char kTestPackageName[] = "mojo:lifecycle_unittest_package"; const char kTestPackageAppNameA[] = "mojo:lifecycle_unittest_package_app_a"; @@ -438,6 +439,34 @@ TEST_F(LifecycleTest, Exe_TerminateProcess) { EXPECT_EQ(0u, instances()->GetNewInstanceCount()); } +TEST_F(LifecycleTest, ShutdownTree) { + // Verifies that Instances are destroyed when their creator is. + scoped_ptr<Connection> parent_connection = + connector()->Connect(kTestParentName); + test::mojom::ParentPtr parent; + parent_connection->GetInterface(&parent); + + // This asks kTestParentName to open a connection to kTestAppName and blocks + // on a response from a Ping(). + { + base::RunLoop loop; + parent->ConnectToChild(base::Bind(&QuitLoop, &loop)); + loop.Run(); + } + + // Should now have two new instances (parent and child). + EXPECT_EQ(2u, instances()->GetNewInstanceCount()); + EXPECT_TRUE(instances()->HasInstanceForName(kTestParentName)); + EXPECT_TRUE(instances()->HasInstanceForName(kTestAppName)); + + parent->Quit(); + + // Quitting the parent should cascade-quit the child. + WaitForInstanceDestruction(); + EXPECT_EQ(0u, instances()->GetNewInstanceCount()); + EXPECT_FALSE(instances()->HasInstanceForName(kTestParentName)); + EXPECT_FALSE(instances()->HasInstanceForName(kTestAppName)); +} } // namespace shell } // namespace mojo |