OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <unordered_map> | |
6 #include <utility> | |
7 #include <vector> | |
8 | |
9 #include "ash/link_handler_model.h" | |
10 #include "base/strings/stringprintf.h" | |
11 #include "chrome/app/chrome_command_ids.h" | |
12 #include "chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 | |
15 namespace { | |
16 | |
17 // All tests in this file assume that 4 and 10 IDC command IDs are reserved | |
18 // for the main and sub menus, respectively. | |
19 const int kFirstMainMenuId = IDC_CONTENT_CONTEXT_OPEN_WITH1; | |
20 const int kFirstSubMenuId = kFirstMainMenuId + 4; | |
21 const int kNumCommandIds = | |
22 IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1; | |
23 | |
24 static_assert(kNumCommandIds == 14, | |
25 "invalid number of command IDs reserved for open with"); | |
26 | |
27 using HandlerMap = std::unordered_map<int, ash::LinkHandlerInfo>; | |
28 | |
29 std::pair<HandlerMap, int> BuildHandlersMap(size_t num_apps) { | |
30 std::vector<ash::LinkHandlerInfo> handlers; | |
31 gfx::Image image; | |
32 for (size_t i = 0; i < num_apps; ++i) { | |
33 ash::LinkHandlerInfo info = {base::StringPrintf("App %zu", i), image, i}; | |
dcheng
2016/04/24 19:27:57
%zu should be %" PRIuS "
Yusuke Sato
2016/04/25 15:07:46
Done.
| |
34 handlers.push_back(info); | |
35 } | |
36 return BuildHandlersMapForTesting(handlers); | |
37 } | |
38 | |
39 } // namespace | |
40 | |
41 TEST(OpenWithMenuObserverTest, TestBuildHandlersMap) { | |
42 auto result = BuildHandlersMap(0); | |
43 EXPECT_EQ(0U, result.first.size()); | |
44 EXPECT_EQ(-1, result.second); | |
45 | |
46 result = BuildHandlersMap(1); | |
47 ASSERT_EQ(1U, result.first.size()); | |
48 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
49 EXPECT_EQ(-1, result.second); | |
50 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
51 | |
52 result = BuildHandlersMap(2); | |
53 EXPECT_EQ(2U, result.first.size()); | |
54 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
55 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
56 EXPECT_EQ(-1, result.second); | |
57 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
58 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
59 | |
60 result = BuildHandlersMap(3); | |
61 EXPECT_EQ(3U, result.first.size()); | |
62 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
63 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
64 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 2)); | |
65 EXPECT_EQ(-1, result.second); | |
66 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
67 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
68 EXPECT_EQ("App 2", result.first[kFirstMainMenuId + 2].name); | |
69 | |
70 // Test if app names will overflow to the sub menu. | |
71 result = BuildHandlersMap(4); | |
72 EXPECT_EQ(4U, result.first.size()); | |
73 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
74 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
75 // In this case, kFirstMainMenuId + 2 should be hidden. | |
76 EXPECT_EQ(kFirstMainMenuId + 3, result.second); | |
77 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId)); | |
78 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + 1)); | |
79 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
80 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
81 EXPECT_EQ("App 2", result.first[kFirstSubMenuId].name); | |
82 EXPECT_EQ("App 3", result.first[kFirstSubMenuId + 1].name); | |
83 | |
84 result = BuildHandlersMap(11); | |
85 EXPECT_EQ(11U, result.first.size()); | |
86 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
87 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
88 EXPECT_EQ(kFirstMainMenuId + 3, result.second); | |
89 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
90 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
91 for (size_t i = 0; i < 9; ++i) { | |
92 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + i)) << i; | |
93 } | |
94 | |
95 // The main and sub menus can show up to 12 (=3+10-1) app names. | |
96 result = BuildHandlersMap(12); | |
97 EXPECT_EQ(12U, result.first.size()); | |
98 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
99 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
100 EXPECT_EQ(kFirstMainMenuId + 3, result.second); | |
101 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
102 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
103 for (size_t i = 0; i < 10; ++i) { | |
104 const int id = kFirstSubMenuId + i; | |
105 ASSERT_EQ(1U, result.first.count(id)) << i; | |
106 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; | |
107 } | |
108 | |
109 result = BuildHandlersMap(13); | |
110 EXPECT_EQ(12U, result.first.size()); // still 12 | |
111 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
112 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
113 EXPECT_EQ(kFirstMainMenuId + 3, result.second); | |
114 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
115 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
116 for (size_t i = 0; i < 10; ++i) { // still 10 | |
117 const int id = kFirstSubMenuId + i; | |
118 ASSERT_EQ(1U, result.first.count(id)) << i; | |
119 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; | |
120 } | |
121 | |
122 result = BuildHandlersMap(1000); | |
123 EXPECT_EQ(12U, result.first.size()); // still 12 | |
124 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId)); | |
125 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1)); | |
126 EXPECT_EQ(kFirstMainMenuId + 3, result.second); | |
127 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name); | |
128 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name); | |
129 for (size_t i = 0; i < 10; ++i) { // still 10 | |
130 const int id = kFirstSubMenuId + i; | |
131 ASSERT_EQ(1U, result.first.count(id)) << i; | |
132 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i; | |
133 } | |
134 } | |
OLD | NEW |