| Index: chrome/browser/chromeos/arc/open_with_menu_controller_delegate_unittest.cc
|
| diff --git a/chrome/browser/chromeos/arc/open_with_menu_controller_delegate_unittest.cc b/chrome/browser/chromeos/arc/open_with_menu_controller_delegate_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..696911ba98b591683f59c1f0491cffe4102e51d6
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/arc/open_with_menu_controller_delegate_unittest.cc
|
| @@ -0,0 +1,135 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/strings/stringprintf.h"
|
| +#include "chrome/app/chrome_command_ids.h"
|
| +#include "chrome/browser/chromeos/arc/open_with_menu_controller_delegate.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace arc {
|
| +
|
| +namespace {
|
| +
|
| +std::pair<OpenWithMenuControllerDelegate::HandlerMap, int> BuildHandlersMap(
|
| + size_t num_apps) {
|
| + mojo::Array<UrlHandlerInfoPtr> handlers;
|
| + for (size_t i = 0; i < num_apps; ++i) {
|
| + UrlHandlerInfoPtr p = UrlHandlerInfo::New();
|
| + p->name = base::StringPrintf("App %zu", i);
|
| + handlers.push_back(std::move(p));
|
| + }
|
| + return OpenWithMenuControllerDelegate::BuildHandlersMapForTesting(
|
| + IDC_CONTENT_CONTEXT_OPEN_WITH1,
|
| + IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1,
|
| + std::move(handlers));
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// All tests in this file assume that 4 and 10 IDC command IDs are reserved
|
| +// for the main and sub menus, respectively.
|
| +
|
| +TEST(OpenWithMenuControllerDelegateTest, TestGetCommandIdsToEnable) {
|
| + auto result = BuildHandlersMap(0);
|
| + EXPECT_EQ(0U, result.first.size());
|
| + EXPECT_EQ(-1, result.second);
|
| +
|
| + result = BuildHandlersMap(1);
|
| + ASSERT_EQ(1U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + EXPECT_EQ(-1, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| +
|
| + result = BuildHandlersMap(2);
|
| + EXPECT_EQ(2U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + EXPECT_EQ(-1, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| +
|
| + result = BuildHandlersMap(3);
|
| + EXPECT_EQ(3U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH3));
|
| + EXPECT_EQ(-1, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + EXPECT_EQ("App 2", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH3]->name);
|
| +
|
| + // Test if app names will overflow to the sub menu.
|
| + result = BuildHandlersMap(4);
|
| + EXPECT_EQ(4U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + // In this case, IDC_CONTENT_CONTEXT_OPEN_WITH3 should be hidden.
|
| + EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, result.second);
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP2));
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + EXPECT_EQ("App 2",
|
| + result.first[IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1]->name);
|
| + EXPECT_EQ("App 3",
|
| + result.first[IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP2]->name);
|
| +
|
| + result = BuildHandlersMap(11);
|
| + EXPECT_EQ(11U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + for (size_t i = 0; i < 9; ++i) {
|
| + ASSERT_EQ(1U,
|
| + result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i))
|
| + << i;
|
| + }
|
| +
|
| + // The main and sub menus can show up to 12 (=3+10-1) app names.
|
| + result = BuildHandlersMap(12);
|
| + EXPECT_EQ(12U, result.first.size());
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + for (size_t i = 0; i < 10; ++i) {
|
| + const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
|
| + ASSERT_EQ(1U, result.first.count(id)) << i;
|
| + EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id]->name)
|
| + << i;
|
| + }
|
| +
|
| + result = BuildHandlersMap(13);
|
| + EXPECT_EQ(12U, result.first.size()); // still 12
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + for (size_t i = 0; i < 10; ++i) { // still 10
|
| + const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
|
| + ASSERT_EQ(1U, result.first.count(id)) << i;
|
| + EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id]->name)
|
| + << i;
|
| + }
|
| +
|
| + result = BuildHandlersMap(1000);
|
| + EXPECT_EQ(12U, result.first.size()); // still 12
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH1));
|
| + ASSERT_EQ(1U, result.first.count(IDC_CONTENT_CONTEXT_OPEN_WITH2));
|
| + EXPECT_EQ(IDC_CONTENT_CONTEXT_OPEN_WITH_LAST, result.second);
|
| + EXPECT_EQ("App 0", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH1]->name);
|
| + EXPECT_EQ("App 1", result.first[IDC_CONTENT_CONTEXT_OPEN_WITH2]->name);
|
| + for (size_t i = 0; i < 10; ++i) { // still 10
|
| + const int id = IDC_CONTENT_CONTEXT_OPEN_WITH_ARC_APP1 + i;
|
| + ASSERT_EQ(1U, result.first.count(id)) << i;
|
| + EXPECT_EQ(base::StringPrintf("App %zu", i + 2), result.first[id]->name)
|
| + << i;
|
| + }
|
| +}
|
| +
|
| +} // namespace arc
|
|
|