diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-24 04:41:54 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-24 04:41:54 +0000 |
commit | d59b315cc7b1f662eb6d312311bf0d63fdeee40c (patch) | |
tree | bec631d61f301dc6b8621e4c6a32564856db67dd /chrome | |
parent | 450d54eceb47146fb4fd9af724a8589e0c1baa69 (diff) | |
download | chromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.zip chromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.tar.gz chromium_src-d59b315cc7b1f662eb6d312311bf0d63fdeee40c.tar.bz2 |
basic browser tests for compact navigation bar.
* Tests if Browser::ToggleCompactNavigationBar() turns on/off
compact navigation bar and tool bar.
* Tests if the accelerator works.
BUG=http://crosbug.com/2028
TEST=new tests CompactNativationBarTest.TestBasic/TestAccelerator should pass.
Review URL: http://codereview.chromium.org/1200001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42430 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/chromeos/compact_navigation_bar_browsertest.cc | 135 | ||||
-rw-r--r-- | chrome/browser/chromeos/frame/browser_view.cc | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/clock_menu_button_browsertest.cc | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/view_ids.h | 22 | ||||
-rw-r--r-- | chrome/browser/view_ids.h | 9 | ||||
-rwxr-xr-x | chrome/chrome_browser.gypi | 1 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 | ||||
-rw-r--r-- | chrome/test/in_process_browser_test.cc | 6 | ||||
-rw-r--r-- | chrome/test/in_process_browser_test.h | 3 |
9 files changed, 170 insertions, 11 deletions
diff --git a/chrome/browser/chromeos/compact_navigation_bar_browsertest.cc b/chrome/browser/chromeos/compact_navigation_bar_browsertest.cc new file mode 100644 index 0000000..fdc6fbb --- /dev/null +++ b/chrome/browser/chromeos/compact_navigation_bar_browsertest.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/browser.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/frame/browser_view.h" +#include "chrome/browser/chromeos/view_ids.h" +#include "chrome/test/in_process_browser_test.h" +#include "chrome/test/ui_test_utils.h" +#include "views/widget/widget.h" +#include "views/window/window.h" + +namespace { + +// TODO(oshima): Refactor and move to common place (probably in chrome/test/). +class Key { + public: + // Creates a key with modifiers. + Key(int keyval, bool shift, bool ctrl, bool alt) + : keyval_(keyval), + modifier_(0) { + if (shift) + modifier_ |= GDK_SHIFT_MASK; + if (ctrl) + modifier_ |= GDK_CONTROL_MASK; + if (alt) + modifier_ |= GDK_MOD1_MASK; + } + + void PressOn(views::Window* window) const { + Process(window, true); + } + + void ReleaseOn(views::Window* window) const { + Process(window, false); + } + + private: + // Injects a synthesized key event into gdk event queue. + void Process(views::Window* window, bool press) const { + GdkKeymapKey* keys; + gint n_keys; + gdk_keymap_get_entries_for_keyval( + gdk_keymap_get_default(), + keyval_, + &keys, + &n_keys); + + gfx::NativeWindow native_window = window->GetNativeWindow(); + GdkEvent* event = gdk_event_new(press ? GDK_KEY_PRESS : GDK_KEY_RELEASE); + GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event); + if (press) + key_event->state = modifier_ | GDK_KEY_PRESS_MASK; + else + key_event->state = modifier_ | GDK_KEY_RELEASE_MASK; + + key_event->window = GTK_WIDGET(native_window)->window; + key_event->send_event = true; + key_event->time = GDK_CURRENT_TIME; + key_event->keyval = keyval_; + key_event->hardware_keycode = keys[0].keycode; + key_event->group = keys[0].group; + + gdk_event_put(event); + } + + int keyval_; + int modifier_; + DISALLOW_COPY_AND_ASSIGN(Key); +}; + +} // namespace + +namespace chromeos { + +class CompactNavigationBarTest : public InProcessBrowserTest { + public: + CompactNavigationBarTest() { + } + + BrowserView* browser_view() const { + return static_cast<BrowserView*>(browser()->window()); + } + + bool IsViewIdVisible(int id) const { + return browser_view()->GetViewByID(id)->IsVisible(); + } + + void KeyDown(const Key& key) { + key.PressOn(browser_view()->GetWidget()->GetWindow()); + } + + void KeyUp(const Key& key) { + key.ReleaseOn(browser_view()->GetWidget()->GetWindow()); + } +}; + +IN_PROC_BROWSER_TEST_F(CompactNavigationBarTest, TestBasic) { + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + EXPECT_TRUE(IsViewIdVisible(VIEW_ID_TOOLBAR)); + + browser()->ToggleCompactNavigationBar(); + EXPECT_TRUE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_TOOLBAR)); + + browser()->ToggleCompactNavigationBar(); + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + EXPECT_TRUE(IsViewIdVisible(VIEW_ID_TOOLBAR)); +} + +IN_PROC_BROWSER_TEST_F(CompactNavigationBarTest, TestAccelerator) { + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + + // ctrl-shift-c should toggle compact navigation bar. + Key ctrl_shift_c(base::VKEY_C, true, true, false); + KeyDown(ctrl_shift_c); + KeyUp(ctrl_shift_c); + RunAllPendingEvents(); + EXPECT_TRUE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + KeyDown(ctrl_shift_c); + KeyUp(ctrl_shift_c); + RunAllPendingEvents(); + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); + + // but ctrl-alt-c should not. + Key ctrl_alt_c(base::VKEY_C, true, false, true); + KeyDown(ctrl_alt_c); + KeyUp(ctrl_alt_c); + RunAllPendingEvents(); + EXPECT_FALSE(IsViewIdVisible(VIEW_ID_COMPACT_NAV_BAR)); +} + +} // namespace chromeos + diff --git a/chrome/browser/chromeos/frame/browser_view.cc b/chrome/browser/chromeos/frame/browser_view.cc index e199b02..9f03a09 100644 --- a/chrome/browser/chromeos/frame/browser_view.cc +++ b/chrome/browser/chromeos/frame/browser_view.cc @@ -16,6 +16,7 @@ #include "chrome/browser/chromeos/status/browser_status_area_view.h" #include "chrome/browser/chromeos/status/network_menu_button.h" #include "chrome/browser/chromeos/status/status_area_button.h" +#include "chrome/browser/chromeos/view_ids.h" #include "chrome/browser/chromeos/wm_ipc.h" #include "chrome/browser/views/app_launcher.h" #include "chrome/browser/views/frame/browser_extender.h" @@ -26,7 +27,6 @@ #include "chrome/browser/views/tabs/tab_strip.h" #include "chrome/browser/views/toolbar_view.h" #include "chrome/browser/views/toolbar_star_toggle.h" -#include "chrome/browser/view_ids.h" #include "gfx/canvas.h" #include "grit/generated_resources.h" #include "grit/theme_resources.h" diff --git a/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc b/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc index 973bafb..ed8c77a 100644 --- a/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc +++ b/chrome/browser/chromeos/status/clock_menu_button_browsertest.cc @@ -9,9 +9,9 @@ #include "chrome/browser/browser_window.h" #include "chrome/browser/chromeos/frame/browser_view.h" #include "chrome/browser/chromeos/status/browser_status_area_view.h" +#include "chrome/browser/chromeos/view_ids.h" #include "chrome/browser/pref_member.h" #include "chrome/browser/profile.h" -#include "chrome/browser/view_ids.h" #include "chrome/common/pref_names.h" #include "chrome/test/in_process_browser_test.h" #include "testing/gtest/include/gtest/gtest.h" diff --git a/chrome/browser/chromeos/view_ids.h b/chrome/browser/chromeos/view_ids.h new file mode 100644 index 0000000..54b3b7b --- /dev/null +++ b/chrome/browser/chromeos/view_ids.h @@ -0,0 +1,22 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_VIEW_IDS_H_ +#define CHROME_BROWSER_CHROMEOS_VIEW_IDS_H_ + +#include "chrome/browser/view_ids.h" + +// View ID used in ChromeOS. +enum ChromeOSViewIds { + // Start with the offset that is big enough to avoid possible + // collison. + VIEW_ID_APP_MENU_BUTTON = VIEW_ID_PREDEFINED_COUNT + 10000, + VIEW_ID_COMPACT_NAV_BAR, + VIEW_ID_STATUS_AREA, + VIEW_ID_SPACER, + VIEW_ID_OTR_AVATAR, +}; + +#endif // CHROME_BROWSER_CHROMEOS_VIEW_IDS_H_ + diff --git a/chrome/browser/view_ids.h b/chrome/browser/view_ids.h index 0cd6e30..57943da 100644 --- a/chrome/browser/view_ids.h +++ b/chrome/browser/view_ids.h @@ -71,15 +71,6 @@ enum ViewID { // The Download shelf. VIEW_ID_DOWNLOAD_SHELF, -#if defined(OS_CHROMEOS) - // ChromeOS view ids start here. - VIEW_ID_APP_MENU_BUTTON = 10000, - VIEW_ID_COMPACT_NAV_BAR, - VIEW_ID_STATUS_AREA, - VIEW_ID_SPACER, - VIEW_ID_OTR_AVATAR, -#endif - // Used in chrome/browser/gtk/view_id_util_browsertests.cc // If you add new ids, make sure the above test passes. VIEW_ID_PREDEFINED_COUNT diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index b408402..0a40a8d 100755 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -449,6 +449,7 @@ 'browser/chromeos/usb_mount_observer.h', 'browser/chromeos/version_loader.cc', 'browser/chromeos/version_loader.h', + 'browser/chromeos/view_ids.h', 'browser/chromeos/wm_ipc.cc', 'browser/chromeos/wm_ipc.h', 'browser/chromeos/wm_message_listener.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index f5abd7e..582ce0a 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1202,6 +1202,7 @@ 'browser/browser_browsertest.cc', 'browser/browser_init_browsertest.cc', 'browser/browsing_data_local_storage_helper_unittest.cc', + 'browser/chromeos/compact_navigation_bar_browsertest.cc', 'browser/chromeos/notifications/notification_browsertest.cc', 'browser/crash_recovery_browsertest.cc', 'browser/download/save_page_browsertest.cc', diff --git a/chrome/test/in_process_browser_test.cc b/chrome/test/in_process_browser_test.cc index 3f4ce39..5afcfc2 100644 --- a/chrome/test/in_process_browser_test.cc +++ b/chrome/test/in_process_browser_test.cc @@ -315,3 +315,9 @@ void InProcessBrowserTest::SetInitialTimeoutInMS(int timeout_value) { DCHECK_GT(timeout_value, 0); initial_timeout_ = timeout_value; } + +void InProcessBrowserTest::RunAllPendingEvents() { + MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); + ui_test_utils::RunMessageLoop(); +} + diff --git a/chrome/test/in_process_browser_test.h b/chrome/test/in_process_browser_test.h index 6e922d9..dfcf6d6 100644 --- a/chrome/test/in_process_browser_test.h +++ b/chrome/test/in_process_browser_test.h @@ -114,6 +114,9 @@ class InProcessBrowserTest : public testing::Test { void EnableDOMAutomation() { dom_automation_enabled_ = true; } void EnableSingleProcess() { single_process_ = true; } + // Run all pending events in the message loop. + void RunAllPendingEvents(); + private: // Invokes CreateBrowser to create a browser, then RunTestOnMainThread, and // destroys the browser. |