Index: athena/env/athena_env_unittest.cc |
diff --git a/athena/env/athena_env_unittest.cc b/athena/env/athena_env_unittest.cc |
index a4a4bf6824fb7848af54af3a8377f6e8bd8b58c2..e852f45fcee972632ffb77b1aef4ee028e2d95b9 100644 |
--- a/athena/env/athena_env_unittest.cc |
+++ b/athena/env/athena_env_unittest.cc |
@@ -11,6 +11,96 @@ |
namespace athena { |
+typedef test::AthenaTestBase AthenaEnvTest; |
+ |
+namespace { |
+ |
+class TerminatingCallback { |
+ public: |
+ TerminatingCallback() |
+ : on_terminating_count_(0), |
+ on_terminating_2_count_(0) { |
+ } |
+ |
+ void OnTerminating() { |
+ on_terminating_count_ ++; |
+ } |
+ |
+ void OnTerminating2() { |
+ on_terminating_2_count_ ++; |
+ } |
+ |
+ int on_terminating_count() const { return on_terminating_count_; } |
+ int on_terminating_2_count() const { return on_terminating_2_count_; } |
+ |
+ void Reset() { |
+ on_terminating_count_ = 0; |
+ on_terminating_2_count_ = 0; |
+ } |
+ |
+ private: |
+ int on_terminating_count_; |
+ int on_terminating_2_count_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TerminatingCallback); |
+}; |
+ |
+} // namespace |
+ |
+TEST_F(AthenaEnvTest, TerminatingCallback) { |
+ TerminatingCallback callback_1; |
+ TerminatingCallback callback_2; |
+ AthenaEnv* env = AthenaEnv::Get(); |
+ base::Closure cb_1_1 = |
+ base::Bind(&TerminatingCallback::OnTerminating, |
+ base::Unretained(&callback_1)); |
+ base::Closure cb_1_2 = |
+ base::Bind(&TerminatingCallback::OnTerminating2, |
+ base::Unretained(&callback_1)); |
+ base::Closure cb_2_1 = |
+ base::Bind(&TerminatingCallback::OnTerminating, |
+ base::Unretained(&callback_2)); |
+ |
+ env->AddTerminatingCallback(cb_1_1); |
+ env->AddTerminatingCallback(cb_1_2); |
+ env->AddTerminatingCallback(cb_2_1); |
+ env->OnTerminating(); |
+ |
+ EXPECT_EQ(1, callback_1.on_terminating_count()); |
+ EXPECT_EQ(1, callback_1.on_terminating_2_count()); |
+ EXPECT_EQ(1, callback_2.on_terminating_count()); |
+ |
+ // Remove callbacks. |
+ callback_1.Reset(); |
+ callback_2.Reset(); |
+ env->RemoveTerminatingCallback(cb_1_2); |
+ env->OnTerminating(); |
+ EXPECT_EQ(1, callback_1.on_terminating_count()); |
+ EXPECT_EQ(0, callback_1.on_terminating_2_count()); |
+ EXPECT_EQ(1, callback_2.on_terminating_count()); |
+ |
+ callback_1.Reset(); |
+ callback_2.Reset(); |
+ env->RemoveTerminatingCallback(cb_1_1); |
+ env->OnTerminating(); |
+ EXPECT_EQ(0, callback_1.on_terminating_count()); |
+ EXPECT_EQ(0, callback_1.on_terminating_2_count()); |
+ EXPECT_EQ(1, callback_2.on_terminating_count()); |
+ |
+ // Add removed callback. |
+ callback_1.Reset(); |
+ callback_2.Reset(); |
+ env->AddTerminatingCallback(cb_1_2); |
+ env->OnTerminating(); |
+ EXPECT_EQ(0, callback_1.on_terminating_count()); |
+ EXPECT_EQ(1, callback_1.on_terminating_2_count()); |
+ EXPECT_EQ(1, callback_2.on_terminating_count()); |
+ |
+ // Adding empty callback should not fail. |
+ env->AddTerminatingCallback(base::Closure()); |
+ env->OnTerminating(); |
+} |
+ |
namespace { |
class AthenaShutdownTest : public test::AthenaTestBase { |
@@ -29,7 +119,7 @@ class AthenaShutdownTest : public test::AthenaTestBase { |
DISALLOW_COPY_AND_ASSIGN(AthenaShutdownTest); |
}; |
-} // namespace athena |
+} // namespace |
// gfx::Screen should be accessible after shutdown. |
TEST_F(AthenaShutdownTest, Shutdown) { |