public async Task ScopedStateMonadShouldDisposeVariablesThatItRemoves() { var repo = new MockRepository(MockBehavior.Strict); var sd = repo.Create <IDoubleDisposable>(); var monad1 = CreateMonad(repo); var scopedMonad = new ScopedStateMonad( monad1, ImmutableDictionary <VariableName, object> .Empty ); sd.Setup(x => x.DisposeAsync(scopedMonad)).Returns(Task.CompletedTask); sd.Setup(x => x.Dispose()); await scopedMonad.SetVariableAsync(new VariableName("V"), sd.Object, false, null); await scopedMonad.RemoveVariableAsync(new VariableName("V"), true, null); repo.VerifyAll(); }
public async Task ScopedStateMonadShouldDisposeVariablesWhenItIsDisposed() { var repo = new MockRepository(MockBehavior.Strict); var sd = repo.Create <IDoubleDisposable>(); var monad1 = CreateMonad(repo); var scopedMonad = new ScopedStateMonad( monad1, ImmutableDictionary <VariableName, object> .Empty ); // ReSharper disable once AccessToDisposedClosure sd.Setup(x => x.DisposeAsync(scopedMonad)).Returns(Task.CompletedTask); sd.Setup(x => x.Dispose()); await scopedMonad.SetVariableAsync(new VariableName("V"), sd.Object, false, null); await scopedMonad.DisposeAsync(); repo.VerifyAll(); }