| Index: ui/views/focus/focus_traversal_unittest.cc
|
| diff --git a/ui/views/focus/focus_traversal_unittest.cc b/ui/views/focus/focus_traversal_unittest.cc
|
| index 039c2b647a314143a24aa04c40e3c1365edc3d5f..6cd95b8c995ce40dd48cb6d2e124aabbbb61a8fb 100644
|
| --- a/ui/views/focus/focus_traversal_unittest.cc
|
| +++ b/ui/views/focus/focus_traversal_unittest.cc
|
| @@ -603,6 +603,77 @@ TEST_F(FocusTraversalTest, NormalTraversal) {
|
| }
|
| }
|
|
|
| +#if defined(OS_MACOSX)
|
| +// Test focus traversal with full keyboard access off on Mac.
|
| +TEST_F(FocusTraversalTest, NormalTraversalMac) {
|
| +GetFocusManager()->SetKeyboardAccessible(false);
|
| +
|
| +// Now only views with FocusBehavior of ALWAYS will be focusable.
|
| +const int kTraversalIDs[] = { kAppleTextfieldID,
|
| + kOrangeTextfieldID, kBananaTextfieldID, kKiwiTextfieldID,
|
| + kStyleTextEditID,
|
| + kSearchTextfieldID,
|
| + kThumbnailContainerID};
|
| +
|
| + // Let's traverse the whole focus hierarchy (several times, to make sure it
|
| + // loops OK).
|
| + GetFocusManager()->ClearFocus();
|
| + for (int i = 0; i < 3; ++i) {
|
| + for (size_t j = 0; j < arraysize(kTraversalIDs); j++) {
|
| + GetFocusManager()->AdvanceFocus(false);
|
| + View* focused_view = GetFocusManager()->GetFocusedView();
|
| + EXPECT_TRUE(focused_view != NULL);
|
| + if (focused_view)
|
| + EXPECT_EQ(kTraversalIDs[j], focused_view->id());
|
| + }
|
| + }
|
| +
|
| + // Let's traverse in reverse order.
|
| + GetFocusManager()->ClearFocus();
|
| + for (int i = 0; i < 3; ++i) {
|
| + for (int j = arraysize(kTraversalIDs) - 1; j >= 0; --j) {
|
| + GetFocusManager()->AdvanceFocus(true);
|
| + View* focused_view = GetFocusManager()->GetFocusedView();
|
| + EXPECT_TRUE(focused_view != NULL);
|
| + if (focused_view)
|
| + EXPECT_EQ(kTraversalIDs[j], focused_view->id());
|
| + }
|
| + }
|
| +}
|
| +
|
| +// Test toggling full keyboard access correctly changes the focused view on Mac.
|
| +TEST_F(FocusTraversalTest, FullKeyboardToggle) {
|
| + // Give focus to kTopCheckBoxID .
|
| + FindViewByID(kTopCheckBoxID)->RequestFocus();
|
| + EXPECT_EQ(kTopCheckBoxID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + // Turn off full keyboard access. Focus should move to next view with ALWAYS
|
| + // focus behavior.
|
| + GetFocusManager()->SetKeyboardAccessible(false);
|
| + EXPECT_EQ(kAppleTextfieldID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + // Turning on full keyboard access should not change the focused view.
|
| + GetFocusManager()->SetKeyboardAccessible(true);
|
| + EXPECT_EQ(kAppleTextfieldID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + // Give focus to kSearchButtonID.
|
| + FindViewByID(kSearchButtonID)->RequestFocus();
|
| + EXPECT_EQ(kSearchButtonID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + // Turn off full keyboard access. Focus should move to next view with ALWAYS
|
| + // focus behavior.
|
| + GetFocusManager()->SetKeyboardAccessible(false);
|
| + EXPECT_EQ(kThumbnailContainerID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + // See focus advances correctly in both directions.
|
| + GetFocusManager()->AdvanceFocus(false);
|
| + EXPECT_EQ(kAppleTextfieldID, GetFocusManager()->GetFocusedView()->id());
|
| +
|
| + GetFocusManager()->AdvanceFocus(true);
|
| + EXPECT_EQ(kThumbnailContainerID, GetFocusManager()->GetFocusedView()->id());
|
| +}
|
| +#endif
|
| +
|
| TEST_F(FocusTraversalTest, TraversalWithNonEnabledViews) {
|
| const int kDisabledIDs[] = {
|
| kBananaTextfieldID, kFruitCheckBoxID, kComboboxID, kAsparagusButtonID,
|
|
|