public void dispose_of_managed_resources_is_not_called_when_implicity_disposed() { var obj = new DisposableObject(); obj.DoFinalize(); Assert.Equal(0, obj.DisposeOfManagedResourcesCount); }
public void dispose_of_managed_resources_is_called_when_explicitly_disposed() { var obj = new DisposableObject(); obj.Dispose(); Assert.Equal(1, obj.DisposeOfManagedResourcesCount); }
public void ImmediatelyHandlingDisposedClosure() { using (var disposableObject = new DisposableObject()) { // HandleAction can be marked [InstantHandle] to narrow the scope of the analysis HandleAction(() => disposableObject.DoSomething(42)); } }
public void dispose_of_disposes_of_disposable() { var obj = new DisposableObject(); Assert.False(obj.IsDisposed); DisposableBase.DisposeOf(obj); Assert.True(obj.IsDisposed); }
public void AccessingDisposedClosure() { using (var disposableObject = new DisposableObject()) { // Cannot fix this without rewriting - genuine bug SetAction(() => disposableObject.DoSomething(42)); } CallAction(); }
public void DisposingContainerDisposesOwnedObjects() { ILifetimeContainer container = new LifetimeContainer(); DisposableObject mdo = new DisposableObject(); container.Add(mdo); container.Dispose(); Assert.IsTrue(mdo.WasDisposed); }
public void Using_DisposableField_DisposeOldValue() { DisposableObject object1 = new DisposableObject(); DisposableObject object1Copy = object1; using (object1) { #pragma warning disable CS0728 // Possibly incorrect assignment to local which is the argument to a using or lock statement object1 = new DisposableObject(); #pragma warning restore CS0728 // Possibly incorrect assignment to local which is the argument to a using or lock statement } Assert.True(object1Copy.IsDisposed); }
public void ContainerEnsuresObjectsWontBeCollected() { ILifetimeContainer container = new LifetimeContainer(); DisposableObject mdo = new DisposableObject(); WeakReference wref = new WeakReference(mdo); container.Add(mdo); mdo = null; GC.Collect(); Assert.AreEqual(1, container.Count); mdo = wref.Target as DisposableObject; Assert.IsNotNull(mdo); Assert.IsFalse(mdo.WasDisposed); }
public void Dispose_ListWithOneItem_DisposesItem() { // Arrange var scope = new Scope(); var disposable = new DisposableObject(); Assert.IsFalse(disposable.IsDisposedOnce, "Test setup"); var disposables = new List<IDisposable> { disposable }; scope.RegisterForDisposal(disposable); // Act scope.Dispose(); // Assert Assert.IsTrue(disposable.IsDisposedOnce); }
public void CanEnumerateItemsInContainer() { ILifetimeContainer container = new LifetimeContainer(); DisposableObject mdo = new DisposableObject(); container.Add(mdo); int count = 0; bool foundMdo = false; foreach (object obj in container) { count++; if (ReferenceEquals(mdo, obj)) foundMdo = true; } Assert.AreEqual(1, count); Assert.IsTrue(foundMdo); }
public void Dispose_WhenDisposeEndsActionRegisteredDuringDisposal_CallsTheRegisteredDelegate() { // Arrange bool actionCalled = false; var disposable = new DisposableObject(); var scope = new Scope(); var container = new Container(); container.Register<DisposableObject>(() => disposable, new FakeScopedLifestyle(scope)); container.RegisterInitializer<DisposableObject>(instance => { scope.WhenScopeEnds(() => actionCalled = true); }); scope.WhenScopeEnds(() => container.GetInstance<DisposableObject>()); // Act scope.Dispose(); // Assert Assert.IsTrue(actionCalled); }
public void Dispose_ScopedItemResolvedDuringScopeEndAction_GetsDisposed() { // Arrange var disposable = new DisposableObject(); var scope = new Scope(); var container = new Container(); container.Register<DisposableObject>(() => disposable, new FakeScopedLifestyle(scope)); scope.WhenScopeEnds(() => container.GetInstance<DisposableObject>()); // Act scope.Dispose(); // Assert Assert.IsTrue(disposable.IsDisposedOnce); }
public void DisposableObjectIsDisposedAfterDisposal() { DisposableObject disp = new DisposableObject(); disp.Dispose(); Assert.True(disp.IsDisposed); }
public void is_disposed_is_false_when_not_disposed() { var obj = new DisposableObject(); Assert.False(obj.IsDisposed); }
public void RemovingItemsFromContainerDoesNotDisposeThem() { ILifetimeContainer container = new LifetimeContainer(); DisposableObject mdo = new DisposableObject(); container.Add(mdo); container.Remove(mdo); container.Dispose(); Assert.IsFalse(mdo.WasDisposed); }
public void Verify_VerifyingAScopedInstance_DisposesThatInstance() { // Arrange var disposable = new DisposableObject(); var scopedLifestyle = new FakeScopedLifestyle(scope: null); var container = new Container(); container.Register<IDisposable>(() => disposable, scopedLifestyle); // Act container.Verify(); // Assert Assert.IsTrue(disposable.IsDisposedOnce); }
public void Controller_JsonWithParameterValueAndSerializerSettings_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<DefaultHttpContext>(); mockHttpContext.Setup(x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>())); var controller = new TestableController() { ActionContext = new ActionContext(mockHttpContext.Object, new RouteData(), new ActionDescriptor()) }; var input = new DisposableObject(); var serializerSettings = new JsonSerializerSettings(); // Act var result = controller.Json(input, serializerSettings); // Assert Assert.IsType<JsonResult>(result); Assert.Same(input, result.Value); var jsonFormatter = result.Formatter as JsonOutputFormatter; Assert.Same(serializerSettings, jsonFormatter.SerializerSettings); mockHttpContext.Verify( x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>()), Times.Once()); }
public void is_disposing_is_false_when_not_disposing() { var obj = new DisposableObject(); Assert.False(obj.IsDisposingAccessor); }
public static void AddNodeIdHandler(DisposableObject caller, Action<IReferenceByGuid, Guid> method) { EnsureDisposedHandlersRemoved(); NodeIdHandlers.AddOrUpdate(caller, method, (key, existing) => method); }
public void HttpNotFound_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<DefaultHttpContext>(); mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>())); var controller = new TestableController() { ActionContext = new ActionContext(mockHttpContext.Object, new RouteData(), new ActionDescriptor()) }; var input = new DisposableObject(); // Act var result = controller.HttpNotFound(input); // Assert Assert.IsType<HttpNotFoundObjectResult>(result); Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()), Times.Once()); }
public void BadRequest_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<HttpContext>(); mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>())); var controller = new TestableController(); controller.ControllerContext.HttpContext = mockHttpContext.Object; var input = new DisposableObject(); // Act var result = controller.HttpBadRequest(input); // Assert Assert.IsType<BadRequestObjectResult>(result); Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()), Times.Once()); }
public void CreatedAtRoute_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<HttpContext>(); mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>())); var controller = new TestableController(); controller.ControllerContext.HttpContext = mockHttpContext.Object; var input = new DisposableObject(); // Act var result = controller.CreatedAtRoute("SampleRoute", input); // Assert Assert.IsType<CreatedAtRouteResult>(result); Assert.Equal(StatusCodes.Status201Created, result.StatusCode); Assert.Equal("SampleRoute", result.RouteName); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()), Times.Once()); }
public void Created_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<HttpContext>(); mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>())); var uri = new Uri("/test/url", UriKind.Relative); var controller = new TestableController(); controller.ControllerContext.HttpContext = mockHttpContext.Object; var input = new DisposableObject(); // Act var result = controller.Created(uri, input); // Assert Assert.IsType<CreatedResult>(result); Assert.Equal(StatusCodes.Status201Created, result.StatusCode); Assert.Equal(uri.OriginalString, result.Location); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()), Times.Once()); }
public void Created_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<DefaultHttpContext>(); mockHttpContext.Setup(x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>())); var uri = new Uri("/test/url", UriKind.Relative); var controller = new TestableController() { ActionContext = new ActionContext(mockHttpContext.Object, new RouteData(), new ActionDescriptor()) }; var input = new DisposableObject(); // Act var result = controller.Created(uri, input); // Assert Assert.IsType<CreatedResult>(result); Assert.Equal(StatusCodes.Status201Created, result.StatusCode); Assert.Equal(uri.OriginalString, result.Location); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>()), Times.Once()); }
public void Dispose_RecursiveResolveTriggeredDuringEndScopeAction_StillDisposesRegisteredDisposables() { // Arrange var scope = new Scope(); var scopedLifestyle = new FakeScopedLifestyle(scope); var container = new Container(); var disposable = new DisposableObject(); scope.RegisterForDisposal(disposable); container.Register<IPlugin>(() => { scope.WhenScopeEnds(() => { container.GetInstance<IPlugin>(); }); return new DisposablePlugin(); }); container.GetInstance<IPlugin>(); try { // Act scope.Dispose(); Assert.Fail("Exception expected."); } catch { // Assert Assert.IsTrue(disposable.IsDisposedOnce, "Even though there was a recursion detected when executing Action delegates, all " + "registered disposables should still get disposed."); } }
public void BadRequest_IDisposableObject_RegistersForDispose() { // Arrange var mockHttpContext = new Mock<DefaultHttpContext>(); mockHttpContext.Setup(x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>())); var controller = new TestableController() { ActionContext = new ActionContext(mockHttpContext.Object, new RouteData(), new ActionDescriptor()) }; var input = new DisposableObject(); // Act var result = controller.HttpBadRequest(input); // Assert Assert.IsType<BadRequestObjectResult>(result); Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode); Assert.Same(input, result.Value); mockHttpContext.Verify( x => x.Response.OnResponseCompleted(It.IsAny<Action<object>>(), It.IsAny<object>()), Times.Once()); }
public void Verify_RegisterForDisposalCalledDuringVerification_EnsuresDisposalOfRegisteredDisposable() { // Arrange var disposable = new DisposableObject(); var scopedLifestyle = new FakeScopedLifestyle(scope: null); var container = new Container(); container.Register<IPlugin>(() => new DisposablePlugin()); container.RegisterInitializer<IPlugin>(_ => { scopedLifestyle.RegisterForDisposal(container, disposable); }); // Act container.Verify(); // Assert Assert.IsTrue(disposable.IsDisposedOnce); }
public void is_disposing_is_true_when_explicitly_disposed() { var obj = new DisposableObject(); obj.Dispose(); Assert.True(obj.DisposeOfManagedResourcesIsDisposingValue); }
public static void RemoveNodeIdHandler(DisposableObject caller) { EnsureDisposedHandlersRemoved(); NodeIdHandlers.RemoveAll(x => ReferenceEquals(x.Key, caller)); }
public void is_disposed_is_true_when_explicity_disposed() { var obj = new DisposableObject(); obj.Dispose(); Assert.True(obj.IsDisposed); }