blob: 1e0f88a2cc94713c765f485d363014814618de50 [file] [log] [blame]
// Copyright 2015 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/browsing_data/browsing_data_counter_utils.h"
#include <string>
#include <vector>
#include "base/message_loop/message_loop.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browsing_data/cache_counter.h"
#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "extensions/features/features.h"
#include "testing/gtest/include/gtest/gtest.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "base/strings/string_split.h"
#include "chrome/browser/browsing_data/hosted_apps_counter.h"
#endif
class BrowsingDataCounterUtilsTest : public testing::Test {
public:
BrowsingDataCounterUtilsTest() {}
~BrowsingDataCounterUtilsTest() override {}
TestingProfile* GetProfile() { return &profile_; }
private:
content::TestBrowserThreadBundle thread_bundle_;
TestingProfile profile_;
};
TEST_F(BrowsingDataCounterUtilsTest, CacheCounterResult) {
// This test assumes that the strings are served exactly as defined,
// i.e. that the locale is set to the default "en".
ASSERT_EQ("en", TestingBrowserProcess::GetGlobal()->GetApplicationLocale());
const int kBytesInAMegabyte = 1024 * 1024;
// Test the output for various forms of CacheResults.
const struct TestCase {
int bytes;
bool is_upper_limit;
bool is_basic_tab;
std::string expected_output;
} kTestCases[] = {
{42, false, false, "Less than 1 MB"},
{42, false, true,
"Frees up less than 1 MB. Some sites may load more slowly on your next "
"visit."},
{2.312 * kBytesInAMegabyte, false, false, "2.3 MB"},
{2.312 * kBytesInAMegabyte, false, true,
"Frees up 2.3 MB. Some sites may load more slowly on your next visit."},
{2.312 * kBytesInAMegabyte, true, false, "Less than 2.3 MB"},
{2.312 * kBytesInAMegabyte, true, true,
"Frees up less than 2.3 MB. Some sites may load more slowly on your "
"next visit."},
{500.2 * kBytesInAMegabyte, false, false, "500 MB"},
{500.2 * kBytesInAMegabyte, true, false, "Less than 500 MB"},
};
for (const TestCase& test_case : kTestCases) {
CacheCounter counter(GetProfile());
browsing_data::ClearBrowsingDataTab tab =
test_case.is_basic_tab ? browsing_data::ClearBrowsingDataTab::BASIC
: browsing_data::ClearBrowsingDataTab::ADVANCED;
counter.Init(GetProfile()->GetPrefs(), tab,
browsing_data::BrowsingDataCounter::Callback());
CacheCounter::CacheResult result(&counter, test_case.bytes,
test_case.is_upper_limit);
SCOPED_TRACE(base::StringPrintf(
"Test params: %d bytes, %d is_upper_limit, %d is_basic_tab.",
test_case.bytes, test_case.is_upper_limit, test_case.is_basic_tab));
base::string16 output = GetChromeCounterTextFromResult(&result);
EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output));
}
}
#if BUILDFLAG(ENABLE_EXTENSIONS)
// Tests the complex output of the hosted apps counter.
TEST_F(BrowsingDataCounterUtilsTest, HostedAppsCounterResult) {
HostedAppsCounter counter(GetProfile());
// This test assumes that the strings are served exactly as defined,
// i.e. that the locale is set to the default "en".
ASSERT_EQ("en", TestingBrowserProcess::GetGlobal()->GetApplicationLocale());
// Test the output for various numbers of hosted apps.
const struct TestCase {
std::string apps_list;
std::string expected_output;
} kTestCases[] = {
{"", "None"},
{"App1", "1 app (App1)"},
{"App1, App2", "2 apps (App1, App2)"},
{"App1, App2, App3", "3 apps (App1, App2, and 1 more)"},
{"App1, App2, App3, App4", "4 apps (App1, App2, and 2 more)"},
{"App1, App2, App3, App4, App5", "5 apps (App1, App2, and 3 more)"},
};
for (const TestCase& test_case : kTestCases) {
// Split the list of installed apps by commas.
std::vector<std::string> apps = base::SplitString(
test_case.apps_list, ",",
base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
// The first two apps in the list are used as examples.
std::vector<std::string> examples;
examples.assign(
apps.begin(), apps.begin() + (apps.size() > 2 ? 2 : apps.size()));
HostedAppsCounter::HostedAppsResult result(
&counter,
apps.size(),
examples);
base::string16 output = GetChromeCounterTextFromResult(&result);
EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output));
}
}
#endif