using Microsoft.Extensions.Options; namespace Marathon.UI.Tests.Support; /// /// Minimal in-memory for tests. /// public sealed class TestOptionsMonitor : IOptionsMonitor where T : class, new() { private T _value; private readonly List> _listeners = new(); public TestOptionsMonitor(T initial) { _value = initial; } public T CurrentValue => _value; public T Get(string? name) => _value; public IDisposable OnChange(Action listener) { _listeners.Add(listener); return new Subscription(() => _listeners.Remove(listener)); } public void Set(T next) { _value = next; foreach (var listener in _listeners.ToList()) listener(next, null); } private sealed class Subscription : IDisposable { private readonly Action _dispose; public Subscription(Action dispose) { _dispose = dispose; } public void Dispose() => _dispose(); } }