blob: 7f266594ce6cb94e9943c5cb3283514cf9ea4a8d [file] [log] [blame]
// Copyright 2021 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 "chrome/browser/share/share_submenu_model.h"
#include "base/test/metrics/user_action_tester.h"
#include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"
namespace share {
namespace {
bool HasItemWithName(const ShareSubmenuModel& model, int string_id) {
std::u16string name = l10n_util::GetStringUTF16(string_id);
for (int i = 0; i < model.GetItemCount(); ++i) {
if (model.GetLabelAt(i) == name)
return true;
}
return false;
}
using ShareSubmenuModelTest = ::testing::Test;
TEST(ShareSubmenuModelTest, CopyItemPresentForLink) {
ShareSubmenuModel model(nullptr, nullptr, ShareSubmenuModel::Context::LINK,
GURL("https://www.chromium.org"), u"");
EXPECT_TRUE(HasItemWithName(model, IDS_CONTENT_CONTEXT_COPYLINKLOCATION));
}
TEST(ShareSubmenuModelTest, CopyItemPresentForImage) {
ShareSubmenuModel model(nullptr, nullptr, ShareSubmenuModel::Context::IMAGE,
GURL("https://www.chromium.org/image.png"), u"");
EXPECT_TRUE(HasItemWithName(model, IDS_CONTENT_CONTEXT_COPYIMAGELOCATION));
}
TEST(ShareSubmenuModelTest, CopyItemPresentForEmail) {
ShareSubmenuModel model(nullptr, nullptr, ShareSubmenuModel::Context::LINK,
GURL("mailto:example@chromium.org"), u"");
EXPECT_TRUE(HasItemWithName(model, IDS_CONTENT_CONTEXT_COPYEMAILADDRESS));
}
TEST(ShareSubmenuModelTest, QRCodeItemPresentForLink) {
ShareSubmenuModel model(nullptr, nullptr, ShareSubmenuModel::Context::LINK,
GURL("https://www.chromium.org/"), u"");
EXPECT_TRUE(HasItemWithName(model, IDS_CONTEXT_MENU_GENERATE_QR_CODE_LINK));
}
class ShareSubmenuModelMetricsTest : public ::testing::Test {
public:
ShareSubmenuModelMetricsTest() :
model_(nullptr, nullptr, ShareSubmenuModel::Context::PAGE,
GURL("https://www.chromium.org/"), u"") {}
~ShareSubmenuModelMetricsTest() override = default;
ShareSubmenuModel* model() { return &model_; }
int GetActionCount(const std::string& name) const {
return action_tester_.GetActionCount(name);
}
private:
ShareSubmenuModel model_;
base::UserActionTester action_tester_;
};
TEST_F(ShareSubmenuModelMetricsTest, UserAction_AbandonLoggedTwice) {
EXPECT_EQ(0, GetActionCount("ShareSubmenu.Abandoned"));
model()->OnMenuWillShow(model());
model()->MenuClosed(model());
EXPECT_EQ(1, GetActionCount("ShareSubmenu.Abandoned"));
model()->OnMenuWillShow(model());
model()->MenuClosed(model());
EXPECT_EQ(2, GetActionCount("ShareSubmenu.Abandoned"));
}
} // namespace
} // namespace share