public void TestMediaEngineService()
{
AssertTransition(null, () => service.Volume = 5, PlayerEvent.Volume);
for (int i = 0; i < 3; i++)
{
WaitFor(PlayerState.Idle);
// Assert the default, just-started-up idle state
Assert.IsFalse(service.IsPlaying());
Assert.AreEqual(null, service.CurrentTrack);
Assert.AreEqual(null, service.CurrentSafeUri);
LoadAndPlay("A_boy.ogg");
Assert.AreEqual(0, service.CurrentTrack.PlayCount);
for (int j = 0; j < 4; j++)
{
AssertTransition(() => service.Pause(), PlayerState.Paused);
AssertTransition(() => service.Play(), PlayerState.Playing);
Assert.IsTrue(service.IsPlaying());
Thread.Sleep((int)(rand.NextDouble() * 100));
}
AssertTransition(() => service.Position = service.Length - 200, PlayerEvent.Seek);
WaitFor(PlayerState.Idle, PlayerEvent.EndOfStream);
Assert.AreEqual(1, service.CurrentTrack.PlayCount);
service.Close(true);
}
play_when_idles = 0;
Assert.AreEqual(PlayerState.Idle, service.CurrentState);
service.Play();
Thread.Sleep(50);
Assert.AreEqual(1, play_when_idles);
Assert.AreEqual(PlayerState.Idle, service.CurrentState);
LoadAndPlay("A_boy.ogg");
AssertTransition(() => service.TrackInfoUpdated(), PlayerEvent.TrackInfoUpdated);
LoadAndPlay("A_girl.ogg");
AssertTransition(() => service.TrackInfoUpdated(), PlayerEvent.TrackInfoUpdated);
AssertTransition(() => service.Dispose(), PlayerState.Paused, PlayerState.Idle);
}