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

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 comments from Daniel and Hidehiko Created 4 years, 8 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/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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698