• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
TerminatingCallback()20   TerminatingCallback()
21       : on_terminating_count_(0),
22         on_terminating_2_count_(0) {
23   }
24 
OnTerminating()25   void OnTerminating() {
26     on_terminating_count_ ++;
27   }
28 
OnTerminating2()29   void OnTerminating2() {
30     on_terminating_2_count_ ++;
31   }
32 
on_terminating_count() const33   int on_terminating_count() const { return on_terminating_count_; }
on_terminating_2_count() const34   int on_terminating_2_count() const { return on_terminating_2_count_; }
35 
Reset()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 
TEST_F(AthenaEnvTest,TerminatingCallback)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:
AthenaShutdownTest()110   AthenaShutdownTest() {}
~AthenaShutdownTest()111   virtual ~AthenaShutdownTest() {}
112 
TearDown()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.
TEST_F(AthenaShutdownTest,Shutdown)127 TEST_F(AthenaShutdownTest, Shutdown) {
128 }
129 
130 }  // namespace athena
131