Index: chrome/browser/chromeos/login/update_screen_browsertest.cc |
=================================================================== |
--- chrome/browser/chromeos/login/update_screen_browsertest.cc (revision 0) |
+++ chrome/browser/chromeos/login/update_screen_browsertest.cc (revision 0) |
@@ -0,0 +1,248 @@ |
+// Copyright (c) 2010 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 "chrome/browser/chromeos/cros/mock_login_library.h" |
+#include "chrome/browser/chromeos/cros/mock_update_library.h" |
+#include "chrome/browser/chromeos/login/mock_screen_observer.h" |
+#include "chrome/browser/chromeos/login/update_screen.h" |
+#include "chrome/browser/chromeos/login/wizard_controller.h" |
+#include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace chromeos { |
+using ::testing::_; |
+using ::testing::AtLeast; |
+using ::testing::Return; |
+using ::testing::ReturnRef; |
+ |
+class UpdateScreenTest : public WizardInProcessBrowserTest { |
+ public: |
+ UpdateScreenTest() : WizardInProcessBrowserTest("update"), |
+ mock_login_library_(NULL), |
+ mock_update_library_(NULL) {} |
+ |
+ protected: |
+ virtual void SetUpInProcessBrowserTestFixture() { |
+ WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
+ cros_mock_->InitStatusAreaMocks(); |
+ cros_mock_->SetStatusAreaMocksExpectations(); |
+ ASSERT_TRUE(CrosLibrary::Get()->EnsureLoaded()); |
+ |
+ mock_login_library_ = new MockLoginLibrary(); |
+ cros_mock_->test_api()->SetLoginLibrary(mock_login_library_, true); |
+ EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady()) |
+ .Times(1); |
+ |
+ mock_update_library_ = new MockUpdateLibrary(); |
+ cros_mock_->test_api()->SetUpdateLibrary(mock_update_library_, true); |
+ |
+ // UpdateScreen::StartUpdate() will be called by the WizardController |
+ // just after creating the update screen, so the expectations for that |
+ // should be set up here. |
+ EXPECT_CALL(*mock_update_library_, AddObserver(_)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) |
+ .Times(AtLeast(1)); |
+ EXPECT_CALL(*mock_update_library_, CheckForUpdate()) |
+ .Times(1) |
+ .WillOnce(Return(true)); |
+ } |
+ |
+ virtual void TearDownInProcessBrowserTestFixture() { |
+ cros_mock_->test_api()->SetUpdateLibrary(NULL, true); |
+ WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
+ } |
+ |
+ MockLoginLibrary* mock_login_library_; |
+ MockUpdateLibrary* mock_update_library_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ UpdateView* update_view = update_screen->view(); |
+ ASSERT_TRUE(update_view != NULL); |
+ controller()->set_observer(NULL); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestNoUpdate) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ update_screen->SetMinimalUpdateTime(0); |
+ |
+ UpdateLibrary::Status status; |
+ status.status = UPDATE_STATUS_IDLE; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ EXPECT_CALL(*mock_screen_observer, OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
+ .Times(1); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ controller()->set_observer(NULL); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestUpdateAvailable) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ update_screen->SetMinimalUpdateTime(0); |
+ |
+ UpdateLibrary::Status status; |
+ |
+ status.status = UPDATE_STATUS_UPDATE_AVAILABLE; |
+ status.new_version = "latest and greatest"; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.status = UPDATE_STATUS_DOWNLOADING; |
+ status.download_progress = 0.0; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.download_progress = 0.5; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.download_progress = 1.0; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.status = UPDATE_STATUS_VERIFYING; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.status = UPDATE_STATUS_FINALIZING; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.status = UPDATE_STATUS_UPDATED_NEED_REBOOT; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ EXPECT_CALL(*mock_update_library_, RebootAfterUpdate()) |
+ .Times(1); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ controller()->set_observer(NULL); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorIssuingUpdateCheck) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ update_screen->SetMinimalUpdateTime(0); |
+ |
+ UpdateLibrary::Status status; |
+ |
+ // First, cancel the update that is already in progress. |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->CancelUpdate(); |
+ |
+ // Run UpdateScreen::StartUpdate() again, but CheckForUpdate() will fail |
+ // issuing the update check this time. |
+ EXPECT_CALL(*mock_update_library_, AddObserver(_)) |
+ .Times(1); |
+ EXPECT_CALL(*mock_update_library_, RemoveObserver(_)) |
+ .Times(AtLeast(1)); |
+ EXPECT_CALL(*mock_update_library_, CheckForUpdate()) |
+ .Times(1) |
+ .WillOnce(Return(false)); |
+ |
+ status.status = UPDATE_STATUS_ERROR; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ EXPECT_CALL(*mock_screen_observer, |
+ OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
+ .Times(1); |
+ update_screen->StartUpdate(); |
+ |
+ controller()->set_observer(NULL); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorCheckingForUpdate) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ update_screen->SetMinimalUpdateTime(0); |
+ |
+ UpdateLibrary::Status status; |
+ status.status = UPDATE_STATUS_ERROR; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ EXPECT_CALL(*mock_screen_observer, |
+ OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
+ .Times(1); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ controller()->set_observer(NULL); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestErrorUpdating) { |
+ ASSERT_TRUE(controller() != NULL); |
+ scoped_ptr<MockScreenObserver> mock_screen_observer(new MockScreenObserver()); |
+ controller()->set_observer(mock_screen_observer.get()); |
+ UpdateScreen* update_screen = controller()->GetUpdateScreen(); |
+ ASSERT_TRUE(update_screen != NULL); |
+ ASSERT_EQ(controller()->current_screen(), update_screen); |
+ update_screen->SetMinimalUpdateTime(0); |
+ |
+ UpdateLibrary::Status status; |
+ |
+ status.status = UPDATE_STATUS_UPDATE_AVAILABLE; |
+ status.new_version = "latest and greatest"; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ status.status = UPDATE_STATUS_ERROR; |
+ EXPECT_CALL(*mock_update_library_, status()) |
+ .Times(AtLeast(1)) |
+ .WillRepeatedly(ReturnRef(status)); |
+ EXPECT_CALL(*mock_screen_observer, |
+ OnExit(ScreenObserver::UPDATE_ERROR_UPDATING)) |
+ .Times(1); |
+ update_screen->UpdateStatusChanged(mock_update_library_); |
+ |
+ controller()->set_observer(NULL); |
+} |
+ |
+} // namespace chromeos |
Property changes on: chrome/browser/chromeos/login/update_screen_browsertest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |