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();
}
}