diff options
author | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-24 19:52:05 +0000 |
---|---|---|
committer | nkostylev@google.com <nkostylev@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-24 19:52:05 +0000 |
commit | 7c79d2454c5a26b9c6723008aecb32fa871edd14 (patch) | |
tree | feb9fd525ff718b6024d968874f56933cacda27c | |
parent | 484b2908dab59f530a1b9ab2894d44757352cf26 (diff) | |
download | chromium_src-7c79d2454c5a26b9c6723008aecb32fa871edd14.zip chromium_src-7c79d2454c5a26b9c6723008aecb32fa871edd14.tar.gz chromium_src-7c79d2454c5a26b9c6723008aecb32fa871edd14.tar.bz2 |
Create trivial test for OOBE network selection screen.
Create base class for Chromium OS tests mocking CrosLibrary.
Fix CrosLibrary mocks.
TEST=out/Debug/browser_tests --gtest_filter=NetworkScreenTest*
Review URL: http://codereview.chromium.org/1279002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42517 0039d316-1c4b-4281-b951-d872f2087c98
8 files changed, 294 insertions, 6 deletions
diff --git a/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc b/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc new file mode 100644 index 0000000..8364232 --- /dev/null +++ b/chrome/browser/chromeos/cros/cros_in_process_browser_test.cc @@ -0,0 +1,135 @@ +// 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/cros_in_process_browser_test.h" + +#include "base/message_loop.h" +#include "base/ref_counted.h" +#include "base/time.h" +#include "chrome/browser/browser.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/login/wizard_controller.h" +#include "chrome/browser/chromeos/login/wizard_screen.h" +#include "chrome/test/in_process_browser_test.h" +#include "chrome/test/ui_test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace chromeos { +using ::testing::AnyNumber; +using ::testing::InvokeWithoutArgs; +using ::testing::Return; +using ::testing::ReturnRef; +using ::testing::_; + +CrosInProcessBrowserTest::CrosInProcessBrowserTest() { +} + +CrosInProcessBrowserTest::~CrosInProcessBrowserTest() { +} + +void CrosInProcessBrowserTest::SetUpInProcessBrowserTestFixture() { + chromeos::CrosLibrary::TestApi* test_api = + chromeos::CrosLibrary::Get()->GetTestApi(); + + loader_ = new MockLibraryLoader(); + EXPECT_CALL(*loader_, Load(_)) + .Times(AnyNumber()) + .WillRepeatedly(Return(true)); + + test_api->SetLibraryLoader(loader_); + + // Create minimal mocks for status bar. + mock_language_library_ = new MockLanguageLibrary(); + test_api->SetLanguageLibrary(mock_language_library_); + EXPECT_CALL(*mock_language_library_, AddObserver(_)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_language_library_, GetActiveLanguages()) + .Times(AnyNumber()) + .WillRepeatedly(Return(CreateFallbackInputLanguageList())); + EXPECT_CALL(*mock_language_library_, current_ime_properties()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(ime_properties_))); + EXPECT_CALL(*mock_language_library_, current_language()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(language_))); + EXPECT_CALL(*mock_language_library_, RemoveObserver(_)) + .Times(AnyNumber()); + + mock_network_library_ = new MockNetworkLibrary(); + test_api->SetNetworkLibrary(mock_network_library_); + EXPECT_CALL(*mock_network_library_, AddObserver(_)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_network_library_, wifi_connecting()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, wifi_connected()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, cellular_connecting()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, cellular_connected()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, ethernet_connected()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, Connected()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, Connecting()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + /*EXPECT_CALL(*mock_network_library_, wifi_networks()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(wifi_networks_))); + EXPECT_CALL(*mock_network_library_, cellular_networks()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(cellular_networks_)));*/ + EXPECT_CALL(*mock_network_library_, RemoveObserver(_)) + .Times(AnyNumber()); + + mock_power_library_ = new MockPowerLibrary(); + test_api->SetPowerLibrary(mock_power_library_); + EXPECT_CALL(*mock_power_library_, AddObserver(_)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_power_library_, battery_fully_charged()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_power_library_, battery_is_present()) + .Times(AnyNumber()) + .WillRepeatedly((Return(true))); + EXPECT_CALL(*mock_power_library_, battery_percentage()) + .Times(AnyNumber()) + .WillRepeatedly((Return(42.0))); + EXPECT_CALL(*mock_power_library_, line_power_on()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_power_library_, battery_time_to_empty()) + .Times(AnyNumber()) + .WillRepeatedly((Return(base::TimeDelta::FromMinutes(42)))); + EXPECT_CALL(*mock_power_library_, RemoveObserver(_)) + .Times(AnyNumber()); + + mock_synaptics_library_ = new MockSynapticsLibrary(); + test_api->SetSynapticsLibrary(mock_synaptics_library_); + EXPECT_CALL(*mock_synaptics_library_, SetBoolParameter(_, _)) + .Times(AnyNumber()); + EXPECT_CALL(*mock_synaptics_library_, SetRangeParameter(_, _)) + .Times(AnyNumber()); +} + +void CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture() { + // Prevent bogus gMock leak check from firing. + chromeos::CrosLibrary::TestApi* test_api = + chromeos::CrosLibrary::Get()->GetTestApi(); + test_api->SetLibraryLoader(NULL); + test_api->SetLanguageLibrary(NULL); + test_api->SetNetworkLibrary(NULL); + test_api->SetPowerLibrary(NULL); + test_api->SetSynapticsLibrary(NULL); +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/cros/cros_in_process_browser_test.h b/chrome/browser/chromeos/cros/cros_in_process_browser_test.h new file mode 100644 index 0000000..c367f20 --- /dev/null +++ b/chrome/browser/chromeos/cros/cros_in_process_browser_test.h @@ -0,0 +1,57 @@ +// 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/test/in_process_browser_test.h" + +#include "chrome/browser/chromeos/cros/mock_language_library.h" +#include "chrome/browser/chromeos/cros/mock_library_loader.h" +#include "chrome/browser/chromeos/cros/mock_network_library.h" +#include "chrome/browser/chromeos/cros/mock_power_library.h" +#include "chrome/browser/chromeos/cros/mock_synaptics_library.h" +#include "third_party/cros/chromeos_language.h" + +namespace chromeos { + +// Base class for Chromium OS tests wanting to bring up a browser in the +// unit test process and mock some parts of CrosLibrary. Once you mock part of +// CrosLibrary it will be considered as successfully loaded and libraries +// that compose CrosLibrary will be created. The issue here is that you do +// need to specify minimum set of mocks for you test to succeed. +// CrosInProcessBrowserTest creates minimum set of mocks that is used +// by status bar elements (network, input language, power). +// See comments for InProcessBrowserTest base class too. +class CrosInProcessBrowserTest : public InProcessBrowserTest { + public: + CrosInProcessBrowserTest(); + virtual ~CrosInProcessBrowserTest(); + + protected: + // These functions are overriden from InProcessBrowserTest. + // Called before your individual test fixture method is run, but after most + // of the overhead initialization has occured. + // This method set ups basic mocks that are used by status bar items and + // setups corresponding expectations for method calls. + // If your test needs to initialize other mocks override this method + // and add call to base version. To change method calls expectations just + // provide new macros. Most recent expectation will be used. + virtual void SetUpInProcessBrowserTestFixture(); + + // Overriden for things you would normally override TearDown for. + virtual void TearDownInProcessBrowserTestFixture(); + + // Mocks, destroyed by CrosLibrary class. + MockLanguageLibrary* mock_language_library_; + MockLibraryLoader* loader_; + MockNetworkLibrary* mock_network_library_; + MockPowerLibrary* mock_power_library_; + MockSynapticsLibrary* mock_synaptics_library_; + + ImePropertyList ime_properties_; + InputLanguage language_; + + private: + DISALLOW_COPY_AND_ASSIGN(CrosInProcessBrowserTest); +}; + +} // namespace chromeos diff --git a/chrome/browser/chromeos/cros/mock_language_library.h b/chrome/browser/chromeos/cros/mock_language_library.h index cd0419f..3052d6b 100644 --- a/chrome/browser/chromeos/cros/mock_language_library.h +++ b/chrome/browser/chromeos/cros/mock_language_library.h @@ -16,6 +16,10 @@ class MockLanguageLibrary : public LanguageLibrary { public: MockLanguageLibrary() {} virtual ~MockLanguageLibrary() {} + + MOCK_METHOD1(AddObserver, void(Observer*)); + MOCK_METHOD1(RemoveObserver, void(Observer*)); + MOCK_METHOD0(GetActiveLanguages, InputLanguageList*(void)); MOCK_METHOD0(GetSupportedLanguages, InputLanguageList*(void)); MOCK_METHOD2(ChangeLanguage, void(LanguageCategory, const std::string&)); diff --git a/chrome/browser/chromeos/cros/mock_login_library.h b/chrome/browser/chromeos/cros/mock_login_library.h index a815ecf..51096bf 100644 --- a/chrome/browser/chromeos/cros/mock_login_library.h +++ b/chrome/browser/chromeos/cros/mock_login_library.h @@ -19,6 +19,7 @@ class MockLoginLibrary : public LoginLibrary { MOCK_METHOD0(EmitLoginPromptReady, bool(void)); MOCK_METHOD2(StartSession, bool(const std::string&, const std::string&)); MOCK_METHOD1(StartSession, bool(const std::string&)); + MOCK_METHOD1(StopSession, bool(const std::string&)); }; } // namespace chromeos diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h index 2090281..9aa3555 100644 --- a/chrome/browser/chromeos/cros/mock_network_library.h +++ b/chrome/browser/chromeos/cros/mock_network_library.h @@ -38,6 +38,7 @@ class MockNetworkLibrary : public NetworkLibrary { MOCK_CONST_METHOD0(wifi_networks, const WifiNetworkVector&(void)); MOCK_CONST_METHOD0(cellular_networks, const CellularNetworkVector&(void)); + MOCK_METHOD0(RequestWifiScan, void(void)); MOCK_METHOD2(ConnectToWifiNetwork, void(WifiNetwork, const string16&)); MOCK_METHOD2(ConnectToWifiNetwork, void(const string16&, diff --git a/chrome/browser/chromeos/cros/mock_power_library.h b/chrome/browser/chromeos/cros/mock_power_library.h index fb660f1..4b57538 100644 --- a/chrome/browser/chromeos/cros/mock_power_library.h +++ b/chrome/browser/chromeos/cros/mock_power_library.h @@ -17,12 +17,12 @@ class MockPowerLibrary : public PowerLibrary { MOCK_METHOD1(AddObserver, void(Observer*)); MOCK_METHOD1(RemoveObserver, void(Observer*)); - MOCK_CONST_METHOD1(line_power_on, bool(void)); - MOCK_CONST_METHOD1(battery_fully_charged, bool(void)); - MOCK_CONST_METHOD1(battery_percentage, double(void)); - MOCK_CONST_METHOD1(battery_is_present, bool(void)); - MOCK_CONST_METHOD1(battery_time_to_empty, base::TimeDelta(void)); - MOCK_CONST_METHOD1(battery_time_to_full, base::TimeDelta(void)); + MOCK_CONST_METHOD0(line_power_on, bool(void)); + MOCK_CONST_METHOD0(battery_fully_charged, bool(void)); + MOCK_CONST_METHOD0(battery_percentage, double(void)); + MOCK_CONST_METHOD0(battery_is_present, bool(void)); + MOCK_CONST_METHOD0(battery_time_to_empty, base::TimeDelta(void)); + MOCK_CONST_METHOD0(battery_time_to_full, base::TimeDelta(void)); }; } // namespace chromeos diff --git a/chrome/browser/chromeos/login/network_screen_browsertest.cc b/chrome/browser/chromeos/login/network_screen_browsertest.cc new file mode 100644 index 0000000..f0106c78 --- /dev/null +++ b/chrome/browser/chromeos/login/network_screen_browsertest.cc @@ -0,0 +1,86 @@ +// 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 "base/message_loop.h" +#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h" +#include "chrome/browser/chromeos/cros/mock_login_library.h" +#include "chrome/browser/chromeos/cros/mock_network_library.h" +#include "chrome/browser/chromeos/cros/network_library.h" +#include "chrome/browser/chromeos/login/wizard_controller.h" +#include "chrome/browser/chromeos/login/wizard_screen.h" +#include "chrome/common/chrome_switches.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace chromeos { +using ::testing::AnyNumber; +using ::testing::InvokeWithoutArgs; +using ::testing::Return; +using ::testing::ReturnRef; +using ::testing::_; + +class NetworkScreenTest : public CrosInProcessBrowserTest { + public: + NetworkScreenTest() { + } + + protected: + virtual void SetUpCommandLine(CommandLine* command_line) { + command_line->AppendSwitch(switches::kLoginManager); + command_line->AppendSwitchWithValue(switches::kLoginScreen, "network"); + } + + virtual void SetUpInProcessBrowserTestFixture() { + CrosInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); + chromeos::CrosLibrary::TestApi* test_api = + chromeos::CrosLibrary::Get()->GetTestApi(); + + mock_login_library_ = new MockLoginLibrary(); + test_api->SetLoginLibrary(mock_login_library_); + EXPECT_CALL(*mock_login_library_, EmitLoginPromptReady()) + .Times(1); + + EXPECT_CALL(*mock_network_library_, ethernet_connecting()) + .Times(AnyNumber()) + .WillRepeatedly((Return(false))); + EXPECT_CALL(*mock_network_library_, wifi_networks()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(wifi_networks_))); + EXPECT_CALL(*mock_network_library_, cellular_networks()) + .Times(AnyNumber()) + .WillRepeatedly((ReturnRef(cellular_networks_))); + } + + virtual void TearDownInProcessBrowserTestFixture() { + CrosInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); + chromeos::CrosLibrary::TestApi* test_api = + chromeos::CrosLibrary::Get()->GetTestApi(); + test_api-> SetLoginLibrary(NULL); + } + + // Don't need to create separate browser window for OOBE wizard. + virtual Browser* CreateBrowser(Profile* profile) { + return NULL; + } + + MockLoginLibrary* mock_login_library_; + + CellularNetworkVector cellular_networks_; + WifiNetworkVector wifi_networks_; + + private: + DISALLOW_COPY_AND_ASSIGN(NetworkScreenTest); +}; + +IN_PROC_BROWSER_TEST_F(NetworkScreenTest, TestInit) { + WizardController* controller = WizardController::default_controller(); + ASSERT_TRUE(controller != NULL); + ASSERT_EQ(controller->GetNetworkScreen(), controller->current_screen()); + // Close login manager windows. + MessageLoop::current()->DeleteSoon(FROM_HERE, controller); + // End the message loop to quit the test. + MessageLoop::current()->Quit(); +} + +} // namespace chromeos diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 22b74d2..b641527 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1180,6 +1180,7 @@ '../base/base.gyp:test_support_base', '../net/net.gyp:net_test_support', '../skia/skia.gyp:skia', + '../testing/gmock.gyp:gmock', '../testing/gtest.gyp:gtest', '../third_party/icu/icu.gyp:icui18n', '../third_party/icu/icu.gyp:icuuc', @@ -1198,11 +1199,14 @@ 'test/test_launcher/test_runner.h', 'test/test_launcher/run_all_unittests.cc', 'test/unit/chrome_test_suite.h', + 'browser/chromeos/cros/cros_in_process_browser_test.cc', + 'browser/chromeos/cros/cros_in_process_browser_test.h', # Actual test sources 'browser/autocomplete/autocomplete_browsertest.cc', 'browser/browser_browsertest.cc', 'browser/browser_init_browsertest.cc', 'browser/browsing_data_local_storage_helper_unittest.cc', + 'browser/chromeos/login/network_screen_browsertest.cc', 'browser/chromeos/compact_navigation_bar_browsertest.cc', 'browser/chromeos/notifications/notification_browsertest.cc', 'browser/crash_recovery_browsertest.cc', |