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:
parent
f8b0249918
commit
f8f08f0903
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue