1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "athena/env/public/athena_env.h" 6 7 #include "athena/test/athena_test_base.h" 8 #include "base/bind.h" 9 #include "ui/gfx/display.h" 10 #include "ui/gfx/screen.h" 11 12 namespace athena { 13 14 typedef test::AthenaTestBase AthenaEnvTest; 15 16 namespace { 17 18 class TerminatingCallback { 19 public: 20 TerminatingCallback() 21 : on_terminating_count_(0), 22 on_terminating_2_count_(0) { 23 } 24 25 void OnTerminating() { 26 on_terminating_count_ ++; 27 } 28 29 void OnTerminating2() { 30 on_terminating_2_count_ ++; 31 } 32 33 int on_terminating_count() const { return on_terminating_count_; } 34 int on_terminating_2_count() const { return on_terminating_2_count_; } 35 36 void Reset() { 37 on_terminating_count_ = 0; 38 on_terminating_2_count_ = 0; 39 } 40 41 private: 42 int on_terminating_count_; 43 int on_terminating_2_count_; 44 45 DISALLOW_COPY_AND_ASSIGN(TerminatingCallback); 46 }; 47 48 } // namespace 49 50 TEST_F(AthenaEnvTest, TerminatingCallback) { 51 TerminatingCallback callback_1; 52 TerminatingCallback callback_2; 53 AthenaEnv* env = AthenaEnv::Get(); 54 base::Closure cb_1_1 = 55 base::Bind(&TerminatingCallback::OnTerminating, 56 base::Unretained(&callback_1)); 57 base::Closure cb_1_2 = 58 base::Bind(&TerminatingCallback::OnTerminating2, 59 base::Unretained(&callback_1)); 60 base::Closure cb_2_1 = 61 base::Bind(&TerminatingCallback::OnTerminating, 62 base::Unretained(&callback_2)); 63 64 env->AddTerminatingCallback(cb_1_1); 65 env->AddTerminatingCallback(cb_1_2); 66 env->AddTerminatingCallback(cb_2_1); 67 env->OnTerminating(); 68 69 EXPECT_EQ(1, callback_1.on_terminating_count()); 70 EXPECT_EQ(1, callback_1.on_terminating_2_count()); 71 EXPECT_EQ(1, callback_2.on_terminating_count()); 72 73 // Remove callbacks. 74 callback_1.Reset(); 75 callback_2.Reset(); 76 env->RemoveTerminatingCallback(cb_1_2); 77 env->OnTerminating(); 78 EXPECT_EQ(1, callback_1.on_terminating_count()); 79 EXPECT_EQ(0, callback_1.on_terminating_2_count()); 80 EXPECT_EQ(1, callback_2.on_terminating_count()); 81 82 callback_1.Reset(); 83 callback_2.Reset(); 84 env->RemoveTerminatingCallback(cb_1_1); 85 env->OnTerminating(); 86 EXPECT_EQ(0, callback_1.on_terminating_count()); 87 EXPECT_EQ(0, callback_1.on_terminating_2_count()); 88 EXPECT_EQ(1, callback_2.on_terminating_count()); 89 90 // Add removed callback. 91 callback_1.Reset(); 92 callback_2.Reset(); 93 env->AddTerminatingCallback(cb_1_2); 94 env->OnTerminating(); 95 EXPECT_EQ(0, callback_1.on_terminating_count()); 96 EXPECT_EQ(1, callback_1.on_terminating_2_count()); 97 EXPECT_EQ(1, callback_2.on_terminating_count()); 98 99 // Adding empty callback should not fail. 100 env->AddTerminatingCallback(base::Closure()); 101 env->OnTerminating(); 102 env->RemoveTerminatingCallback(cb_1_2); 103 env->RemoveTerminatingCallback(cb_2_1); 104 } 105 106 namespace { 107 108 class AthenaShutdownTest : public test::AthenaTestBase { 109 public: 110 AthenaShutdownTest() {} 111 virtual ~AthenaShutdownTest() {} 112 113 virtual void TearDown() { 114 test::AthenaTestBase::TearDown(); 115 ASSERT_NE( 116 gfx::Display::kInvalidDisplayID, 117 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().id()); 118 } 119 120 private: 121 DISALLOW_COPY_AND_ASSIGN(AthenaShutdownTest); 122 }; 123 124 } // namespace 125 126 // gfx::Screen should be accessible after shutdown. 127 TEST_F(AthenaShutdownTest, Shutdown) { 128 } 129 130 } // namespace athena 131