// Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; using System.Collections.Generic; using System.Reactive.Disposables; namespace Avalonia.Styling.UnitTests { internal class TestSubject : IObserver, IObservable { private readonly T _initial; private readonly List> _subscribers = new List>(); public TestSubject(T initial) { _initial = initial; } public int SubscriberCount => _subscribers.Count; public void OnCompleted() { foreach (IObserver subscriber in _subscribers.ToArray()) { subscriber.OnCompleted(); } } public void OnError(Exception error) { foreach (IObserver subscriber in _subscribers.ToArray()) { subscriber.OnError(error); } } public void OnNext(T value) { foreach (IObserver subscriber in _subscribers.ToArray()) { subscriber.OnNext(value); } } public IDisposable Subscribe(IObserver observer) { _subscribers.Add(observer); observer.OnNext(_initial); return Disposable.Create(() => _subscribers.Remove(observer)); } } }