using System; using UnitTestSharp; namespace Susurrus.XAudio2.UnitTests { public class XAudio2EngineTests : TestFixture { public class CreateTests : TestFixture { public void MakesAnEngineOrNamesWhyNot() { var engine = XAudio2Engine.Create(); if (engine.IsOk) { engine.Value.Dispose(); return; } CheckTrue(engine.Kind == XAudio2Failures.Unavailable || engine.Kind == XAudio2Failures.CallFailed); } } public class CreateMasteringVoiceTests : TestFixture { public void MakesAVoiceOrNamesWhyNot() { var engine = XAudio2Engine.Create(); if (!engine.IsOk) { return; } using (engine.Value) { var master = engine.Value.CreateMasteringVoice(); if (master.IsOk) { master.Value.Destroy(); return; } CheckEqual(XAudio2Failures.CallFailed, master.Kind); } } public void AfterDispose_Throws() { var engine = XAudio2Engine.Create(); if (!engine.IsOk) { return; } engine.Value.Dispose(); CheckThrow(typeof(ObjectDisposedException)); engine.Value.CreateMasteringVoice(); } } public class CreateSourceVoiceTests : TestFixture { public void WithADevice_MakesAVoice() { using (TestDevice device = TestDevice.Open()) { if (device == null) { return; } WaveFormatEx format = TestDevice.MonoFormat(); var voice = device.Engine.CreateSourceVoice(format, maxFrequencyRatio: 2f); CheckTrue(voice.IsOk); voice.Value.Destroy(); } } public void AFormatWithNoChannels_FailsWithAStatus() { using (TestDevice device = TestDevice.Open()) { if (device == null) { return; } WaveFormatEx format = TestDevice.MonoFormat(); format.Channels = 0; var voice = device.Engine.CreateSourceVoice(format, maxFrequencyRatio: 2f); CheckEqual(XAudio2Failures.CallFailed, voice.Kind); } } public void AfterDispose_Throws() { var engine = XAudio2Engine.Create(); if (!engine.IsOk) { return; } engine.Value.Dispose(); WaveFormatEx format = TestDevice.MonoFormat(); CheckThrow(typeof(ObjectDisposedException)); engine.Value.CreateSourceVoice(format, maxFrequencyRatio: 2f); } } public class GetPerformanceDataTests : TestFixture { public void CountsTheSourceVoicesThatExist() { using (TestDevice device = TestDevice.Open()) { if (device == null) { return; } SourceVoice voice = device.MonoVoice(); CheckEqual(1u, device.Engine.GetPerformanceData().TotalSourceVoiceCount); voice.Destroy(); CheckEqual(0u, device.Engine.GetPerformanceData().TotalSourceVoiceCount); } } public void AfterDispose_Throws() { var engine = XAudio2Engine.Create(); if (!engine.IsOk) { return; } engine.Value.Dispose(); CheckThrow(typeof(ObjectDisposedException)); engine.Value.GetPerformanceData(); } } public class DisposeTests : TestFixture { public void CanBeCalledTwice() { var engine = XAudio2Engine.Create(); if (!engine.IsOk) { return; } engine.Value.Dispose(); engine.Value.Dispose(); } } } }