blob: 17a8714027e0cfd64154b2c83b1acd831780f275 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/live_caption/live_caption_bubble_settings.h"
#include "base/memory/weak_ptr.h"
#include "base/values.h"
#include "components/live_caption/caption_bubble_settings.h"
#include "components/live_caption/pref_names.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/testing_pref_service.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace captions {
namespace {
constexpr char kArabicLanguage[] = "ar-EG";
constexpr char kEnglishLanguage[] = "en-US";
class MockObserver : public CaptionBubbleSettings::Observer {
public:
MockObserver() = default;
~MockObserver() override = default;
MOCK_METHOD(void, OnLiveTranslateEnabledChanged, (), (override));
MOCK_METHOD(void, OnLiveCaptionLanguageChanged, (), (override));
MOCK_METHOD(void, OnLiveTranslateTargetLanguageChanged, (), (override));
};
class LiveCaptionBubbleSettingsTest : public testing::Test {
protected:
void SetUp() override {
pref_service_.registry()->RegisterBooleanPref(
prefs::kLiveCaptionBubbleExpanded, false);
pref_service_.registry()->RegisterBooleanPref(prefs::kLiveTranslateEnabled,
false);
pref_service_.registry()->RegisterBooleanPref(prefs::kLiveCaptionEnabled,
false);
pref_service_.registry()->RegisterStringPref(
prefs::kLiveCaptionLanguageCode, kEnglishLanguage);
pref_service_.registry()->RegisterStringPref(
prefs::kLiveTranslateTargetLanguageCode, kEnglishLanguage);
}
TestingPrefServiceSimple pref_service_;
MockObserver observer_;
base::WeakPtrFactory<MockObserver> observer_weak_ptr_factory_{&observer_};
};
TEST_F(LiveCaptionBubbleSettingsTest, SetLiveCaptionBubbleExpanded) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetLiveCaptionBubbleExpanded(true);
EXPECT_TRUE(pref_service_.GetBoolean(prefs::kLiveCaptionBubbleExpanded));
}
TEST_F(LiveCaptionBubbleSettingsTest, SetLiveCaptionEnabled) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetLiveCaptionEnabled(true);
EXPECT_TRUE(pref_service_.GetBoolean(prefs::kLiveCaptionEnabled));
}
TEST_F(LiveCaptionBubbleSettingsTest, SetLiveTranslateTargetLanguageCode) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetLiveTranslateTargetLanguageCode(kArabicLanguage);
EXPECT_THAT(pref_service_.GetString(prefs::kLiveTranslateTargetLanguageCode),
testing::StrEq(kArabicLanguage));
}
TEST_F(LiveCaptionBubbleSettingsTest, GetLiveCaptionBubbleExpanded) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
pref_service_.SetUserPref(prefs::kLiveCaptionBubbleExpanded,
base::Value(true));
EXPECT_TRUE(caption_bubble_settings.GetLiveCaptionBubbleExpanded());
}
TEST_F(LiveCaptionBubbleSettingsTest, GetLiveTranslateEnabled) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetObserver(observer_weak_ptr_factory_.GetWeakPtr());
EXPECT_FALSE(caption_bubble_settings.GetLiveTranslateEnabled());
EXPECT_CALL(observer_, OnLiveTranslateEnabledChanged).Times(1);
pref_service_.SetUserPref(prefs::kLiveTranslateEnabled, base::Value(true));
EXPECT_TRUE(caption_bubble_settings.GetLiveTranslateEnabled());
}
TEST_F(LiveCaptionBubbleSettingsTest, GetLiveCaptionLanguageCode) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetObserver(observer_weak_ptr_factory_.GetWeakPtr());
EXPECT_THAT(caption_bubble_settings.GetLiveCaptionLanguageCode(),
testing::StrEq(kEnglishLanguage));
EXPECT_CALL(observer_, OnLiveCaptionLanguageChanged).Times(1);
pref_service_.SetUserPref(prefs::kLiveCaptionLanguageCode,
base::Value(kArabicLanguage));
EXPECT_THAT(caption_bubble_settings.GetLiveCaptionLanguageCode(),
testing::StrEq(kArabicLanguage));
}
TEST_F(LiveCaptionBubbleSettingsTest, GetLiveTranslateTargetLanguageCode) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetObserver(observer_weak_ptr_factory_.GetWeakPtr());
EXPECT_THAT(caption_bubble_settings.GetLiveTranslateTargetLanguageCode(),
testing::StrEq(kEnglishLanguage));
EXPECT_CALL(observer_, OnLiveTranslateTargetLanguageChanged).Times(1);
pref_service_.SetUserPref(prefs::kLiveTranslateTargetLanguageCode,
base::Value(kArabicLanguage));
EXPECT_THAT(caption_bubble_settings.GetLiveTranslateTargetLanguageCode(),
testing::StrEq(kArabicLanguage));
}
TEST_F(LiveCaptionBubbleSettingsTest, RemoveObservation) {
LiveCaptionBubbleSettings caption_bubble_settings(&pref_service_);
caption_bubble_settings.SetObserver(observer_weak_ptr_factory_.GetWeakPtr());
caption_bubble_settings.RemoveObserver();
EXPECT_CALL(observer_, OnLiveTranslateEnabledChanged).Times(0);
pref_service_.SetUserPref(prefs::kLiveTranslateEnabled, base::Value(true));
}
} // namespace
} // namespace captions