using ZB.MOM.WW.ScadaBridge.SiteRuntime.Scripts; namespace ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests.Scripts; public class TriggerEvalGateLifecycleTests { /// Verifies that the shared gate is process-owned and remains usable after a caller disposes it. /// A task that represents the asynchronous operation. [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(); } /// Verifies that an owned gate is disposed by its caller. [Fact] public void OwnedGate_IsDisposedByCaller() { var gate = new TriggerEvalGate(1); gate.Dispose(); Assert.Throws(() => { _ = gate.WaitAsync(CancellationToken.None); }); } }