using Amphora; using System; using UnitTestSharp; namespace Susurrus.UnitTests { public class SoundLoadTests : TestFixture { public static Sound AnySound() { return NullModuleTests.AnySound(); } public class PendingCtorTests : TestFixture { public void StartsNotDone() { CheckFalse(new SoundLoad().IsDone); } } public class DoneCtorTests : TestFixture { public void WithASound_IsDoneAndHoldsIt() { Sound sound = AnySound(); SoundLoad load = new SoundLoad(sound); CheckTrue(load.IsDone); CheckTrue(load.Result.IsOk); CheckTrue(ReferenceEquals(sound, load.Result.Value)); } public void WithAFailure_IsDoneAndHoldsIt() { SoundLoad load = new SoundLoad(SoundFailures.TooLarge.Fail()); CheckTrue(load.IsDone); CheckEqual(SoundFailures.TooLarge, load.Result.Kind); } } public class ResultTests : TestFixture { public void WhileNotDone_Throws() { SoundLoad load = new SoundLoad(); CheckThrow(typeof(InvalidOperationException)); StatusOr result = load.Result; } } public class CompleteTests : TestFixture { public void WithASound_FinishesTheLoad() { SoundLoad load = new SoundLoad(); Sound sound = AnySound(); load.Complete(sound); CheckTrue(load.IsDone); CheckTrue(ReferenceEquals(sound, load.Result.Value)); } public void WithAFailure_FinishesTheLoadFailed() { SoundLoad load = new SoundLoad(); load.Complete(SoundFailures.TooLarge.Fail()); CheckTrue(load.IsDone); CheckEqual(SoundFailures.TooLarge, load.Result.Kind); } public void WhenAlreadyDone_Throws() { SoundLoad load = new SoundLoad(AnySound()); CheckThrow(typeof(InvalidOperationException)); load.Complete(AnySound()); } } } }