using Amphora; using System; using UnitTestSharp; using static StbVorbisSharp.StbVorbis; using static Susurrus.UnitTests.TestSounds; using static Susurrus.UnitTests.WavDecoderTests; namespace Susurrus.UnitTests { public class SoundStreamsTests : TestFixture { public static StatusOr Open(byte[] file) { return SoundStreams.Open(new ByteChunks(new ByteView(file))); } public class OpenTests : TestFixture { public void WavFile_GivesAWavStream() { CheckTrue(Open(WavStreamTests.ThreeFrameFile()).Value is WavStream); } public void OggVorbisFile_GivesAnOggStream() { CheckTrue(Open(LoadFixture("Mono441Hz.ogg")).Value is OggStream); } public void WavFile_KeepsItsFormat() { ISoundStream stream = Open(WavStreamTests.ThreeFrameFile()).Value; CheckEqual(44100, stream.SampleRate); CheckEqual(3L, stream.FrameCount); } public void NullChunks_Throws() { CheckThrow(typeof(ArgumentNullException)); SoundStreams.Open(null); } public void ABrokenWavFile_FailsAsTheWavStreamDoes() { CheckEqual(SoundFailures.WavMalformed, Open(Riff(Pcm16MonoFormat())).Status.Kind); } public void ABrokenOggFile_FailsAsTheOggStreamDoes() { byte[] file = LoadFixture("Mono441Hz.ogg"); Array.Resize(ref file, file.Length - 100); Status status = Open(file).Status; CheckEqual(STBVorbisError.VORBIS_unexpected_eof, SoundFailures.OggFailed.Read(in status)); } public void EmptyData_IsUnrecognized() { CheckEqual(SoundFailures.UnrecognizedFormat, Open(new byte[0]).Status.Kind); } public void DataInNoKnownFormat_IsUnrecognized() { CheckEqual(SoundFailures.UnrecognizedFormat, Open(new byte[100]).Status.Kind); } public void AFormatThatIsKnownButCantBeStreamed_NamesIt() { CheckEqual("This is an MP3 file, but Susurrus loads only Ogg Vorbis and WAV. Convert it first with " + "python Scripts/convertaudio.py ", Open(LoadFixture("Mp3WithoutTag.mp3")).Status.Describe()); } public void OpusInOgg_IsUnsupported() { CheckEqual(SoundFailures.UnsupportedFormat, Open(LoadFixture("OpusInOgg.ogg")).Status.Kind); } } } }