// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.Styling.UnitTests { using System; using System.Collections.Generic; using System.Reactive.Disposables; internal class TestSubject : IObserver, IObservable { private T initial; private List> subscribers = new List>(); public TestSubject(T initial) { this.initial = initial; } public int SubscriberCount { get { return this.subscribers.Count; } } public void OnCompleted() { foreach (IObserver subscriber in this.subscribers.ToArray()) { subscriber.OnCompleted(); } } public void OnError(Exception error) { foreach (IObserver subscriber in this.subscribers.ToArray()) { subscriber.OnError(error); } } public void OnNext(T value) { foreach (IObserver subscriber in this.subscribers.ToArray()) { subscriber.OnNext(value); } } public IDisposable Subscribe(IObserver observer) { this.subscribers.Add(observer); observer.OnNext(initial); return Disposable.Create(() => this.subscribers.Remove(observer)); } } }