blob: cd76eba6c1c2d3392ce31241ff534fc327b2f4d8 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 <fuchsia/media/cpp/fidl.h>
#include <lib/gtest/real_loop_fixture.h>
#include <cmath>
#include "gtest/gtest.h"
#include "lib/component/cpp/environment_services_helper.h"
namespace media::audio::test {
constexpr uint32_t kGainFlagMask =
fuchsia::media::AudioGainInfoFlag_Mute |
fuchsia::media::AudioGainInfoFlag_AgcSupported |
fuchsia::media::AudioGainInfoFlag_AgcEnabled;
constexpr uint32_t kSetFlagMask = fuchsia::media::SetAudioGainFlag_GainValid |
fuchsia::media::SetAudioGainFlag_MuteValid |
fuchsia::media::SetAudioGainFlag_AgcValid;
constexpr uint16_t kInvalidDeviceCount = -1;
constexpr uint64_t kInvalidDeviceToken = -1;
constexpr fuchsia::media::AudioGainInfo kInvalidGainInfo = {
.gain_db = NAN, .flags = ~kGainFlagMask};
const fuchsia::media::AudioDeviceInfo kInvalidDeviceInfo = {
.name = "Invalid name",
.unique_id = "Invalid unique_id (len 32 chars)",
.token_id = kInvalidDeviceToken,
.is_input = true,
.gain_info = kInvalidGainInfo,
.is_default = true};
class AudioDeviceTest : public gtest::RealLoopFixture {
public:
static void SetEnvironmentServices(
std::shared_ptr<const ::component::Services> environment_services) {
environment_services_ = environment_services;
}
protected:
void SetUp() override;
void TearDown() override;
bool ExpectCallback();
bool ExpectTimeout();
void SetOnDeviceAddedEvent();
void SetOnDeviceRemovedEvent();
void SetOnDeviceGainChangedEvent();
void SetOnDefaultDeviceChangedEvent();
uint32_t GainFlagsFromBools(bool cur_mute, bool cur_agc, bool can_mute,
bool can_agc);
uint32_t SetFlagsFromBools(bool set_gain, bool set_mute, bool set_agc);
void RetrieveDefaultDevInfoUsingGetDevices(bool get_input);
bool RetrieveGainInfoUsingGetDevices(uint64_t token);
void RetrieveGainInfoUsingGetDeviceGain(uint64_t token,
bool valid_token = true);
void RetrieveTokenUsingGetDefault(bool is_input);
void RetrievePreExistingDevices();
bool HasPreExistingDevices();
static uint16_t initial_input_device_count_;
static uint16_t initial_output_device_count_;
static uint64_t initial_input_default_;
static uint64_t initial_output_default_;
static float initial_input_gain_db_;
static float initial_output_gain_db_;
static uint32_t initial_input_gain_flags_;
static uint32_t initial_output_gain_flags_;
static std::shared_ptr<const ::component::Services> environment_services_;
fuchsia::media::AudioDeviceEnumeratorPtr audio_dev_enum_;
bool error_occurred_ = false;
bool received_callback_ = false;
fuchsia::media::AudioDeviceInfo received_device_ = kInvalidDeviceInfo;
uint64_t received_removed_token_ = kInvalidDeviceToken;
uint64_t received_gain_token_ = kInvalidDeviceToken;
fuchsia::media::AudioGainInfo received_gain_info_ = kInvalidGainInfo;
uint64_t received_default_token_ = kInvalidDeviceToken;
uint64_t received_old_token_ = kInvalidDeviceToken;
};
} // namespace media::audio::test