Fix tests and changed TagHelper activates property accessors.

- Changed TagHelper property accessors from private to protected internal.
- Changed throw tests to be shorter.
- Changed reflection setting to now use the internal accessibility of the TagHelpers
- Removed activator to just use internal accessibility of TagHelpers.
- Changed new StringWriter() instances where we didn't need the StringWriter to be TextWriter.Null
This commit is contained in:
N. Taylor Mullen 2014-10-16 16:52:56 -07:00 committed by NTaylorMullen
parent f8b0249918
commit f8f08f0903
11 changed files with 64 additions and 127 deletions

View File

@ -18,8 +18,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
private const string RouteAttributePrefix = "route-"; private const string RouteAttributePrefix = "route-";
private const string Href = "href"; private const string Href = "href";
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private IHtmlGenerator Generator { get; set; } protected internal IHtmlGenerator Generator { get; set; }
/// <summary> /// <summary>
/// The name of the action method. /// The name of the action method.

View File

@ -18,11 +18,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ {
private const string RouteAttributePrefix = "route-"; private const string RouteAttributePrefix = "route-";
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private ViewContext ViewContext { get; set; } protected internal ViewContext ViewContext { get; set; }
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private IHtmlGenerator Generator { get; set; } protected internal IHtmlGenerator Generator { get; set; }
/// <summary> /// <summary>
/// The name of the action method. /// The name of the action method.

View File

@ -13,11 +13,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
[ContentBehavior(ContentBehavior.Replace)] [ContentBehavior(ContentBehavior.Replace)]
public class TextAreaTagHelper : TagHelper public class TextAreaTagHelper : TagHelper
{ {
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private IHtmlGenerator Generator { get; set; } protected internal IHtmlGenerator Generator { get; set; }
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private ViewContext ViewContext { get; set; } protected internal ViewContext ViewContext { get; set; }
/// <summary> /// <summary>
/// An expression to be evaluated against the current model. /// An expression to be evaluated against the current model.

View File

@ -14,11 +14,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
[ContentBehavior(ContentBehavior.Modify)] [ContentBehavior(ContentBehavior.Modify)]
public class ValidationMessageTagHelper : TagHelper public class ValidationMessageTagHelper : TagHelper
{ {
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private ViewContext ViewContext { get; set; } protected internal ViewContext ViewContext { get; set; }
// Protected to ensure subclasses are correctly activated. Internal for ease of use when testing.
[Activate] [Activate]
private IHtmlGenerator Generator { get; set; } protected internal IHtmlGenerator Generator { get; set; }
/// <summary> /// <summary>
/// Name to be validated on the current model. /// Name to be validated on the current model.

View File

@ -3,10 +3,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Moq; using Moq;
@ -65,9 +63,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var viewContext = TestableHtmlGenerator.GetViewContext(model: null, var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
htmlGenerator: htmlGenerator, htmlGenerator: htmlGenerator,
metadataProvider: metadataProvider); metadataProvider: metadataProvider);
anchorTagHelper.Generator = htmlGenerator;
var activator = new DefaultTagHelperActivator();
activator.Activate(anchorTagHelper, viewContext);
// Act // Act
await anchorTagHelper.ProcessAsync(tagHelperContext, output); await anchorTagHelper.ProcessAsync(tagHelperContext, output);
@ -106,8 +102,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
string.Empty, "Default", "http", "contoso.com", "hello=world", null, null)) string.Empty, "Default", "http", "contoso.com", "hello=world", null, null))
.Returns(new TagBuilder("a")) .Returns(new TagBuilder("a"))
.Verifiable(); .Verifiable();
anchorTagHelper.Generator = generator.Object;
SetGenerator(anchorTagHelper, generator.Object);
// Act & Assert // Act & Assert
await anchorTagHelper.ProcessAsync(context, output); await anchorTagHelper.ProcessAsync(context, output);
@ -142,8 +137,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
string.Empty, "Index", "Home", "http", "contoso.com", "hello=world", null, null)) string.Empty, "Index", "Home", "http", "contoso.com", "hello=world", null, null))
.Returns(new TagBuilder("a")) .Returns(new TagBuilder("a"))
.Verifiable(); .Verifiable();
anchorTagHelper.Generator = generator.Object;
SetGenerator(anchorTagHelper, generator.Object);
// Act & Assert // Act & Assert
await anchorTagHelper.ProcessAsync(context, output); await anchorTagHelper.ProcessAsync(context, output);
@ -188,10 +182,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// Act & Assert // Act & Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>( var ex = await Assert.ThrowsAsync<InvalidOperationException>(
async () => () => anchorTagHelper.ProcessAsync(context: null, output: output));
{
await anchorTagHelper.ProcessAsync(context: null, output: output);
});
Assert.Equal(expectedErrorMessage, ex.Message); Assert.Equal(expectedErrorMessage, ex.Message);
} }
@ -216,20 +207,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// Act & Assert // Act & Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>( var ex = await Assert.ThrowsAsync<InvalidOperationException>(
async () => () => anchorTagHelper.ProcessAsync(context: null, output: output));
{
await anchorTagHelper.ProcessAsync(context: null, output: output);
});
Assert.Equal(expectedErrorMessage, ex.Message); Assert.Equal(expectedErrorMessage, ex.Message);
} }
private void SetGenerator(ITagHelper tagHelper, IHtmlGenerator generator)
{
var tagHelperType = tagHelper.GetType();
tagHelperType.GetProperty("Generator", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(tagHelper, generator);
}
} }
} }

View File

@ -4,12 +4,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.PipelineCore;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing;
using Moq; using Moq;
@ -65,8 +63,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
metadataProvider: metadataProvider); metadataProvider: metadataProvider);
var expectedContent = "Something" + htmlGenerator.GenerateAntiForgery(viewContext) var expectedContent = "Something" + htmlGenerator.GenerateAntiForgery(viewContext)
.ToString(TagRenderMode.SelfClosing); .ToString(TagRenderMode.SelfClosing);
var activator = new DefaultTagHelperActivator(); formTagHelper.ViewContext = viewContext;
activator.Activate(formTagHelper, viewContext); formTagHelper.Generator = htmlGenerator;
// Act // Act
await formTagHelper.ProcessAsync(tagHelperContext, output); await formTagHelper.ProcessAsync(tagHelperContext, output);
@ -115,8 +113,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
generator.Setup(mock => mock.GenerateAntiForgery(viewContext)) generator.Setup(mock => mock.GenerateAntiForgery(viewContext))
.Returns(new TagBuilder("input")); .Returns(new TagBuilder("input"));
formTagHelper.ViewContext = viewContext;
SetViewContextAndGenerator(formTagHelper, viewContext, generator.Object); formTagHelper.Generator = generator.Object;
// Act // Act
await formTagHelper.ProcessAsync(context, output); await formTagHelper.ProcessAsync(context, output);
@ -175,8 +173,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
}) })
.Returns(new TagBuilder("form")) .Returns(new TagBuilder("form"))
.Verifiable(); .Verifiable();
formTagHelper.ViewContext = testViewContext;
SetViewContextAndGenerator(formTagHelper, testViewContext, generator.Object); formTagHelper.Generator = generator.Object;
// Act & Assert // Act & Assert
await formTagHelper.ProcessAsync(context, output); await formTagHelper.ProcessAsync(context, output);
@ -211,10 +209,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
.Setup(mock => mock.GenerateForm(viewContext, "Index", "Home", null, "POST", null)) .Setup(mock => mock.GenerateForm(viewContext, "Index", "Home", null, "POST", null))
.Returns(new TagBuilder("form")) .Returns(new TagBuilder("form"))
.Verifiable(); .Verifiable();
formTagHelper.ViewContext = viewContext;
SetViewContextAndGenerator(formTagHelper, formTagHelper.Generator = generator.Object;
viewContext,
generator.Object);
// Act & Assert // Act & Assert
await formTagHelper.ProcessAsync(context, output); await formTagHelper.ProcessAsync(context, output);
@ -273,9 +269,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
Action = "http://www.contoso.com", Action = "http://www.contoso.com",
AntiForgery = antiForgery, AntiForgery = antiForgery,
}; };
SetViewContextAndGenerator(formTagHelper, formTagHelper.ViewContext = viewContext;
viewContext, formTagHelper.Generator = generator.Object;
generator.Object);
var output = new TagHelperOutput("form", var output = new TagHelperOutput("form",
attributes: new Dictionary<string, string>(), attributes: new Dictionary<string, string>(),
content: string.Empty); content: string.Empty);
@ -313,10 +309,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
content: string.Empty); content: string.Empty);
// Act & Assert // Act & Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () => var ex = await Assert.ThrowsAsync<InvalidOperationException>(
{ () => formTagHelper.ProcessAsync(context: null, output: tagHelperOutput));
await formTagHelper.ProcessAsync(context: null, output: tagHelperOutput);
});
Assert.Equal(expectedErrorMessage, ex.Message); Assert.Equal(expectedErrorMessage, ex.Message);
} }
@ -341,10 +335,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
content: string.Empty); content: string.Empty);
// Act & Assert // Act & Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () => var ex = await Assert.ThrowsAsync<InvalidOperationException>(
{ () => formTagHelper.ProcessAsync(context: null, output: tagHelperOutput));
await formTagHelper.ProcessAsync(context: null, output: tagHelperOutput);
});
Assert.Equal(expectedErrorMessage, ex.Message); Assert.Equal(expectedErrorMessage, ex.Message);
} }
@ -352,7 +344,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
private static ViewContext CreateViewContext() private static ViewContext CreateViewContext()
{ {
var actionContext = new ActionContext( var actionContext = new ActionContext(
new Mock<HttpContext>().Object, new DefaultHttpContext(),
new RouteData(), new RouteData(),
new ActionDescriptor()); new ActionDescriptor());
@ -361,19 +353,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
Mock.Of<IView>(), Mock.Of<IView>(),
new ViewDataDictionary( new ViewDataDictionary(
new DataAnnotationsModelMetadataProvider()), new DataAnnotationsModelMetadataProvider()),
new StringWriter()); TextWriter.Null);
}
private static void SetViewContextAndGenerator(ITagHelper tagHelper,
ViewContext viewContext,
IHtmlGenerator generator)
{
var tagHelperType = tagHelper.GetType();
tagHelperType.GetProperty("ViewContext", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(tagHelper, viewContext);
tagHelperType.GetProperty("Generator", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(tagHelper, generator);
} }
} }
} }

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Xunit; using Xunit;
@ -160,8 +159,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var htmlGenerator = new TestableHtmlGenerator(metadataProvider); var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
Model model = null; Model model = null;
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
var activator = new DefaultTagHelperActivator(); tagHelper.ViewContext = viewContext;
activator.Activate(tagHelper, viewContext); tagHelper.Generator = htmlGenerator;
// Act // Act
await tagHelper.ProcessAsync(tagHelperContext, output); await tagHelper.ProcessAsync(tagHelperContext, output);

View File

@ -4,9 +4,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.PipelineCore;
using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Security.DataProtection; using Microsoft.AspNet.Security.DataProtection;
using Microsoft.Framework.OptionsModel; using Microsoft.Framework.OptionsModel;
@ -50,22 +50,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
IHtmlGenerator htmlGenerator, IHtmlGenerator htmlGenerator,
IModelMetadataProvider metadataProvider) IModelMetadataProvider metadataProvider)
{ {
var serviceProvider = new Mock<IServiceProvider>(); var actionContext = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
serviceProvider
.Setup(provider => provider.GetService(typeof(IHtmlGenerator)))
.Returns(htmlGenerator);
var httpContext = new Mock<HttpContext>();
httpContext
.Setup(context => context.RequestServices)
.Returns(serviceProvider.Object);
var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor());
var viewData = new ViewDataDictionary(metadataProvider) var viewData = new ViewDataDictionary(metadataProvider)
{ {
Model = model, Model = model,
}; };
var viewContext = new ViewContext(actionContext, Mock.Of<IView>(), viewData, new StringWriter()); var viewContext = new ViewContext(actionContext, Mock.Of<IView>(), viewData, TextWriter.Null);
return viewContext; return viewContext;
} }

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Xunit; using Xunit;
@ -57,8 +56,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ modelWithText, typeof(NestedModel), () => modelWithText.NestedModel.Text, "NestedModel.Text", { modelWithText, typeof(NestedModel), () => modelWithText.NestedModel.Text, "NestedModel.Text",
Environment.NewLine + "inner text" }, Environment.NewLine + "inner text" },
// Top-level indexing does not work end-to-end due to code generation issue #1345. // Top-level indexing does not work end-to-end due to code generation issue #1345.
// TODO: Remove above comment when #1345 is fixed. // TODO: Remove above comment when #1345 is fixed.
{ models, typeof(Model), () => models[0].Text, "[0].Text", { models, typeof(Model), () => models[0].Text, "[0].Text",
Environment.NewLine }, Environment.NewLine },
{ models, typeof(Model), () => models[1].Text, "[1].Text", { models, typeof(Model), () => models[1].Text, "[1].Text",
@ -119,8 +118,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
} }
}; };
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
var activator = new DefaultTagHelperActivator(); tagHelper.ViewContext = viewContext;
activator.Activate(tagHelper, viewContext); tagHelper.Generator = htmlGenerator;
// Act // Act
await tagHelper.ProcessAsync(tagHelperContext, output); await tagHelper.ProcessAsync(tagHelperContext, output);
@ -166,8 +165,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
}; };
Model model = null; Model model = null;
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider); var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
var activator = new DefaultTagHelperActivator(); tagHelper.ViewContext = viewContext;
activator.Activate(tagHelper, viewContext); tagHelper.Generator = htmlGenerator;
// Act // Act
await tagHelper.ProcessAsync(tagHelperContext, output); await tagHelper.ProcessAsync(tagHelperContext, output);

View File

@ -3,12 +3,10 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.PipelineCore;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing;
using Moq; using Moq;
@ -46,9 +44,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var viewContext = TestableHtmlGenerator.GetViewContext(model: null, var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
htmlGenerator: htmlGenerator, htmlGenerator: htmlGenerator,
metadataProvider: metadataProvider); metadataProvider: metadataProvider);
validationMessageTagHelper.ViewContext = viewContext;
var activator = new DefaultTagHelperActivator(); validationMessageTagHelper.Generator = htmlGenerator;
activator.Activate(validationMessageTagHelper, viewContext);
// Act // Act
await validationMessageTagHelper.ProcessAsync(tagHelperContext, output); await validationMessageTagHelper.ProcessAsync(tagHelperContext, output);
@ -82,12 +79,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedViewContext = CreateViewContext(); var expectedViewContext = CreateViewContext();
var generator = new Mock<IHtmlGenerator>(); var generator = new Mock<IHtmlGenerator>();
generator generator
.Setup(mock => .Setup(mock =>
mock.GenerateValidationMessage(expectedViewContext, "Hello", null, null, null)) mock.GenerateValidationMessage(expectedViewContext, "Hello", null, null, null))
.Returns(new TagBuilder("span")) .Returns(new TagBuilder("span"))
.Verifiable(); .Verifiable();
validationMessageTagHelper.Generator = generator.Object;
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object); validationMessageTagHelper.ViewContext = expectedViewContext;
// Act & Assert // Act & Assert
await validationMessageTagHelper.ProcessAsync(context: null, output: output); await validationMessageTagHelper.ProcessAsync(context: null, output: output);
@ -120,7 +117,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
tagBuilder.Attributes.Add("data-foo", "bar"); tagBuilder.Attributes.Add("data-foo", "bar");
tagBuilder.Attributes.Add("data-hello", "world"); tagBuilder.Attributes.Add("data-hello", "world");
var expectedViewContext = CreateViewContext();
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var setup = generator var setup = generator
.Setup(mock => mock.GenerateValidationMessage( .Setup(mock => mock.GenerateValidationMessage(
@ -130,8 +126,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())) It.IsAny<object>()))
.Returns(tagBuilder); .Returns(tagBuilder);
var viewContext = CreateViewContext();
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object); validationMessageTagHelper.ViewContext = viewContext;
validationMessageTagHelper.Generator = generator.Object;
// Act // Act
await validationMessageTagHelper.ProcessAsync(context: null, output: output); await validationMessageTagHelper.ProcessAsync(context: null, output: output);
@ -155,10 +152,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
"span", "span",
attributes: new Dictionary<string, string>(), attributes: new Dictionary<string, string>(),
content: "Content of validation message"); content: "Content of validation message");
var expectedViewContext = CreateViewContext(); var viewContext = CreateViewContext();
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict); var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
validationMessageTagHelper.ViewContext = viewContext;
SetViewContextAndGenerator(validationMessageTagHelper, expectedViewContext, generator.Object); validationMessageTagHelper.Generator = generator.Object;
// Act // Act
await validationMessageTagHelper.ProcessAsync(context: null, output: output); await validationMessageTagHelper.ProcessAsync(context: null, output: output);
@ -184,7 +181,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
private static ViewContext CreateViewContext() private static ViewContext CreateViewContext()
{ {
var actionContext = new ActionContext( var actionContext = new ActionContext(
new Mock<HttpContext>().Object, new DefaultHttpContext(),
new RouteData(), new RouteData(),
new ActionDescriptor()); new ActionDescriptor());
@ -193,19 +190,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
Mock.Of<IView>(), Mock.Of<IView>(),
new ViewDataDictionary( new ViewDataDictionary(
new DataAnnotationsModelMetadataProvider()), new DataAnnotationsModelMetadataProvider()),
new StringWriter()); TextWriter.Null);
}
private static void SetViewContextAndGenerator(ITagHelper tagHelper,
ViewContext viewContext,
IHtmlGenerator generator)
{
var tagHelperType = tagHelper.GetType();
tagHelperType.GetProperty("ViewContext", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(tagHelper, viewContext);
tagHelperType.GetProperty("Generator", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(tagHelper, generator);
} }
} }
} }

View File

@ -4,11 +4,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.PipelineCore; using Microsoft.AspNet.PipelineCore;
using Microsoft.AspNet.Razor.Runtime.TagHelpers; using Microsoft.AspNet.Razor.Runtime.TagHelpers;
@ -259,8 +256,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
"are 'All', 'ModelOnly' and 'None'."; "are 'All', 'ModelOnly' and 'None'.";
// Act // Act
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => var ex = await Assert.ThrowsAsync<InvalidOperationException>(
validationSummaryTagHelper.ProcessAsync(context: null, output: output)); () => validationSummaryTagHelper.ProcessAsync(context: null, output: output));
// Assert // Assert
Assert.Equal(expectedMessage, ex.Message); Assert.Equal(expectedMessage, ex.Message);