using ZB.MOM.WW.ScadaBridge.SiteRuntime.Scripts; namespace ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests.Scripts; public class TriggerEvalGateLifecycleTests { [Fact] public async Task SharedGate_IsProcessOwnedAndRemainsUsableAfterCallerDisposes() { var gate = TriggerEvalGate.Shared(new SiteRuntimeOptions()); gate.Dispose(); Assert.Same(gate, TriggerEvalGate.Shared(new SiteRuntimeOptions())); using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(5)); await gate.WaitAsync(deadline.Token); gate.Release(); } [Fact] public void OwnedGate_IsDisposedByCaller() { var gate = new TriggerEvalGate(1); gate.Dispose(); Assert.Throws(() => { _ = gate.WaitAsync(CancellationToken.None); }); } }