#include "services/audio_preference/public/cpp/audio_preference.h"
-#include "base/at_exit.h"
#include "services/audio_preference/audio_preference_service_impl.h"
#include "services/suspend_resume/public/cpp/suspend_resume.h"
+#include "services/suspend_resume/suspend_resume_service_impl.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace audio_preference {
-// Note that we run method directly on service, not on singleton instance,
-// because there were issues with properly clearing singleton state when
-// running tests in single process.
-//
-// Despite having AtExitManager set up, sometimes state was preserved between
-// tests leading other one to randomly fail.
-// Note: it happened only when calling |SetHardwareAudioDisabled|.
-
class MockAudioHardwarePreferenceObserver
: public AudioHardwarePreferenceObserver {
public:
MOCK_METHOD(void, AudioHardwarePreferenceChanged, (AudioHardwarePreference));
};
-class LocalAudioPreferenceService : public AudioPreferenceServiceImpl {};
+class LocalAudioPreferenceService : public AudioPreferenceServiceImpl {
+ public:
+ LocalAudioPreferenceService() {
+ AudioPreferenceServiceImpl::OverrideInstanceForTesting(this);
+ }
+
+ ~LocalAudioPreferenceService() override {
+ AudioPreferenceServiceImpl::OverrideInstanceForTesting(nullptr);
+ }
+};
+
+class LocalSuspendResumeService
+ : public suspend_resume::SuspendResumeServiceImpl {
+ public:
+ LocalSuspendResumeService() {
+ SuspendResumeServiceImpl::OverrideInstanceForTesting(this);
+ }
+
+ ~LocalSuspendResumeService() {
+ SuspendResumeServiceImpl::OverrideInstanceForTesting(nullptr);
+ }
+};
class AudioPreferenceTest : public testing::Test {
- private:
- // Ensure that we'll get fresh singleton every time.
- base::ShadowingAtExitManager at_exit_;
+ protected:
+ void SetUp() override {
+ ASSERT_EQ(AudioPreferenceServiceImpl::GetInstance(), &service_);
+ ASSERT_EQ(suspend_resume::SuspendResumeServiceImpl::GetInstance(),
+ &suspend_resume_service_);
+ }
+
+ LocalSuspendResumeService suspend_resume_service_;
+ LocalAudioPreferenceService service_;
};
TEST_F(AudioPreferenceTest, MightUseHardwareOnStart) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
- EXPECT_EQ(service.RegisterObserver(&observer),
+ EXPECT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
}
TEST_F(AudioPreferenceTest, HardwareWhenStartingResumed) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
suspend_resume::NotifyStateChange(suspend_resume::State::RESUMED);
- EXPECT_EQ(service.RegisterObserver(&observer),
+ EXPECT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
}
TEST_F(AudioPreferenceTest, SoftwareWhenStartingInPartialView) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
suspend_resume::NotifyStateChange(suspend_resume::State::PARTIAL);
- EXPECT_EQ(service.RegisterObserver(&observer),
+ EXPECT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::SOFTWARE);
}
TEST_F(AudioPreferenceTest, DisabledWhenStartingSuspended) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
suspend_resume::NotifyStateChange(suspend_resume::State::SUSPENDED);
- EXPECT_EQ(service.RegisterObserver(&observer),
+ EXPECT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::DISABLED);
}
TEST_F(AudioPreferenceTest, ObserverReceivesNotificationSoftwareInPartial) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
- ASSERT_EQ(service.RegisterObserver(&observer),
+ ASSERT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
EXPECT_CALL(observer, AudioHardwarePreferenceChanged(
AudioHardwarePreference::SOFTWARE));
suspend_resume::NotifyStateChange(suspend_resume::State::PARTIAL);
}
-TEST_F(AudioPreferenceTest, ObserverIsNotNotifedAfterRemoving) {
- LocalAudioPreferenceService service;
+TEST_F(AudioPreferenceTest, ObserverIsNotNotifiedAfterRemoving) {
MockAudioHardwarePreferenceObserver observer;
EXPECT_CALL(observer, AudioHardwarePreferenceChanged(testing::_)).Times(0);
- ASSERT_EQ(service.RegisterObserver(&observer),
+ ASSERT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
- service.RemoveObserver(&observer);
+ audio_preference::RemoveObserver(&observer);
suspend_resume::NotifyStateChange(suspend_resume::State::PARTIAL);
}
TEST_F(AudioPreferenceTest, ObserverReceivesNotificationDisabledWhenSuspended) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
- ASSERT_EQ(service.RegisterObserver(&observer),
+ ASSERT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
EXPECT_CALL(observer, AudioHardwarePreferenceChanged(
AudioHardwarePreference::DISABLED));
}
TEST_F(AudioPreferenceTest, GetRegisterExternalAudioDevice) {
- LocalAudioPreferenceService service;
- EXPECT_TRUE(service.RegisterExternalAudioDevice());
+ EXPECT_TRUE(audio_preference::RegisterExternalAudioDevice());
}
-TEST_F(AudioPreferenceTest,
- NewObserverGetsSoftawareWhenRegisterExternalDevice) {
- LocalAudioPreferenceService service;
- auto token = service.RegisterExternalAudioDevice();
+TEST_F(AudioPreferenceTest, NewObserverGetsSoftwareWhenRegisterExternalDevice) {
+ auto token = audio_preference::RegisterExternalAudioDevice();
ASSERT_TRUE(token);
{
MockAudioHardwarePreferenceObserver observer;
- EXPECT_EQ(service.RegisterObserver(&observer),
+ EXPECT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::SOFTWARE);
}
// Ensure that dangling observer is not called.
std::ignore = token.Release();
}
-TEST_F(AudioPreferenceTest, ObserverGetsSoftawareWhenRegisterExternalDevice) {
- LocalAudioPreferenceService service;
+TEST_F(AudioPreferenceTest, ObserverGetsSoftwareWhenRegisterExternalDevice) {
ExternalAudioDeviceToken token;
{
MockAudioHardwarePreferenceObserver observer;
- ASSERT_EQ(service.RegisterObserver(&observer),
+ ASSERT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::HARDWARE);
EXPECT_CALL(observer, AudioHardwarePreferenceChanged(
AudioHardwarePreference::SOFTWARE));
- token = service.RegisterExternalAudioDevice();
+ token = audio_preference::RegisterExternalAudioDevice();
ASSERT_TRUE(token);
}
// Ensure that dangling observer is not called.
}
TEST_F(AudioPreferenceTest, ObserverGetsHardwareAfterReleaseExternalDevice) {
- LocalAudioPreferenceService service;
MockAudioHardwarePreferenceObserver observer;
{
- ExternalAudioDeviceToken token = service.RegisterExternalAudioDevice();
+ ExternalAudioDeviceToken token =
+ audio_preference::RegisterExternalAudioDevice();
ASSERT_TRUE(token);
- ASSERT_EQ(service.RegisterObserver(&observer),
+ ASSERT_EQ(audio_preference::AddObserver(&observer),
AudioHardwarePreference::SOFTWARE);
EXPECT_CALL(observer, AudioHardwarePreferenceChanged(
AudioHardwarePreference::HARDWARE));