예제 #1
0
        public void AlbumArtLoaderIgnoresCachingPersistedItemTest()
        {
            var container = new Athena.IoC.Container();
            var model = new AmpacheModel();
            container.Register<AmpacheModel>().To(model);
            var defaultStream = new MemoryStream();

            var persistor = Substitute.For<IPersister<AlbumArt>>();
            container.Register<IPersister<AlbumArt>>().To(persistor);
            persistor.IsPersisted(Arg.Any<IEntity>()).Returns(true);
            var art = new AlbumArt();
            persistor.IsPersisted(Arg.Is(art)).Returns(true);
            int timesCalled = 0;
            persistor.When(x => x.Persist(Arg.Any<AlbumArt>())).Do( x => { ++timesCalled; });
            art.ArtStream = new MemoryStream();
            persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(new [] {art});
            var prefs = new UserConfiguration();
            prefs.CacheArt = true;
            model.Configuration = prefs;

            var target = new AlbumArtLoader(container, defaultStream);
            var sng = new AmpacheSong();
            sng.ArtUrl = "test";
            model.PlayingSong = sng;

            System.Threading.Thread.Sleep(100);
            Assert.That(model.AlbumArtStream, Is.SameAs(art.ArtStream));
            Assert.That(timesCalled, Is.EqualTo(0));
        }
예제 #2
0
 public AlbumArtLoader(Athena.IoC.Container container, MemoryStream defaultStream)
 {
     _container = container;
     _defaultStream = defaultStream;
     _model = container.Resolve<AmpacheModel>();
     _model.PropertyChanged += Handle_modelPropertyChanged;
     LoadAlbumImage();
 }
예제 #3
0
 public void BackgroundListensForModelDispositionTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     persister.SelectBy(Arg.Any<int>()).Returns(new UserConfiguration { ServerUrl = string.Empty });
     var target = new BackgroundHandle(null, path, null, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     target.Model.Dispose();
     Assert.That(target.FinalizedCalled, Is.True);
 }
예제 #4
0
 public void BackgroundListensForPlayingChangesAndCancelsShutOffTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     persister.SelectBy(Arg.Any<int>()).Returns(new UserConfiguration { ServerUrl = string.Empty });
     var target = new BackgroundHandle(null, path, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     System.Threading.Thread.Sleep(100);
     target.Model.IsPlaying = true;
     Assert.That(target.StopShutOffCallCount, Is.EqualTo(1));
 }
예제 #5
0
 public void BackgroundListensForConfigChangesTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     bool persisted = false;
     var config = new UserConfiguration();
     persister.When(x => x.Persist(config)).Do(p => persisted = true);
     var target = new BackgroundHandle(null, path, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     System.Threading.Thread.Sleep(100);
     target.Model.Configuration = config;
     Assert.That(persisted, Is.True);
 }
예제 #6
0
        public void AlbumArtLoaderUsesLoadedArtAfterLoadingTest()
        {
            var container = new Athena.IoC.Container();
            var model = new AmpacheModel();
            container.Register<AmpacheModel>().To(model);
            var defaultStream = new MemoryStream();

            var persistor = Substitute.For<IPersister<AlbumArt>>();
            container.Register<IPersister<AlbumArt>>().To(persistor);
            persistor.IsPersisted(Arg.Any<IEntity>()).Returns(false);
            var art = new AlbumArt();
            art.ArtStream = new MemoryStream();
            persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(new [] {art});
            var prefs = new UserConfiguration();
            prefs.CacheArt = false;
            model.Configuration = prefs;

            var target = new AlbumArtLoader(container, defaultStream);
            var sng = new AmpacheSong();
            sng.ArtUrl = "test";
            model.PlayingSong = sng;

            System.Threading.Thread.Sleep(100);
            Assert.That(model.AlbumArtStream, Is.SameAs(art.ArtStream));
        }
예제 #7
0
        public void AlbumArtLoaderUsesDefaultWhenInitializedTest()
        {
            var container = new Athena.IoC.Container();
            var model = new AmpacheModel();
            container.Register<AmpacheModel>().To(model);
            var defaultStream = new MemoryStream();

            Assert.That(model.AlbumArtStream, Is.Not.SameAs(defaultStream));
            var target = new AlbumArtLoader(container, defaultStream);
            Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream));
        }
예제 #8
0
        public void AlbumArtLoaderUsesDefaultArtWhenNoArtAvailableTest()
        {
            var container = new Athena.IoC.Container();
            var model = new AmpacheModel();
            container.Register<AmpacheModel>().To(model);
            var defaultStream = new MemoryStream();

            var target = new AlbumArtLoader(container, defaultStream);
            var sng = new AmpacheSong();
            sng.ArtUrl = string.Empty;
            model.PlayingSong = sng;

            System.Threading.Thread.Sleep(100);
            Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream));
        }
예제 #9
0
        public void AlbumArtLoaderUsesDefaultArtWhenLoadingArtTest()
        {
            var container = new Athena.IoC.Container();
            var model = new AmpacheModel();
            container.Register<AmpacheModel>().To(model);
            var defaultStream = new MemoryStream();

            var persistor = Substitute.For<IPersister<AlbumArt>>();
            persistor.IsPersisted(Arg.Any<IEntity>()).Returns(false);
            int timesCalled = 0;
            persistor.SelectBy<AmpacheSong>(Arg.Any<AmpacheSong>()).Returns(x => { ++timesCalled; Assert.That(model.AlbumArtStream, Is.SameAs(defaultStream)); return Enumerable.Empty<AlbumArt>();});
            container.Register<IPersister<AlbumArt>>().To(persistor);

            var target = new AlbumArtLoader(container, defaultStream);
            var sng = new AmpacheSong();
            sng.ArtUrl = "test";
            model.PlayingSong = sng;

            System.Threading.Thread.Sleep(100);
            Assert.That(timesCalled, Is.EqualTo(1));
        }
예제 #10
0
 public override void OnCreate()
 {
     base.OnCreate ();
     Console.SetOut(new AndroidLogTextWriter());
     DataAccess.Configurator.ArtLocalDirectory = CacheDir.AbsolutePath;
     _container = new Athena.IoC.Container();
     _model = new AmpacheModel();
     _container.Register<AmpacheModel>().To(_model);
     DataAccess.Configurator.Configure(_container);
     var am = (AlarmManager)ApplicationContext.GetSystemService(Context.AlarmService);
     var ping = new Intent(PingReceiver.INTENT);
     _pingIntent = PendingIntent.GetBroadcast(ApplicationContext, 0, ping, PendingIntentFlags.UpdateCurrent);
     am.SetRepeating(AlarmType.RtcWakeup, Java.Lang.JavaSystem.CurrentTimeMillis() + (long)TimeSpan.FromMinutes(5).TotalMilliseconds, (long)TimeSpan.FromMinutes(5).TotalMilliseconds, _pingIntent);
     var stm = Resources.OpenRawResource(Resource.Drawable.ct_default_artwork);
     var stream = new System.IO.MemoryStream();
     stm.CopyTo(stream);
     stream.Position = 0;
     Start(stream);
     _player = new AndroidPlayer(_model, ApplicationContext);
     _notifications = new AmpacheNotifications(this.ApplicationContext, _model);
     var telSvc = this.ApplicationContext.GetSystemService(Context.TelephonyService) as Android.Telephony.TelephonyManager;
     if(telSvc != null) {
         telSvc.Listen(new AmpachePhoneStateListener(_model), Android.Telephony.PhoneStateListenerFlags.CallState);
     }
 }
예제 #11
0
 public void BackgroundStartPopulatesModelPlaylistWhenUserConfigExistsTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var config = new UserConfiguration();
     config.ServerUrl = "test";
     config.User = "******";
     config.Password = "******";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     persister.SelectBy(Arg.Any<int>()).Returns(config);
     container.Register<IPersister<UserConfiguration>>().To(persister);
     var factory = Substitute.For<AmpacheSelectionFactory>();
     factory.AuthenticateToServer(config).Returns(x => (Authenticate)null);
     container.Register<IPersister<UserConfiguration>>();
     var target = new BackgroundHandle(config, path, factory, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     var exp = target.Model.Playlist;
     Assert.That(exp, Is.Not.Null);
 }
예제 #12
0
 public void BackgroundStartPopulatesModelFactoryWhenUserConfigExistsTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var config = new UserConfiguration();
     config.ServerUrl = "test";
     config.User = "******";
     config.Password = "******";
     var persister = Substitute.For<IPersister<AmpacheSong>>();
     container.Register<IPersister<AmpacheSong>>().To(persister);
     var configpersist = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(configpersist);
     configpersist.SelectBy(Arg.Any<int>()).Returns(config);
     var sngs = new List<AmpacheSong>();
     sngs.Add(new AmpacheSong(){Url = "http://test"});
     sngs.Add(new AmpacheSong(){Url = "http://test"});
     persister.SelectAll().Returns(sngs);
     var factory = Substitute.For<AmpacheSelectionFactory>();
     factory.AuthenticateToServer(config).Returns(x => (Authenticate)null);
     var mockHs = new MockHandShake();
     mockHs.Setup("test", "test");
     factory.Handshake.Returns(mockHs);
     var target = new BackgroundHandle(config, path, factory, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     System.Threading.Thread.Sleep(100);
     var exp = target.Model.Factory;
     Assert.That(exp, Is.Not.Null);
     var userMessage = target.Model.UserMessage;
     Assert.That(userMessage, Is.Not.Null);
     Assert.That(userMessage, Is.EqualTo(BackgroundHandle.SUCCESS_MESSAGE));
     Assert.That(target.Model.Playlist, Is.EquivalentTo(sngs));
 }
예제 #13
0
 public void BackgroundStartPopulatesModelFactoryWhenNoUserConfigExistsTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     persister.SelectBy(Arg.Any<int>()).Returns(new UserConfiguration { ServerUrl = string.Empty });
     var target = new BackgroundHandle(null, path, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     var exp = target.Model.Factory;
     Assert.That(exp, Is.Not.Null);
 }
예제 #14
0
 public void BackgroundStartInitializesModelConfigurationTest()
 {
     var container = new Athena.IoC.Container();
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     persister.SelectBy(Arg.Any<int>()).Returns(new UserConfiguration { ServerUrl = string.Empty });
     var target = new BackgroundHandle(null, null, new AmpacheModel(), container);
     var initial = target.Model;
     target.Start(new MemoryStream());
     var after = target.Model.Configuration;
     Assert.That(after, Is.Not.Null);
 }
예제 #15
0
 public void BackgroundStartBeginsAutoShutOffTest()
 {
     var container = new Athena.IoC.Container();
     string path = "myartpath";
     var persister = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(persister);
     persister.SelectBy(Arg.Any<int>()).Returns(new UserConfiguration { ServerUrl = string.Empty });
     var target = new BackgroundHandle(null, path, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     Assert.That(target.AutoShutOffCallCount, Is.EqualTo(1));
 }
예제 #16
0
 public void BackgroundListensForPlaylistChangesTest()
 {
     var container = new Athena.IoC.Container();
     var persister = Substitute.For<IPersister<AmpacheSong>>();
     var sng = new AmpacheSong();
     container.Register<IPersister<AmpacheSong>>().To(persister);
     var usrp = Substitute.For<IPersister<UserConfiguration>>();
     container.Register<IPersister<UserConfiguration>>().To(usrp);
     bool persisted = false;
     persister.When(p => p.Persist(sng)).Do(p => persisted = true);
     string path = "myartpath";
     var target = new BackgroundHandle(null, path, new AmpacheModel(), container);
     target.Start(new MemoryStream());
     System.Threading.Thread.Sleep(100);
     var sngs = new List<AmpacheSong>();
     sngs.Add(sng);
     target.Model.Playlist = sngs;
     Assert.That(persisted, Is.True);
 }
 public AmpacheSelectionFactory(Athena.IoC.Container container)
 {
     _container = container;
 }
예제 #18
0
 public Binder(Athena.IoC.Container container)
 {
     Container = container;
 }