public ISetupTest ExpectObservable <T>(IObservable <T> observable, string unsubscriptionMarbles = null)
        {
            var actual    = new List <Recorded <Notification <object> > >();
            var flushTest = new FlushableTest()
            {
                Actual = actual, Ready = false
            };
            var unsubscriptionFrame = long.MaxValue;

            if (unsubscriptionMarbles != null)
            {
                unsubscriptionFrame
                    = Parser.ParseMarblesAsSubscriptions(unsubscriptionMarbles, _frameTimeFactor).Unsubscribe;
            }
            IDisposable subscription = observable.Subscribe(x =>
            {
                object value = x;
                // Support Observable-of-Observables
                if (value is IObservable <object> )
                {
                    value = MaterializeInnerObservable(value as IObservable <object>, Clock);
                }
                actual.Add(new Recorded <Notification <object> >(Clock, Notification.CreateOnNext(value)));
            },
                                                            (error) => actual.Add(new Recorded <Notification <object> >(Clock, Notification.CreateOnError <object>(error))),
                                                            () => actual.Add(new Recorded <Notification <object> >(Clock, Notification.CreateOnCompleted <object>())));

            if (unsubscriptionFrame != long.MaxValue)
            {
                ScheduleAbsolute((object)null, unsubscriptionFrame, (scheduler, state) =>
                {
                    subscription.Dispose();
                    return(Disposable.Empty);
                });
            }

            _flushTests.Add(flushTest);

            return(new SetupTest(flushTest, _frameTimeFactor));
        }
 public SetupTest(FlushableTest flushTest, int frameTimeFactor)
 {
     _flushTest       = flushTest;
     _frameTimeFactor = frameTimeFactor;
 }