Index: chrome/browser/ui/app_list/test/app_list_shower_unittest.cc |
diff --git a/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc b/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..66224a9206dc3f14d0331d1b4a9fe09a368b133f |
--- /dev/null |
+++ b/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc |
@@ -0,0 +1,166 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/files/file_path.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/app_list/app_list.h" |
+#include "chrome/browser/ui/app_list/app_list_factory.h" |
+#include "chrome/browser/ui/app_list/app_list_shower.h" |
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h" |
+#include "chrome/browser/ui/app_list/test/fake_profile.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class FakeAppList : public AppList { |
+ public: |
+ explicit FakeAppList(Profile* profile) |
+ : profile_(profile) { |
+ } |
+ |
+ std::string profile_name() { |
+ return profile_->GetProfileName(); |
+ } |
+ |
+ // AppList overrides. |
+ virtual void Show() OVERRIDE { |
+ visible_ = true; |
+ } |
+ |
+ virtual void Hide() OVERRIDE { |
+ visible_ = false; |
+ } |
+ |
+ virtual void MoveNearCursor() OVERRIDE { |
+ } |
+ |
+ virtual bool IsVisible() OVERRIDE { |
+ return visible_; |
+ } |
+ |
+ virtual void Prerender() OVERRIDE { |
+ prerendered_ = true; |
+ } |
+ |
+ virtual gfx::NativeWindow GetWindow() OVERRIDE { |
+ return NULL; |
+ } |
+ |
+ virtual void SetProfile(Profile* profile) OVERRIDE { |
+ profile_ = profile; |
+ } |
+ |
+ Profile* profile_; |
+ bool visible_; |
+ bool prerendered_; |
+}; |
+ |
+class FakeFactory : public AppListFactory { |
+ public: |
+ FakeFactory() |
+ : views_created_(0) { |
+ } |
+ |
+ virtual AppList* CreateAppList( |
+ Profile* profile, |
+ AppListService* service, |
+ const base::Closure& on_should_dismiss) OVERRIDE { |
+ views_created_++; |
+ return new FakeAppList(profile); |
+ } |
+ |
+ int views_created_; |
+}; |
+ |
+class AppListShowerUnitTest : public testing::Test { |
+ public: |
+ virtual void SetUp() OVERRIDE { |
+ factory_ = new FakeFactory; |
+ shower_.reset( |
+ new AppListShower(scoped_ptr<AppListFactory>(factory_), |
+ NULL /* service */)); |
+ profile1_ = CreateProfile("p1").Pass(); |
+ profile2_ = CreateProfile("p2").Pass(); |
+ } |
+ |
+ virtual void TearDown() OVERRIDE { |
+ } |
+ |
+ scoped_ptr<FakeProfile> CreateProfile(const std::string& name) { |
+ return make_scoped_ptr(new FakeProfile(name)); |
+ } |
+ |
+ FakeAppList* GetCurrentAppList() { |
+ return static_cast<FakeAppList*>(shower_->app_list()); |
+ } |
+ |
+ bool HasKeepAlive() const { |
+ return shower_->keep_alive_.get() != NULL; |
+ } |
+ |
+ // Owned by |shower_|. |
+ FakeFactory* factory_; |
+ scoped_ptr<AppListShower> shower_; |
+ scoped_ptr<FakeProfile> profile1_; |
+ scoped_ptr<FakeProfile> profile2_; |
+}; |
+ |
+TEST_F(AppListShowerUnitTest, Preconditions) { |
+ EXPECT_FALSE(shower_->IsAppListVisible()); |
+ EXPECT_FALSE(shower_->HasView()); |
+ EXPECT_FALSE(HasKeepAlive()); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, ShowForProfilePutsViewOnScreen) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ EXPECT_TRUE(shower_->IsAppListVisible()); |
+ EXPECT_TRUE(shower_->HasView()); |
+ EXPECT_TRUE(HasKeepAlive()); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, HidingViewRemovesKeepalive) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ shower_->DismissAppList(); |
+ EXPECT_FALSE(shower_->IsAppListVisible()); |
+ EXPECT_TRUE(shower_->HasView()); |
+ EXPECT_FALSE(HasKeepAlive()); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, HideAndShowReusesView) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ shower_->DismissAppList(); |
+ shower_->ShowForProfile(profile1_.get()); |
+ EXPECT_EQ(1, factory_->views_created_); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, CloseAndShowRecreatesView) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ shower_->HandleViewBeingDestroyed(); |
+ shower_->ShowForProfile(profile1_.get()); |
+ EXPECT_EQ(2, factory_->views_created_); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, CloseRemovesView) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ shower_->HandleViewBeingDestroyed(); |
+ EXPECT_FALSE(shower_->IsAppListVisible()); |
+ EXPECT_FALSE(shower_->HasView()); |
+ EXPECT_FALSE(HasKeepAlive()); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, CloseAppListClearsProfile) { |
+ EXPECT_EQ(NULL, shower_->profile()); |
+ shower_->ShowForProfile(profile1_.get()); |
+ EXPECT_EQ(profile1_.get(), shower_->profile()); |
+ shower_->HandleViewBeingDestroyed(); |
+ EXPECT_EQ(NULL, shower_->profile()); |
+} |
+ |
+TEST_F(AppListShowerUnitTest, SwitchingProfiles) { |
+ shower_->ShowForProfile(profile1_.get()); |
+ EXPECT_EQ("p1", GetCurrentAppList()->profile_name()); |
+ shower_->ShowForProfile(profile2_.get()); |
+ EXPECT_EQ("p2", GetCurrentAppList()->profile_name()); |
+ |
+ // Shouldn't create new view for second profile - it should switch in place. |
+ EXPECT_EQ(1, factory_->views_created_); |
+} |