Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(538)

Side by Side Diff: chrome/browser/renderer_context_menu/open_with_menu_factory_ash_unittest.cc

Issue 1760773004: Add "Open with <ARC-app-name>" items to the context menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address dcheng's comment Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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/format_macros.h"
11 #include "base/strings/stringprintf.h"
12 #include "chrome/app/chrome_command_ids.h"
13 #include "chrome/browser/renderer_context_menu/open_with_menu_factory_ash.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace {
17
18 // All tests in this file assume that 4 and 10 IDC command IDs are reserved
19 // for the main and sub menus, respectively.
20 const int kFirstMainMenuId = IDC_CONTENT_CONTEXT_OPEN_WITH1;
21 const int kFirstSubMenuId = kFirstMainMenuId + 4;
22 const int kNumCommandIds =
23 IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1;
24
25 static_assert(kNumCommandIds == 14,
26 "invalid number of command IDs reserved for open with");
27
28 using HandlerMap = std::unordered_map<int, ash::LinkHandlerInfo>;
29
30 std::pair<HandlerMap, int> BuildHandlersMap(size_t num_apps) {
31 std::vector<ash::LinkHandlerInfo> handlers;
32 gfx::Image image;
33 for (size_t i = 0; i < num_apps; ++i) {
34 ash::LinkHandlerInfo info = {base::StringPrintf("App %" PRIuS, i), image,
35 i};
36 handlers.push_back(info);
37 }
38 return BuildHandlersMapForTesting(handlers);
39 }
40
41 } // namespace
42
43 TEST(OpenWithMenuObserverTest, TestBuildHandlersMap) {
44 auto result = BuildHandlersMap(0);
45 EXPECT_EQ(0U, result.first.size());
46 EXPECT_EQ(-1, result.second);
47
48 result = BuildHandlersMap(1);
49 ASSERT_EQ(1U, result.first.size());
50 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
51 EXPECT_EQ(-1, result.second);
52 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
53
54 result = BuildHandlersMap(2);
55 EXPECT_EQ(2U, result.first.size());
56 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
57 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
58 EXPECT_EQ(-1, result.second);
59 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
60 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
61
62 result = BuildHandlersMap(3);
63 EXPECT_EQ(3U, result.first.size());
64 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
65 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
66 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 2));
67 EXPECT_EQ(-1, result.second);
68 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
69 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
70 EXPECT_EQ("App 2", result.first[kFirstMainMenuId + 2].name);
71
72 // Test if app names will overflow to the sub menu.
73 result = BuildHandlersMap(4);
74 EXPECT_EQ(4U, result.first.size());
75 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
76 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
77 // In this case, kFirstMainMenuId + 2 should be hidden.
78 EXPECT_EQ(kFirstMainMenuId + 3, result.second);
79 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId));
80 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + 1));
81 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
82 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
83 EXPECT_EQ("App 2", result.first[kFirstSubMenuId].name);
84 EXPECT_EQ("App 3", result.first[kFirstSubMenuId + 1].name);
85
86 result = BuildHandlersMap(11);
87 EXPECT_EQ(11U, result.first.size());
88 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
89 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
90 EXPECT_EQ(kFirstMainMenuId + 3, result.second);
91 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
92 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
93 for (size_t i = 0; i < 9; ++i) {
94 ASSERT_EQ(1U, result.first.count(kFirstSubMenuId + i)) << i;
95 }
96
97 // The main and sub menus can show up to 12 (=3+10-1) app names.
98 result = BuildHandlersMap(12);
99 EXPECT_EQ(12U, result.first.size());
100 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
101 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
102 EXPECT_EQ(kFirstMainMenuId + 3, result.second);
103 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
104 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
105 for (size_t i = 0; i < 10; ++i) {
106 const int id = kFirstSubMenuId + i;
107 ASSERT_EQ(1U, result.first.count(id)) << i;
108 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i;
109 }
110
111 result = BuildHandlersMap(13);
112 EXPECT_EQ(12U, result.first.size()); // still 12
113 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
114 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
115 EXPECT_EQ(kFirstMainMenuId + 3, result.second);
116 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
117 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
118 for (size_t i = 0; i < 10; ++i) { // still 10
119 const int id = kFirstSubMenuId + i;
120 ASSERT_EQ(1U, result.first.count(id)) << i;
121 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i;
122 }
123
124 result = BuildHandlersMap(1000);
125 EXPECT_EQ(12U, result.first.size()); // still 12
126 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId));
127 ASSERT_EQ(1U, result.first.count(kFirstMainMenuId + 1));
128 EXPECT_EQ(kFirstMainMenuId + 3, result.second);
129 EXPECT_EQ("App 0", result.first[kFirstMainMenuId].name);
130 EXPECT_EQ("App 1", result.first[kFirstMainMenuId + 1].name);
131 for (size_t i = 0; i < 10; ++i) { // still 10
132 const int id = kFirstSubMenuId + i;
133 ASSERT_EQ(1U, result.first.count(id)) << i;
134 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id].name) << i;
135 }
136 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698