TestSubject.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reactive.Disposables;
  4. namespace Avalonia.Base.UnitTests.Styling
  5. {
  6. internal class TestSubject<T> : IObserver<T>, IObservable<T>
  7. {
  8. private readonly T _initial;
  9. private readonly List<IObserver<T>> _subscribers = new List<IObserver<T>>();
  10. public TestSubject(T initial)
  11. {
  12. _initial = initial;
  13. }
  14. public int SubscriberCount => _subscribers.Count;
  15. public void OnCompleted()
  16. {
  17. foreach (IObserver<T> subscriber in _subscribers.ToArray())
  18. {
  19. subscriber.OnCompleted();
  20. }
  21. }
  22. public void OnError(Exception error)
  23. {
  24. foreach (IObserver<T> subscriber in _subscribers.ToArray())
  25. {
  26. subscriber.OnError(error);
  27. }
  28. }
  29. public void OnNext(T value)
  30. {
  31. foreach (IObserver<T> subscriber in _subscribers.ToArray())
  32. {
  33. subscriber.OnNext(value);
  34. }
  35. }
  36. public IDisposable Subscribe(IObserver<T> observer)
  37. {
  38. _subscribers.Add(observer);
  39. observer.OnNext(_initial);
  40. return Disposable.Create(() => _subscribers.Remove(observer));
  41. }
  42. }
  43. }