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());
        }
Example #2
0
        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());
        }