Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/launcher/launcher_navigator.h" | 5 #include "ash/launcher/launcher_navigator.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | |
| 7 #include "ash/launcher/launcher.h" | 8 #include "ash/launcher/launcher.h" |
| 8 #include "ash/launcher/launcher_model.h" | 9 #include "ash/launcher/launcher_model.h" |
| 9 #include "ash/launcher/launcher_types.h" | 10 #include "ash/launcher/launcher_types.h" |
| 11 #include "base/command_line.h" | |
| 10 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 14 |
| 13 namespace ash { | 15 namespace ash { |
| 14 | 16 |
| 15 namespace { | 17 namespace { |
| 16 | 18 |
| 17 class LauncherNavigatorTest : public testing::Test { | 19 class LauncherNavigatorTest : public testing::Test { |
| 18 public: | 20 public: |
| 19 LauncherNavigatorTest() {} | 21 LauncherNavigatorTest() {} |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 55 } | 57 } |
| 56 | 58 |
| 57 const LauncherModel& model() { return *model_.get(); } | 59 const LauncherModel& model() { return *model_.get(); } |
| 58 | 60 |
| 59 private: | 61 private: |
| 60 scoped_ptr<LauncherModel> model_; | 62 scoped_ptr<LauncherModel> model_; |
| 61 | 63 |
| 62 DISALLOW_COPY_AND_ASSIGN(LauncherNavigatorTest); | 64 DISALLOW_COPY_AND_ASSIGN(LauncherNavigatorTest); |
| 63 }; | 65 }; |
| 64 | 66 |
| 67 class LauncherNavigatorLegacyShelfLayoutTest : public LauncherNavigatorTest { | |
| 68 public: | |
| 69 LauncherNavigatorLegacyShelfLayoutTest() : LauncherNavigatorTest() {} | |
| 70 | |
| 71 protected: | |
| 72 virtual void SetUp() OVERRIDE { | |
| 73 CommandLine::ForCurrentProcess()->AppendSwitch( | |
| 74 ash::switches::kAshDisableAlternateShelfLayout); | |
| 75 LauncherNavigatorTest::SetUp(); | |
| 76 } | |
| 77 | |
| 78 private: | |
| 79 DISALLOW_COPY_AND_ASSIGN(LauncherNavigatorLegacyShelfLayoutTest); | |
| 80 }; | |
| 81 | |
| 65 } // namespace | 82 } // namespace |
| 66 | 83 |
| 67 TEST_F(LauncherNavigatorTest, BasicCycle) { | 84 TEST_F(LauncherNavigatorTest, BasicCycle) { |
| 68 // An app shortcut and three windows | 85 // An app shortcut and three windows |
| 69 LauncherItemType types[] = { | 86 LauncherItemType types[] = { |
| 70 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, | 87 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, |
| 71 }; | 88 }; |
| 89 // LauncherModel automatically adds BROWSER_SHORTCUT and APP_LIST item at the | |
| 90 // beginning, so '3' refers the first TYPE_TABBED item. | |
| 91 SetupMockLauncherModel(types, arraysize(types), 3); | |
| 92 | |
| 93 EXPECT_EQ(4, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | |
| 94 | |
| 95 // Fifth one. It will skip the APP_SHORTCUT and APP_LIST at the beginning | |
|
James Cook
2013/08/22 00:19:12
nit: one space after APP_LIST
Harry McCleave
2013/08/27 00:37:00
Done.
| |
| 96 // of the list. | |
| 97 EXPECT_EQ(5, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | |
| 98 } | |
| 99 | |
| 100 TEST_F(LauncherNavigatorLegacyShelfLayoutTest, BasicCycle) { | |
| 101 // An app shortcut and three windows | |
| 102 LauncherItemType types[] = { | |
| 103 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, | |
| 104 }; | |
| 72 // LauncherModel automatically adds BROWSER_SHORTCUT item at the | 105 // LauncherModel automatically adds BROWSER_SHORTCUT item at the |
| 73 // beginning, so '2' refers the first TYPE_TABBED item. | 106 // beginning, so '2' refers the first TYPE_TABBED item. |
| 74 SetupMockLauncherModel(types, arraysize(types), 2); | 107 SetupMockLauncherModel(types, arraysize(types), 2); |
| 75 | 108 |
| 76 EXPECT_EQ(3, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | 109 EXPECT_EQ(3, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); |
| 77 | 110 |
| 78 // Fourth one. It will skip the APP_SHORTCUT at the beginning of the list and | 111 // Fourth one. It will skip the APP_SHORTCUT at the beginning of the list and |
| 79 // the APP_LIST item which is automatically added at the end of items. | 112 // the APP_LIST item which is automatically added at the end of items. |
| 80 EXPECT_EQ(4, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | 113 EXPECT_EQ(4, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); |
| 81 } | 114 } |
| 82 | 115 |
| 83 TEST_F(LauncherNavigatorTest, WrapToBeginning) { | 116 TEST_F(LauncherNavigatorTest, WrapToBeginning) { |
| 84 LauncherItemType types[] = { | 117 LauncherItemType types[] = { |
| 85 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, | 118 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, |
| 86 }; | 119 }; |
| 120 SetupMockLauncherModel(types, arraysize(types), 5); | |
| 121 | |
| 122 // Second one. It wraps to the beginning, and skips APP_LIST and | |
| 123 // BROWSER_SHORTCUT items at the beginning of the list. | |
| 124 EXPECT_EQ(3, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | |
| 125 } | |
| 126 | |
| 127 TEST_F(LauncherNavigatorLegacyShelfLayoutTest, WrapToBeginning) { | |
| 128 LauncherItemType types[] = { | |
| 129 TYPE_APP_SHORTCUT, TYPE_TABBED, TYPE_TABBED, TYPE_TABBED, | |
| 130 }; | |
| 87 SetupMockLauncherModel(types, arraysize(types), 4); | 131 SetupMockLauncherModel(types, arraysize(types), 4); |
| 88 | 132 |
| 89 // Second one. It skips the APP_LIST item at the end of the list, | 133 // Second one. It skips the APP_LIST item at the end of the list, |
| 90 // wraps to the beginning, and skips BROWSER_SHORTCUT and APP_SHORTCUT | 134 // wraps to the beginning, and skips BROWSER_SHORTCUT and APP_SHORTCUT |
| 91 // at the beginning of the list. | 135 // at the beginning of the list. |
| 92 EXPECT_EQ(2, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | 136 EXPECT_EQ(2, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); |
| 93 } | 137 } |
| 94 | 138 |
| 95 TEST_F(LauncherNavigatorTest, Empty) { | 139 TEST_F(LauncherNavigatorTest, Empty) { |
| 96 SetupMockLauncherModel(NULL, 0, -1); | 140 SetupMockLauncherModel(NULL, 0, -1); |
| 97 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | 141 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); |
| 98 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | 142 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); |
| 99 } | 143 } |
| 100 | 144 |
| 101 TEST_F(LauncherNavigatorTest, SingleEntry) { | 145 TEST_F(LauncherNavigatorTest, SingleEntry) { |
| 102 LauncherItemType type = TYPE_TABBED; | 146 LauncherItemType type = TYPE_TABBED; |
| 147 SetupMockLauncherModel(&type, 1, 2); | |
| 148 | |
| 149 // If there's only one item there and it is already active, there's no item | |
| 150 // to be activated next. | |
| 151 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | |
| 152 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | |
| 153 } | |
| 154 | |
| 155 TEST_F(LauncherNavigatorLegacyShelfLayoutTest, SingleEntry) { | |
| 156 LauncherItemType type = TYPE_TABBED; | |
| 103 SetupMockLauncherModel(&type, 1, 1); | 157 SetupMockLauncherModel(&type, 1, 1); |
| 104 | 158 |
| 105 // If there's only one item there and it is already active, there's no item | 159 // If there's only one item there and it is already active, there's no item |
| 106 // to be activated next. | 160 // to be activated next. |
| 107 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | 161 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); |
| 108 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | 162 EXPECT_EQ(-1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); |
| 109 } | 163 } |
| 110 | 164 |
| 111 TEST_F(LauncherNavigatorTest, NoActive) { | 165 TEST_F(LauncherNavigatorTest, NoActive) { |
| 112 LauncherItemType types[] = { | 166 LauncherItemType types[] = { |
| 113 TYPE_TABBED, TYPE_TABBED, | 167 TYPE_TABBED, TYPE_TABBED, |
| 114 }; | 168 }; |
| 115 // Special case: no items are 'STATUS_ACTIVE'. | 169 // Special case: no items are 'STATUS_ACTIVE'. |
| 116 SetupMockLauncherModel(types, arraysize(types), -1); | 170 SetupMockLauncherModel(types, arraysize(types), -1); |
| 117 | 171 |
| 118 // If there are no active status, pick the first running item as a fallback. | 172 // If there are no active status, pick the first running item as a fallback. |
| 173 EXPECT_EQ(2, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | |
| 174 EXPECT_EQ(2, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | |
| 175 } | |
| 176 | |
| 177 TEST_F(LauncherNavigatorLegacyShelfLayoutTest, NoActive) { | |
| 178 LauncherItemType types[] = { | |
| 179 TYPE_TABBED, TYPE_TABBED, | |
| 180 }; | |
| 181 // Special case: no items are 'STATUS_ACTIVE'. | |
| 182 SetupMockLauncherModel(types, arraysize(types), -1); | |
| 183 | |
| 184 // If there are no active status, pick the first running item as a fallback. | |
| 119 EXPECT_EQ(1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); | 185 EXPECT_EQ(1, GetNextActivatedItemIndex(model(), CYCLE_FORWARD)); |
| 120 EXPECT_EQ(1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); | 186 EXPECT_EQ(1, GetNextActivatedItemIndex(model(), CYCLE_BACKWARD)); |
| 121 } | 187 } |
| 122 | 188 |
| 123 } // namespace ash | 189 } // namespace ash |
| OLD | NEW |