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

Side by Side Diff: chrome/browser/chromeos/arc/open_with_menu_controller_delegate_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 hidehiko's comments Created 4 years, 9 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 "base/strings/stringprintf.h"
6 #include "chrome/app/chrome_command_ids.h"
7 #include "chrome/browser/chromeos/arc/open_with_menu_controller_delegate.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace arc {
11
12 namespace {
13
14 void BuildHandlersMap(size_t num_apps,
15 std::unordered_map<int, UrlHandlerInfoPtr>* out_map,
16 int* out_sub_menu_parent_command_id) {
17 out_map->clear();
18 *out_sub_menu_parent_command_id = -2;
19 mojo::Array<UrlHandlerInfoPtr> handlers;
20 for (size_t i = 0; i < num_apps; ++i) {
21 UrlHandlerInfoPtr p = UrlHandlerInfo::New();
22 p->name = base::StringPrintf("App %zu", i);
23 handlers.push_back(std::move(p));
24 }
25 OpenWithMenuControllerDelegate::BuildHandlersMapForTesting(
26 IDC_CONTENT_CONTEXT_OPEN_WITH1,
27 IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1,
28 std::move(handlers), out_map, out_sub_menu_parent_command_id);
29 }
30
31 } // namespace
32
33 // All tests in this file assume that 4 and 10 IDC command IDs are reserved
34 // for the main and sub menus, respectively.
35
36 TEST(OpenWithMenuControllerDelegateTest, TestGetCommandIdsToEnable) {
37 std::unordered_map<int, UrlHandlerInfoPtr> result;
38 int sub_menu_parent_command_id;
39
40 BuildHandlersMap(0, &result, &sub_menu_parent_command_id);
41 EXPECT_EQ(0U, result.size());
42 EXPECT_EQ(-1, sub_menu_parent_command_id);
43
44 BuildHandlersMap(1, &result, &sub_menu_parent_command_id);
45 ASSERT_EQ(1U, result.size());
46 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
47 EXPECT_EQ(-1, sub_menu_parent_command_id);
48 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
49
50 BuildHandlersMap(2, &result, &sub_menu_parent_command_id);
51 EXPECT_EQ(2U, result.size());
52 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
53 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
54 EXPECT_EQ(-1, sub_menu_parent_command_id);
55 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
56 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
57
58 BuildHandlersMap(3, &result, &sub_menu_parent_command_id);
59 EXPECT_EQ(3U, result.size());
60 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
61 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
62 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH3));
63 EXPECT_EQ(-1, sub_menu_parent_command_id);
64 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
65 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
66 EXPECT_EQ("App 2", result[IDC_CONTENT_CONTEXT_OPEN_WITH3]->name);
67
68 // Test if app names will overflow to the sub menu.
69 BuildHandlersMap(4, &result, &sub_menu_parent_command_id);
70 EXPECT_EQ(4U, result.size());
71 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
72 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
73 // In this case, IDC_CONTENT_CONTEXT_OPEN_WITH3 should be hidden.
74 EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, sub_menu_parent_command_id);
75 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1));
76 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP2));
77 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
78 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
79 EXPECT_EQ("App 2", result[IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1]->name);
80 EXPECT_EQ("App 3", result[IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP2]->name);
81
82 BuildHandlersMap(11, &result, &sub_menu_parent_command_id);
83 EXPECT_EQ(11U, result.size());
84 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
85 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
86 EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, sub_menu_parent_command_id);
87 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
88 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
89 for (size_t i = 0; i < 9; ++i) {
90 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i))
91 << i;
92 }
93
94 // The main and sub menus can show up to 12 (=3+10-1) app names.
95 BuildHandlersMap(12, &result, &sub_menu_parent_command_id);
96 EXPECT_EQ(12U, result.size());
97 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
98 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
99 EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, sub_menu_parent_command_id);
100 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
101 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
102 for (size_t i = 0; i < 10; ++i) {
103 const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
104 ASSERT_EQ(1U, result.count(id)) << i;
105 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result[id]->name) << i;
106 }
107
108 BuildHandlersMap(13, &result, &sub_menu_parent_command_id);
109 EXPECT_EQ(12U, result.size()); // still 12
110 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
111 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
112 EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, sub_menu_parent_command_id);
113 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
114 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
115 for (size_t i = 0; i < 10; ++i) { // still 10
116 const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
117 ASSERT_EQ(1U, result.count(id)) << i;
118 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result[id]->name) << i;
119 }
120
121 BuildHandlersMap(1000, &result, &sub_menu_parent_command_id);
122 EXPECT_EQ(12U, result.size()); // still 12
123 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
124 ASSERT_EQ(1U, result.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
125 EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, sub_menu_parent_command_id);
126 EXPECT_EQ("App 0", result[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
127 EXPECT_EQ("App 1", result[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
128 for (size_t i = 0; i < 10; ++i) { // still 10
129 const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
130 ASSERT_EQ(1U, result.count(id)) << i;
131 EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result[id]->name) << i;
132 }
133 }
134
135 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698