From 0733dd43e295c7a7ff18858dc531c7a9e1be1986 Mon Sep 17 00:00:00 2001 From: Adam Ralph Date: Mon, 3 Mar 2014 21:34:29 +0100 Subject: [PATCH] added ObjectDisposalFeature.RegisteringManyDisposableObjectsInASingleStepWithATimeout closes #135 --- .../ObjectDisposalFeature.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/test/Xbehave.Features.Net40/ObjectDisposalFeature.cs b/src/test/Xbehave.Features.Net40/ObjectDisposalFeature.cs index 4b9a2114..1fb611c3 100644 --- a/src/test/Xbehave.Features.Net40/ObjectDisposalFeature.cs +++ b/src/test/Xbehave.Features.Net40/ObjectDisposalFeature.cs @@ -9,6 +9,7 @@ namespace Xbehave.Test.Acceptance using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; + using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Xbehave.Test.Acceptance.Infrastructure; @@ -48,6 +49,29 @@ public static void RegisteringManyDisposableObjectsInASingleStep() .And(() => DisposableObjectsShouldEachHaveBeenDisposedOnceInReverseOrder()); } + [Scenario] + public static void RegisteringManyDisposableObjectsInASingleStepWithATimeout() + { + var feature = default(Type); + var results = default(MethodResult[]); + + "Given a step which registers many disposable objects followed by a step which uses the objects" + .Given(() => feature = typeof(SingleStepWithATimeout)); + + "When running the scenario" + .When(() => results = TestRunner.Run(feature).ToArray()) + .Teardown(Disposable.ClearRecordedEvents); + + "Then there should be no failures" + .Then(() => results.Should().NotContain(result => result is FailedResult)); + + "And some disposable objects should have been created" + .And(() => SomeDisposableObjectsShouldHaveBeenCreated()); + + "And the disposable objects should each have been disposed once in reverse order" + .And(() => DisposableObjectsShouldEachHaveBeenDisposedOnceInReverseOrder()); + } + [Scenario] public static void RegisteringDisposableObjectWhichThrowExceptionsWhenDisposed() { @@ -288,6 +312,34 @@ public static void Scenario() }); } } + + private static class SingleStepWithATimeout + { + [Scenario] + public static void Scenario() + { + var disposable0 = default(Disposable); + var disposable1 = default(Disposable); + var disposable2 = default(Disposable); + + "Given some disposables" + .Given(c => + { + disposable0 = new Disposable().Using(c); + disposable1 = new Disposable().Using(c); + disposable2 = new Disposable().Using(c); + }) + .WithTimeout(Timeout.Infinite); + + "When using the disposables" + .When(() => + { + disposable0.Use(); + disposable1.Use(); + disposable2.Use(); + }); + } + } private static class SingleStepWithBadDisposables {