blob: 498cfb187d578afd2362898508451feaee58659f [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.
#ifndef SRC_MEDIA_AUDIO_AUDIO_CORE_TEST_VIRTUAL_AUDIO_DEVICE_TEST_H_
#define SRC_MEDIA_AUDIO_AUDIO_CORE_TEST_VIRTUAL_AUDIO_DEVICE_TEST_H_
#include "src/media/audio/audio_core/test/audio_device_test.h"
namespace media::audio::test {
class AtomicDeviceId {
public:
AtomicDeviceId() : id_(kInvalidDeviceId) {}
uint64_t get() const { return id_.load(); }
uint64_t Next() {
uint64_t ret;
do {
ret = id_.fetch_add(1);
} while (ret == kInvalidDeviceId);
return ret;
}
private:
static constexpr uint64_t kInvalidDeviceId = 0;
std::atomic<uint64_t> id_;
};
//
// VirtualAudioDeviceTest
//
// This set of tests verifies asynchronous usage of AudioDeviceEnumerator.
class VirtualAudioDeviceTest : public AudioDeviceTest {
protected:
// "Regional" per-test-suite set-up. Called before first test in this suite.
// static void SetUpTestSuite() {}
// Per-test-suite tear-down. Called after last test in this suite.
// static void TearDownTestSuite() {}
static void PopulateUniqueIdArr(bool is_input, uint8_t* unique_id_arr);
void SetUp() override;
void TearDown() override;
void AddTwoDevices(bool is_input, bool is_plugged = true);
void TestGetDevicesAfterAdd(bool is_input);
void TestGetDevicesAfterRemove(bool is_input, bool most_recent);
void TestGetDevicesAfterUnplug(bool is_input, bool most_recent);
void TestGetDevicesAfterSetDeviceGain(bool is_input);
void TestGetDefaultDeviceUsingAddGetDevices(bool is_input);
void TestGetDefaultDeviceAfterAdd(bool is_input);
void TestGetDefaultDeviceAfterUnpluggedAdd(bool is_input);
void TestGetDefaultDeviceAfterRemove(bool is_input, bool most_recent);
void TestGetDefaultDeviceAfterUnplug(bool is_input, bool most_recent);
void TestGetDeviceGainAfterAdd(bool is_input);
void TestGetDeviceGainAfterSetDeviceGain(bool is_input);
void TestOnDeviceAddedAfterAdd(bool is_input, bool is_plugged);
void TestOnDeviceAddedAfterPlug(bool is_input);
void TestOnDeviceRemovedAfterRemove(bool is_input, bool is_plugged);
void TestOnDeviceRemovedAfterUnplug(bool is_input);
void TestOnDefaultDeviceChangedAfterAdd(bool is_input);
void TestOnDefaultDeviceChangedAfterPlug(bool is_input, bool most_recent);
void TestOnDefaultDeviceChangedAfterRemove(bool is_input, bool most_recent);
void TestOnDefaultDeviceChangedAfterUnplug(bool is_input, bool most_recent);
void TestOnDeviceGainChanged(bool is_input);
static AtomicDeviceId sequential_devices_;
fuchsia::virtualaudio::InputPtr input_;
fuchsia::virtualaudio::InputPtr input_2_;
fuchsia::virtualaudio::OutputPtr output_;
fuchsia::virtualaudio::OutputPtr output_2_;
};
} // namespace media::audio::test
#endif // SRC_MEDIA_AUDIO_AUDIO_CORE_TEST_VIRTUAL_AUDIO_DEVICE_TEST_H_