public void GetSongs_AllSongsFromEveryProviderReturned() { var provider = new AggregateSongProvider(); var provider1 = Substitute.For<ISongProvider>(); var provider2 = Substitute.For<ISongProvider>(); provider.Providers.Add(provider1); provider.Providers.Add(provider2); provider1 .GetSongs(Arg.Any<string>(), Arg.Any<CancellationToken>()) .Returns(x => { return Task<IEnumerable<Song>>.Factory.StartNew(() => new[] { new Song(), new Song() }); }); provider2 .GetSongs(Arg.Any<string>(), Arg.Any<CancellationToken>()) .Returns(x => { return Task<IEnumerable<Song>>.Factory.StartNew(() => new[] { new Song(), new Song() }); }); var result = provider.GetSongs("NOFX", CancellationToken.None).Result; Assert.Equal(4, result.Count()); }
protected override void OnStartup(StartupEventArgs e) { IUnityContainer container = new UnityContainer(); container.AddNewExtension<LazySupportExtension>(); // Register grooveshark related stuff container.RegisterType<IGroovesharkClient, GroovesharkClientWrapper>( new ContainerControlledLifetimeManager(), new InjectionMethod("Connect")); container.RegisterType<ISongProvider, GroovesharkSongProvider>( GroovesharkSongProvider.ProviderName, new ContainerControlledLifetimeManager()); container.RegisterType<ISongPlayer, GroovesharkSongPlayer>( GroovesharkSongProvider.ProviderName, new ContainerControlledLifetimeManager()); // Register spotify/torshify related stuff container.RegisterType<ISongProvider, SpotifySongProvider>( SpotifySongProvider.ProviderName, new ContainerControlledLifetimeManager()); container.RegisterType<ISongPlayer, TorshifySongPlayerClient>( SpotifySongProvider.ProviderName, new ContainerControlledLifetimeManager()); container.RegisterType<ISpotifyImageProvider, TorshifyImageProvider>(); // Aggregate provider that combines Grooveshark and Spotify players and providers container.RegisterType<ISongProvider, AggregateSongProvider>(new InjectionFactory(c => { var a = new AggregateSongProvider( c.Resolve<ISongProvider>(GroovesharkSongProvider.ProviderName), c.Resolve<ISongProvider>(SpotifySongProvider.ProviderName)); a.UnhandledException += (sender, args) => { Trace.WriteLine(args.Exception); args.Handled = true; }; return a; })); container.RegisterType<ISongPlayer, AggregateSongPlayer>(new InjectionFactory(c => { return new AggregateSongPlayer( c.Resolve<ISongPlayer>(GroovesharkSongProvider.ProviderName), c.Resolve<ISongPlayer>(SpotifySongProvider.ProviderName)); })); TorshifyServerProcessHandler torshifyServerProcess = new TorshifyServerProcessHandler(); torshifyServerProcess.CloseServerTogetherWithClient = true; //torshifyServerProcess.Hidden = true; torshifyServerProcess.TorshifyServerLocation = Path.Combine(Environment.CurrentDirectory, "TRock.Music.Torshify.Server.exe"); torshifyServerProcess.UserName = "******"; torshifyServerProcess.Password = "******"; torshifyServerProcess.Start(); var provider = container.Resolve<ISongProvider>(); MainWindow = container.Resolve<MainWindow>(); MainWindow.Show(); }
public void TestIt() { var groove = new GroovesharkClientWrapper(); groove.Connect(); var provider = new AggregateSongProvider(); provider.Providers.Add(new GroovesharkSongProvider(new Lazy<IGroovesharkClient>(() => groove))); provider.Providers.Add(new SpotifySongProvider(new DefaultSpotifyImageProvider())); var player = new AggregateSongPlayer(); player.Players.Add(new GroovesharkSongPlayer(new Lazy<IGroovesharkClient>(() => groove))); var song = provider.GetSongs("NOFX", CancellationToken.None).Result.FirstOrDefault(); if (player.CanPlay(song)) { player.Start(song); } }
public void GetSongs_ExceptionBubblesUp() { var provider = new AggregateSongProvider(); var provider1 = Substitute.For<ISongProvider>(); var provider2 = Substitute.For<ISongProvider>(); provider.Providers.Add(provider1); provider.Providers.Add(provider2); provider1 .GetSongs(Arg.Any<string>(), Arg.Any<CancellationToken>()) .Returns(x => { throw new Exception(); }); provider2 .GetSongs(Arg.Any<string>(), Arg.Any<CancellationToken>()) .Returns(x => { return Task<IEnumerable<Song>>.Factory.StartNew(() => new[] { new Song(), new Song() }); }); Assert.Throws<AggregateException>(() => provider.GetSongs("NOFX", CancellationToken.None).Wait()); }