using Amphora; using System; using UnitTestSharp; namespace Susurrus.XAudio2.UnitTests { public class HResultFailureKindTests : TestFixture { public static readonly HResultFailureKind Kind = new HResultFailureKind("Test.HResult"); public class FailTests : TestFixture { public void CarriesTheCallAndTheHResult() { Status status = Kind.Fail("Thing::Do", HResultFailureKind.InvalidCall); CheckEqual(Kind, status.Kind); CheckEqual("Thing::Do", Kind.CallOf(status)); CheckEqual(HResultFailureKind.InvalidCall, Kind.HResultOf(status)); } public void NullCall_Throws() { CheckThrow(typeof(ArgumentNullException)); Kind.Fail(null, hresult: -1); } } public class AccessorTests : TestFixture { public void AFailureOfAnotherKind_Throws() { Status other = new HResultFailureKind("Test.Other").Fail("Thing::Do", hresult: -1); CheckThrow(typeof(ArgumentException)); Kind.HResultOf(other); } public void CallOfAFailureOfAnotherKind_Throws() { Status other = new HResultFailureKind("Test.Other").Fail("Thing::Do", hresult: -1); CheckThrow(typeof(ArgumentException)); Kind.CallOf(other); } } public class DescribeTests : TestFixture { public void AnUnknownHResult_IsGivenInHex() { string text = Kind.Describe(Kind.Fail("Thing::Do", unchecked((int)0x80004005)), context: null); CheckEqual("Thing::Do failed with HRESULT 0x80004005.", text); } public void InvalidArgument_IsNamed() { string text = Kind.Describe(Kind.Fail("Thing::Do", HResultFailureKind.InvalidArgument), null); CheckEqual("Thing::Do was given an invalid argument (0x80070057).", text); } public void OutOfMemory_IsNamed() { string text = Kind.Describe(Kind.Fail("Thing::Do", HResultFailureKind.OutOfMemory), null); CheckEqual("Thing::Do ran out of memory (0x8007000E).", text); } public void InvalidCall_IsNamed() { string text = Kind.Describe(Kind.Fail("Thing::Do", HResultFailureKind.InvalidCall), null); CheckEqual("Thing::Do isn't allowed in the engine's current state (0x88960001).", text); } public void DeviceInvalidated_IsNamed() { string text = Kind.Describe(Kind.Fail("Thing::Do", HResultFailureKind.DeviceInvalidated), null); CheckEqual("Thing::Do failed because the audio device went away or can't be used (0x88960004).", text); } } } }