// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Moq; using Xunit; namespace Microsoft.AspNetCore.Mvc.ViewComponents { public class DefaultViewComponentFactoryTest { [Fact] public void CreateViewComponent_ActivatesProperties_OnTheInstance() { // Arrange var context = new ViewComponentContext { }; var component = new ActivablePropertiesViewComponent(); var activator = new Mock(); activator.Setup(a => a.Create(context)) .Returns(component); var factory = new DefaultViewComponentFactory(activator.Object); // Act var result = factory.CreateViewComponent(context); // Assert var activablePropertiesComponent = Assert.IsType(result); Assert.Same(component, activablePropertiesComponent); Assert.Same(component.Context, activablePropertiesComponent.Context); } [Fact] public void ReleaseViewComponent_CallsDispose_OnTheInstance() { // Arrange var context = new ViewComponentContext { }; var component = new ActivablePropertiesViewComponent(); var viewComponentActivator = new Mock(); viewComponentActivator.Setup(vca => vca.Release(context, component)) .Callback((c, o) => (o as IDisposable)?.Dispose()); var factory = new DefaultViewComponentFactory(viewComponentActivator.Object); // Act factory.ReleaseViewComponent(context, component); // Assert Assert.Equal(true, component.Disposed); } } public class ActivablePropertiesViewComponent : IDisposable { [ViewComponentContext] public ViewComponentContext Context { get; set; } public bool Disposed { get; private set; } public void Dispose() { Disposed = true; } public string Invoke() { return "something"; } } }