| Index: athena/env/athena_env_unittest.cc
|
| diff --git a/athena/env/athena_env_unittest.cc b/athena/env/athena_env_unittest.cc
|
| index 1c092a2cd1f22f17d2863a687af37be193d299f4..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 {
|
|
|