public void AutoNextSong_SongIsCaching_SwapSongs() { var eventWait = new ManualResetEvent(false); // We need this, because Library.PlaySong() pops up a new thread interally and then returns var jumpAudioPlayer = new JumpAudioPlayer(); var jumpSong = new Mock<Song>("JumpSong", AudioType.Mp3, TimeSpan.Zero); jumpSong.Setup(p => p.CreateAudioPlayer()).Returns(jumpAudioPlayer); jumpSong.SetupGet(p => p.HasToCache).Returns(false); var foreverAudioPlayer = new Mock<AudioPlayer>(); foreverAudioPlayer.SetupProperty(p => p.Volume); foreverAudioPlayer.Setup(p => p.Play()).Callback(() => { }); // Never raises SongFinished var cachingSong = new Mock<Song>("CachingSong", AudioType.Mp3, TimeSpan.Zero); cachingSong.SetupGet(p => p.HasToCache).Returns(true); cachingSong.Setup(p => p.CreateAudioPlayer()).Returns(foreverAudioPlayer.Object); var cachingSong2 = new Mock<Song>("CachingSong2", AudioType.Mp3, TimeSpan.Zero); cachingSong2.SetupGet(p => p.HasToCache).Returns(true); var nextSong = new Mock<Song>("NextSong", AudioType.Mp3, TimeSpan.Zero); nextSong.Setup(p => p.CreateAudioPlayer()).Returns(jumpAudioPlayer); nextSong.SetupGet(p => p.HasToCache).Returns(false); using (var library = new Library.Library()) { int finished = 0; // We need to wait till the second played song has finished and then release our lock, // otherwise it would directly call the assertion, without anything changed library.SongFinished += (sender, e) => { finished++; if (finished == 2) { eventWait.Set(); } }; IEnumerable<Song> songs = new[] { jumpSong.Object, cachingSong.Object, cachingSong2.Object, nextSong.Object }; library.AddSongsToPlaylist(songs); library.PlaySong(0); eventWait.WaitOne(); IEnumerable<Song> expectedSongs = new[] { jumpSong.Object, nextSong.Object, cachingSong.Object, cachingSong2.Object }; Assert.IsTrue(expectedSongs.SequenceEqual(library.Playlist)); } }
public void AddSongsToPlaylist_PartyModeAndMultipleSongsAdded_ThrowsInvalidOperationException() { var songs = new[] { new LocalSong("TestPath", AudioType.Mp3, TimeSpan.Zero), new LocalSong("TestPath", AudioType.Mp3, TimeSpan.Zero) }; using (var library = new Library.Library()) { library.CreateAdmin("TestPassword"); library.ChangeToParty(); library.AddSongsToPlaylist(songs); } }
public void RemoveFromPlaylist_AccessModeIsParty_ThrowsInvalidOperationException() { var songMock = new Mock <Song>("TestPath", AudioType.Mp3, TimeSpan.Zero); using (var library = new Library.Library()) { library.ChangeToParty(); library.AddSongsToPlaylist(new[] { songMock.Object }); library.RemoveFromPlaylist(new[] { 0 }); } }
public void RemoveFromPlaylist_SongIsPlaying_CurrentPlayerIsStopped() { var audioPlayerMock = new Mock <AudioPlayer>(); var songMock = new Mock <Song>("TestPath", AudioType.Mp3, TimeSpan.Zero); songMock.Setup(p => p.CreateAudioPlayer()).Returns(audioPlayerMock.Object); using (var library = new Library.Library()) { library.AddSongsToPlaylist(new[] { songMock.Object }); library.PlaySong(0); library.RemoveFromPlaylist(new[] { 0 }); audioPlayerMock.Verify(p => p.Stop(), Times.Once()); } }
public void AutoNextSong_SongIsCaching_SwapSongs() { var eventWait = new ManualResetEvent(false); // We need this, because Library.PlaySong() pops up a new thread interally and then returns var jumpAudioPlayer = new JumpAudioPlayer(); var jumpSong = new Mock <Song>("JumpSong", AudioType.Mp3, TimeSpan.Zero); jumpSong.Setup(p => p.CreateAudioPlayer()).Returns(jumpAudioPlayer); jumpSong.SetupGet(p => p.HasToCache).Returns(false); var foreverAudioPlayer = new Mock <AudioPlayer>(); foreverAudioPlayer.SetupProperty(p => p.Volume); foreverAudioPlayer.Setup(p => p.Play()).Callback(() => { }); // Never raises SongFinished var cachingSong = new Mock <Song>("CachingSong", AudioType.Mp3, TimeSpan.Zero); cachingSong.SetupGet(p => p.HasToCache).Returns(true); cachingSong.Setup(p => p.CreateAudioPlayer()).Returns(foreverAudioPlayer.Object); var cachingSong2 = new Mock <Song>("CachingSong2", AudioType.Mp3, TimeSpan.Zero); cachingSong2.SetupGet(p => p.HasToCache).Returns(true); var nextSong = new Mock <Song>("NextSong", AudioType.Mp3, TimeSpan.Zero); nextSong.Setup(p => p.CreateAudioPlayer()).Returns(jumpAudioPlayer); nextSong.SetupGet(p => p.HasToCache).Returns(false); using (var library = new Library.Library()) { int finished = 0; // We need to wait till the second played song has finished and then release our lock, // otherwise it would directly call the assertion, without anything changed library.SongFinished += (sender, e) => { finished++; if (finished == 2) { eventWait.Set(); } }; IEnumerable <Song> songs = new[] { jumpSong.Object, cachingSong.Object, cachingSong2.Object, nextSong.Object }; library.AddSongsToPlaylist(songs); library.PlaySong(0); eventWait.WaitOne(); IEnumerable <Song> expectedSongs = new[] { jumpSong.Object, nextSong.Object, cachingSong.Object, cachingSong2.Object }; Assert.IsTrue(expectedSongs.SequenceEqual(library.Playlist)); } }
public void RemoveFromPlaylist_SongIsPlaying_CurrentPlayerIsStopped() { var audioPlayerMock = new Mock<AudioPlayer>(); var songMock = new Mock<Song>("TestPath", AudioType.Mp3, TimeSpan.Zero); songMock.Setup(p => p.CreateAudioPlayer()).Returns(audioPlayerMock.Object); using (var library = new Library.Library()) { library.AddSongsToPlaylist(new[] { songMock.Object }); library.PlaySong(0); library.RemoveFromPlaylist(new[] { 0 }); audioPlayerMock.Verify(p => p.Stop(), Times.Once()); } }
public void RemoveFromPlaylist_AccessModeIsParty_ThrowsInvalidOperationException() { var songMock = new Mock<Song>("TestPath", AudioType.Mp3, TimeSpan.Zero); using (var library = new Library.Library()) { library.ChangeToParty(); library.AddSongsToPlaylist(new[] { songMock.Object }); library.RemoveFromPlaylist(new[] { 0 }); } }