Part of #2151 - Remove [Activate] from TagHelpers
This change removes [Activate] support from TagHelpers. TagHelpers which need access to context should use [ViewContext] to have it injected. To access services, use constructor injection.
This commit is contained in:
parent
b393191cff
commit
af5322e2ce
|
|
@ -0,0 +1,17 @@
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies that a tag helper property should be set with the current
|
||||||
|
/// <see cref="ViewContext"/> when creating the tag helper. The property must have a public
|
||||||
|
/// set method.
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
|
||||||
|
public class ViewContextAttribute : Attribute
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,15 +26,18 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
_injectActions = new ConcurrentDictionary<Type, PropertyActivator<ViewContext>[]>();
|
_injectActions = new ConcurrentDictionary<Type, PropertyActivator<ViewContext>[]>();
|
||||||
_getPropertiesToActivate = type =>
|
_getPropertiesToActivate = type =>
|
||||||
PropertyActivator<ViewContext>.GetPropertiesToActivate(
|
PropertyActivator<ViewContext>.GetPropertiesToActivate(
|
||||||
type, typeof(ActivateAttribute), CreateActivateInfo);
|
type,
|
||||||
|
typeof(ViewContextAttribute),
|
||||||
|
CreateActivateInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public void Activate<TTagHelper>([NotNull] TTagHelper tagHelper, [NotNull] ViewContext context)
|
public void Activate<TTagHelper>([NotNull] TTagHelper tagHelper, [NotNull] ViewContext context)
|
||||||
where TTagHelper : ITagHelper
|
where TTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
var propertiesToActivate = _injectActions.GetOrAdd(tagHelper.GetType(),
|
var propertiesToActivate = _injectActions.GetOrAdd(
|
||||||
_getPropertiesToActivate);
|
tagHelper.GetType(),
|
||||||
|
_getPropertiesToActivate);
|
||||||
|
|
||||||
for (var i = 0; i < propertiesToActivate.Length; i++)
|
for (var i = 0; i < propertiesToActivate.Length; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -60,32 +63,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
private static PropertyActivator<ViewContext> CreateActivateInfo(PropertyInfo property)
|
private static PropertyActivator<ViewContext> CreateActivateInfo(PropertyInfo property)
|
||||||
{
|
{
|
||||||
Func<ViewContext, object> valueAccessor;
|
return new PropertyActivator<ViewContext>(property, viewContext => viewContext);
|
||||||
var propertyType = property.PropertyType;
|
|
||||||
|
|
||||||
if (propertyType == typeof(ViewContext))
|
|
||||||
{
|
|
||||||
valueAccessor = viewContext => viewContext;
|
|
||||||
}
|
|
||||||
else if (propertyType == typeof(ViewDataDictionary))
|
|
||||||
{
|
|
||||||
valueAccessor = viewContext => viewContext.ViewData;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
valueAccessor = (viewContext) =>
|
|
||||||
{
|
|
||||||
var serviceProvider = viewContext.HttpContext.RequestServices;
|
|
||||||
var service = serviceProvider.GetRequiredService(propertyType);
|
|
||||||
|
|
||||||
var contextable = service as ICanHasViewContext;
|
|
||||||
contextable?.Contextualize(viewContext);
|
|
||||||
|
|
||||||
return service;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PropertyActivator<ViewContext>(property, valueAccessor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -29,6 +29,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
private TextWriter _originalWriter;
|
private TextWriter _originalWriter;
|
||||||
private IUrlHelper _urlHelper;
|
private IUrlHelper _urlHelper;
|
||||||
private ITagHelperActivator _tagHelperActivator;
|
private ITagHelperActivator _tagHelperActivator;
|
||||||
|
private ITypeActivatorCache _typeActivatorCache;
|
||||||
private bool _renderedBody;
|
private bool _renderedBody;
|
||||||
|
|
||||||
public RazorPage()
|
public RazorPage()
|
||||||
|
|
@ -143,14 +144,28 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
{
|
{
|
||||||
if (_tagHelperActivator == null)
|
if (_tagHelperActivator == null)
|
||||||
{
|
{
|
||||||
_tagHelperActivator =
|
var services = ViewContext.HttpContext.RequestServices;
|
||||||
ViewContext.HttpContext.RequestServices.GetRequiredService<ITagHelperActivator>();
|
_tagHelperActivator = services.GetRequiredService<ITagHelperActivator>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _tagHelperActivator;
|
return _tagHelperActivator;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ITypeActivatorCache TypeActivatorCache
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_typeActivatorCache == null)
|
||||||
|
{
|
||||||
|
var services = ViewContext.HttpContext.RequestServices;
|
||||||
|
_typeActivatorCache = services.GetRequiredService<ITypeActivatorCache>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _typeActivatorCache;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Format an error message about using an indexer when the tag helper property is <c>null</c>.
|
/// Format an error message about using an indexer when the tag helper property is <c>null</c>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -177,9 +192,11 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// <typeparamref name="TTagHelper"/> must have a parameterless constructor.
|
/// <typeparamref name="TTagHelper"/> must have a parameterless constructor.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public TTagHelper CreateTagHelper<TTagHelper>() where TTagHelper : ITagHelper, new()
|
public TTagHelper CreateTagHelper<TTagHelper>() where TTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
var tagHelper = new TTagHelper();
|
var tagHelper = TypeActivatorCache.CreateInstance<TTagHelper>(
|
||||||
|
ViewContext.HttpContext.RequestServices,
|
||||||
|
typeof(TTagHelper));
|
||||||
|
|
||||||
TagHelperActivator.Activate(tagHelper, ViewContext);
|
TagHelperActivator.Activate(tagHelper, ViewContext);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
private const string RouteValuesPrefix = "asp-route-";
|
private const string RouteValuesPrefix = "asp-route-";
|
||||||
private const string Href = "href";
|
private const string Href = "href";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
[HtmlAttributeNotBound]
|
/// Creates a new <see cref="AnchorTagHelper"/>.
|
||||||
public IHtmlGenerator Generator { get; set; }
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public AnchorTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the action method.
|
/// The name of the action method.
|
||||||
|
|
|
||||||
|
|
@ -37,17 +37,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
private static readonly char[] AttributeSeparator = new[] { ',' };
|
private static readonly char[] AttributeSeparator = new[] { ',' };
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the <see cref="IMemoryCache"/> instance used to cache entries.
|
/// Creates a new <see cref="CacheTagHelper"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Activate]
|
/// <param name="memoryCache">The <see cref="IMemoryCache"/>.</param>
|
||||||
[HtmlAttributeNotBound]
|
public CacheTagHelper(IMemoryCache memoryCache)
|
||||||
public IMemoryCache MemoryCache { get; set; }
|
{
|
||||||
|
MemoryCache = memoryCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the <see cref="IMemoryCache"/> instance used to cache entries.
|
||||||
|
/// </summary>
|
||||||
|
protected IMemoryCache MemoryCache { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the <see cref="ViewContext"/> for the current executing View.
|
/// Gets or sets the <see cref="ViewContext"/> for the current executing View.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
private static readonly char[] NameSeparator = new[] { ',' };
|
private static readonly char[] NameSeparator = new[] { ',' };
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="EnvironmentTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
|
||||||
|
public EnvironmentTagHelper(IHostingEnvironment hostingEnvironment)
|
||||||
|
{
|
||||||
|
HostingEnvironment = hostingEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A comma separated list of environment names in which the content should be rendered.
|
/// A comma separated list of environment names in which the content should be rendered.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -25,9 +34,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public string Names { get; set; }
|
public string Names { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IHostingEnvironment HostingEnvironment { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHostingEnvironment HostingEnvironment { get; set; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
private const string RouteValuesPrefix = "asp-route-";
|
private const string RouteValuesPrefix = "asp-route-";
|
||||||
private const string HtmlActionAttributeName = "action";
|
private const string HtmlActionAttributeName = "action";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="FormTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public FormTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IHtmlGenerator Generator { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHtmlGenerator Generator { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the action method.
|
/// The name of the action method.
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
private FileVersionProvider _fileVersionProvider;
|
private FileVersionProvider _fileVersionProvider;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ImageTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
|
||||||
|
/// <param name="cache">The <see cref="IMemoryCache"/>.</param>
|
||||||
|
public ImageTagHelper(IHostingEnvironment hostingEnvironment, IMemoryCache cache)
|
||||||
|
{
|
||||||
|
HostingEnvironment = hostingEnvironment;
|
||||||
|
Cache = cache;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Source of the image.
|
/// Source of the image.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -43,17 +54,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
[HtmlAttributeName(FileVersionAttributeName)]
|
[HtmlAttributeName(FileVersionAttributeName)]
|
||||||
public bool FileVersion { get; set; }
|
public bool FileVersion { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IHostingEnvironment HostingEnvironment { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHostingEnvironment HostingEnvironment { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
[ViewContext]
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IMemoryCache Cache { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IMemoryCache Cache { get; set; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||||
|
|
|
||||||
|
|
@ -62,12 +62,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{ "time", "{0:HH:mm:ss.fff}" },
|
{ "time", "{0:HH:mm:ss.fff}" },
|
||||||
};
|
};
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
[HtmlAttributeNotBound]
|
/// Creates a new <see cref="InputTagHelper"/>.
|
||||||
public IHtmlGenerator Generator { get; set; }
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public InputTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
private const string ForAttributeName = "asp-for";
|
private const string ForAttributeName = "asp-for";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="LabelTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public LabelTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IHtmlGenerator Generator { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHtmlGenerator Generator { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An expression to be evaluated against the current model.
|
/// An expression to be evaluated against the current model.
|
||||||
|
|
|
||||||
|
|
@ -83,21 +83,26 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
private enum Mode
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="LinkTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="logger">The <see cref="ILogger{ScriptTagHelper}"/>.</param>
|
||||||
|
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
|
||||||
|
/// <param name="cache">The <see cref="IMemoryCache"/>.</param>
|
||||||
|
/// <param name="htmlEncoder">The <see cref="IHtmlEncoder"/>.</param>
|
||||||
|
/// <param name="javaScriptEncoder">The <see cref="IJavaScriptStringEncoder"/>.</param>
|
||||||
|
public LinkTagHelper(
|
||||||
|
ILogger<LinkTagHelper> logger,
|
||||||
|
IHostingEnvironment hostingEnvironment,
|
||||||
|
IMemoryCache cache,
|
||||||
|
IHtmlEncoder htmlEncoder,
|
||||||
|
IJavaScriptStringEncoder javaScriptEncoder)
|
||||||
{
|
{
|
||||||
/// <summary>
|
Logger = logger;
|
||||||
/// Just adding a file version for the generated urls.
|
HostingEnvironment = hostingEnvironment;
|
||||||
/// </summary>
|
Cache = cache;
|
||||||
FileVersion = 0,
|
HtmlEncoder = htmlEncoder;
|
||||||
/// <summary>
|
JavaScriptEncoder = javaScriptEncoder;
|
||||||
/// Just performing file globbing search for the href, rendering a separate <link> for each match.
|
|
||||||
/// </summary>
|
|
||||||
GlobbedHref = 1,
|
|
||||||
/// <summary>
|
|
||||||
/// Rendering a fallback block if primary stylesheet fails to load. Will also do globbing for both the
|
|
||||||
/// primary and fallback hrefs if the appropriate properties are set.
|
|
||||||
/// </summary>
|
|
||||||
Fallback = 2,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -180,29 +185,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
[HtmlAttributeName(FallbackTestValueAttributeName)]
|
[HtmlAttributeName(FallbackTestValueAttributeName)]
|
||||||
public string FallbackTestValue { get; set; }
|
public string FallbackTestValue { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected ILogger<LinkTagHelper> Logger { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
protected internal ILogger<LinkTagHelper> Logger { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IHostingEnvironment HostingEnvironment { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHostingEnvironment HostingEnvironment { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IMemoryCache Cache { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IMemoryCache Cache { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IHtmlEncoder HtmlEncoder { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHtmlEncoder HtmlEncoder { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IJavaScriptStringEncoder JavaScriptEncoder { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IJavaScriptStringEncoder JavaScriptEncoder { get; set; }
|
|
||||||
|
|
||||||
// Internal for ease of use when testing.
|
// Internal for ease of use when testing.
|
||||||
protected internal GlobbingUrlBuilder GlobbingUrlBuilder { get; set; }
|
protected internal GlobbingUrlBuilder GlobbingUrlBuilder { get; set; }
|
||||||
|
|
@ -365,5 +360,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
builder.Append("/>");
|
builder.Append("/>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private enum Mode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Just adding a file version for the generated urls.
|
||||||
|
/// </summary>
|
||||||
|
FileVersion = 0,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Just performing file globbing search for the href, rendering a separate <link> for each match.
|
||||||
|
/// </summary>
|
||||||
|
GlobbedHref = 1,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Rendering a fallback block if primary stylesheet fails to load. Will also do globbing for both the
|
||||||
|
/// primary and fallback hrefs if the appropriate properties are set.
|
||||||
|
/// </summary>
|
||||||
|
Fallback = 2,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -19,12 +19,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public class OptionTagHelper : TagHelper
|
public class OptionTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
/// <summary>
|
||||||
[HtmlAttributeNotBound]
|
/// Creates a new <see cref="OptionTagHelper"/>.
|
||||||
public IHtmlGenerator Generator { get; set; }
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public OptionTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -70,21 +70,26 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
private enum Mode
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ScriptTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="logger">The <see cref="ILogger{ScriptTagHelper}"/>.</param>
|
||||||
|
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
|
||||||
|
/// <param name="cache">The <see cref="IMemoryCache"/>.</param>
|
||||||
|
/// <param name="htmlEncoder">The <see cref="IHtmlEncoder"/>.</param>
|
||||||
|
/// <param name="javaScriptEncoder">The <see cref="IJavaScriptStringEncoder"/>.</param>
|
||||||
|
public ScriptTagHelper(
|
||||||
|
ILogger<ScriptTagHelper> logger,
|
||||||
|
IHostingEnvironment hostingEnvironment,
|
||||||
|
IMemoryCache cache,
|
||||||
|
IHtmlEncoder htmlEncoder,
|
||||||
|
IJavaScriptStringEncoder javaScriptEncoder)
|
||||||
{
|
{
|
||||||
/// <summary>
|
Logger = logger;
|
||||||
/// Just adding a file version for the generated urls.
|
HostingEnvironment = hostingEnvironment;
|
||||||
/// </summary>
|
Cache = cache;
|
||||||
FileVersion = 0,
|
HtmlEncoder = htmlEncoder;
|
||||||
/// <summary>
|
JavaScriptEncoder = javaScriptEncoder;
|
||||||
/// Just performing file globbing search for the src, rendering a separate <script> for each match.
|
|
||||||
/// </summary>
|
|
||||||
GlobbedSrc = 1,
|
|
||||||
/// <summary>
|
|
||||||
/// Rendering a fallback block if primary javascript fails to load. Will also do globbing for both the
|
|
||||||
/// primary and fallback srcs if the appropriate properties are set.
|
|
||||||
/// </summary>
|
|
||||||
Fallback = 2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -149,29 +154,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
[HtmlAttributeName(FallbackTestExpressionAttributeName)]
|
[HtmlAttributeName(FallbackTestExpressionAttributeName)]
|
||||||
public string FallbackTestExpression { get; set; }
|
public string FallbackTestExpression { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected ILogger<ScriptTagHelper> Logger { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
protected internal ILogger<ScriptTagHelper> Logger { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IHostingEnvironment HostingEnvironment { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHostingEnvironment HostingEnvironment { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IMemoryCache Cache { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IMemoryCache Cache { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IHtmlEncoder HtmlEncoder { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHtmlEncoder HtmlEncoder { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
protected IJavaScriptStringEncoder JavaScriptEncoder { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IJavaScriptStringEncoder JavaScriptEncoder { get; set; }
|
|
||||||
|
|
||||||
// Internal for ease of use when testing.
|
// Internal for ease of use when testing.
|
||||||
protected internal GlobbingUrlBuilder GlobbingUrlBuilder { get; set; }
|
protected internal GlobbingUrlBuilder GlobbingUrlBuilder { get; set; }
|
||||||
|
|
@ -388,5 +383,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
.Append("\"");
|
.Append("\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private enum Mode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Just adding a file version for the generated urls.
|
||||||
|
/// </summary>
|
||||||
|
FileVersion = 0,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Just performing file globbing search for the src, rendering a separate <script> for each match.
|
||||||
|
/// </summary>
|
||||||
|
GlobbedSrc = 1,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Rendering a fallback block if primary javascript fails to load. Will also do globbing for both the
|
||||||
|
/// primary and fallback srcs if the appropriate properties are set.
|
||||||
|
/// </summary>
|
||||||
|
Fallback = 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public static readonly string SelectedValuesFormDataKey = nameof(SelectTagHelper) + "-SelectedValues";
|
public static readonly string SelectedValuesFormDataKey = nameof(SelectTagHelper) + "-SelectedValues";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
[HtmlAttributeNotBound]
|
/// Creates a new <see cref="SelectTagHelper"/>.
|
||||||
public IHtmlGenerator Generator { get; set; }
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public SelectTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
private const string ForAttributeName = "asp-for";
|
private const string ForAttributeName = "asp-for";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
[HtmlAttributeNotBound]
|
/// Creates a new <see cref="TextAreaTagHelper"/>.
|
||||||
public IHtmlGenerator Generator { get; set; }
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public TextAreaTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -16,13 +16,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
private const string ValidationForAttributeName = "asp-validation-for";
|
private const string ValidationForAttributeName = "asp-validation-for";
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ValidationMessageTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public ValidationMessageTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
protected IHtmlGenerator Generator { get; }
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public IHtmlGenerator Generator { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Name to be validated on the current model.
|
/// Name to be validated on the current model.
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,21 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
private const string ValidationSummaryAttributeName = "asp-validation-summary";
|
private const string ValidationSummaryAttributeName = "asp-validation-summary";
|
||||||
private ValidationSummary _validationSummary;
|
private ValidationSummary _validationSummary;
|
||||||
|
|
||||||
[Activate]
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ValidationSummaryTagHelper"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generator">The <see cref="IHtmlGenerator"/>.</param>
|
||||||
|
public ValidationSummaryTagHelper(IHtmlGenerator generator)
|
||||||
|
{
|
||||||
|
Generator = generator;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
public IHtmlGenerator Generator { get; set; }
|
protected IHtmlGenerator Generator { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If <see cref="ValidationSummary.All"/> or <see cref="ValidationSummary.ModelOnly"/>, appends a validation
|
/// If <see cref="ValidationSummary.All"/> or <see cref="ValidationSummary.ModelOnly"/>, appends a validation
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task TagHelperActivation_ActivateHtmlHelper_RendersProperly()
|
public async Task TagHelperActivation_ConstructorInjection_RendersProperly()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var server = TestHelper.CreateServer(_app, SiteName, _configureServices);
|
var server = TestHelper.CreateServer(_app, SiteName, _configureServices);
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
public object ViewDataValue { get; set; } = new object();
|
public object ViewDataValue { get; set; } = new object();
|
||||||
|
|
||||||
[Activate]
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -170,7 +170,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
public object ViewDataValue { get; set; } = new object();
|
public object ViewDataValue { get; set; } = new object();
|
||||||
|
|
||||||
[Activate]
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,56 +57,18 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
Assert.NotNull(tagHelper.ViewContext);
|
Assert.NotNull(tagHelper.ViewContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void CreateTagHelper_ProvidesTagHelperWithViewData()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var instance = CreateTestRazorPage();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var tagHelper = instance.CreateTagHelper<ViewDataTagHelper>();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.NotNull(tagHelper.ViewData);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void CreateTagHelper_ProvidesTagHelperWithInternalProperties()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var instance = CreateTestRazorPage();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var tagHelper = instance.CreateTagHelper<TagHelperWithInternalProperty>();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.NotNull(tagHelper.ViewData);
|
|
||||||
Assert.NotNull(tagHelper.ViewContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public void CreateTagHelper_ProvidesTagHelperTypeWithViewContextAndActivates()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var instance = CreateTestRazorPage();
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var tagHelper = instance.CreateTagHelper<ViewContextServiceTagHelper>();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.NotNull(tagHelper.ViewContext);
|
|
||||||
Assert.NotNull(tagHelper.ActivatedService);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TestRazorPage CreateTestRazorPage()
|
private static TestRazorPage CreateTestRazorPage()
|
||||||
{
|
{
|
||||||
var activator = new RazorPageActivator(new EmptyModelMetadataProvider());
|
var activator = new RazorPageActivator(new EmptyModelMetadataProvider());
|
||||||
var serviceProvider = new Mock<IServiceProvider>();
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
|
var typeActivator = new DefaultTypeActivatorCache();
|
||||||
var myService = new MyService();
|
var myService = new MyService();
|
||||||
serviceProvider.Setup(mock => mock.GetService(typeof(MyService)))
|
serviceProvider.Setup(mock => mock.GetService(typeof(MyService)))
|
||||||
.Returns(myService);
|
.Returns(myService);
|
||||||
serviceProvider.Setup(mock => mock.GetService(typeof(ITagHelperActivator)))
|
serviceProvider.Setup(mock => mock.GetService(typeof(ITagHelperActivator)))
|
||||||
.Returns(new DefaultTagHelperActivator());
|
.Returns(new DefaultTagHelperActivator());
|
||||||
|
serviceProvider.Setup(mock => mock.GetService(typeof(ITypeActivatorCache)))
|
||||||
|
.Returns(typeActivator);
|
||||||
serviceProvider.Setup(mock => mock.GetService(It.Is<Type>(serviceType =>
|
serviceProvider.Setup(mock => mock.GetService(It.Is<Type>(serviceType =>
|
||||||
serviceType.IsGenericType && serviceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))))
|
serviceType.IsGenericType && serviceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))))
|
||||||
.Returns<Type>(serviceType =>
|
.Returns<Type>(serviceType =>
|
||||||
|
|
@ -147,39 +109,21 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
|
|
||||||
private class ServiceTagHelper : TagHelper
|
private class ServiceTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
public ServiceTagHelper(MyService service)
|
||||||
|
{
|
||||||
|
ActivatedService = service;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
public MyService ActivatedService { get; set; }
|
public MyService ActivatedService { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ViewContextTagHelper : TagHelper
|
private class ViewContextTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ViewDataTagHelper : TagHelper
|
|
||||||
{
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
|
||||||
public ViewDataDictionary ViewData { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ViewContextServiceTagHelper : ViewContextTagHelper
|
|
||||||
{
|
|
||||||
[Activate]
|
|
||||||
public MyService ActivatedService { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private class TagHelperWithInternalProperty : TagHelper
|
|
||||||
{
|
|
||||||
[Activate]
|
|
||||||
protected internal ViewDataDictionary ViewData { get; set; }
|
|
||||||
|
|
||||||
[Activate]
|
|
||||||
protected internal ViewContext ViewContext { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MyService
|
private class MyService
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,12 +58,11 @@ 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);
|
||||||
var anchorTagHelper = new AnchorTagHelper
|
var anchorTagHelper = new AnchorTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Action = "index",
|
Action = "index",
|
||||||
Controller = "home",
|
Controller = "home",
|
||||||
Fragment = "hello=world",
|
Fragment = "hello=world",
|
||||||
Generator = htmlGenerator,
|
|
||||||
Host = "contoso.com",
|
Host = "contoso.com",
|
||||||
Protocol = "http",
|
Protocol = "http",
|
||||||
RouteValues =
|
RouteValues =
|
||||||
|
|
@ -117,10 +116,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
null))
|
null))
|
||||||
.Returns(new TagBuilder("a", new CommonTestEncoder()))
|
.Returns(new TagBuilder("a", new CommonTestEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
var anchorTagHelper = new AnchorTagHelper
|
var anchorTagHelper = new AnchorTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
Fragment = "hello=world",
|
Fragment = "hello=world",
|
||||||
Generator = generator.Object,
|
|
||||||
Host = "contoso.com",
|
Host = "contoso.com",
|
||||||
Protocol = "http",
|
Protocol = "http",
|
||||||
Route = "Default",
|
Route = "Default",
|
||||||
|
|
@ -167,12 +165,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
null))
|
null))
|
||||||
.Returns(new TagBuilder("a", new CommonTestEncoder()))
|
.Returns(new TagBuilder("a", new CommonTestEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
var anchorTagHelper = new AnchorTagHelper
|
var anchorTagHelper = new AnchorTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
Action = "Index",
|
Action = "Index",
|
||||||
Controller = "Home",
|
Controller = "Home",
|
||||||
Fragment = "hello=world",
|
Fragment = "hello=world",
|
||||||
Generator = generator.Object,
|
|
||||||
Host = "contoso.com",
|
Host = "contoso.com",
|
||||||
Protocol = "http",
|
Protocol = "http",
|
||||||
};
|
};
|
||||||
|
|
@ -196,7 +193,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_ThrowsIfHrefConflictsWithBoundAttributes(string propertyName)
|
public async Task ProcessAsync_ThrowsIfHrefConflictsWithBoundAttributes(string propertyName)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var anchorTagHelper = new AnchorTagHelper();
|
var metadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
|
var anchorTagHelper = new AnchorTagHelper(htmlGenerator);
|
||||||
|
|
||||||
var output = new TagHelperOutput(
|
var output = new TagHelperOutput(
|
||||||
"a",
|
"a",
|
||||||
attributes: new TagHelperAttributeList
|
attributes: new TagHelperAttributeList
|
||||||
|
|
@ -230,10 +231,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_ThrowsIfRouteAndActionOrControllerProvided(string propertyName)
|
public async Task ProcessAsync_ThrowsIfRouteAndActionOrControllerProvided(string propertyName)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var anchorTagHelper = new AnchorTagHelper
|
var metadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
|
var anchorTagHelper = new AnchorTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Route = "Default",
|
Route = "Default",
|
||||||
};
|
};
|
||||||
|
|
||||||
typeof(AnchorTagHelper).GetProperty(propertyName).SetValue(anchorTagHelper, "Home");
|
typeof(AnchorTagHelper).GetProperty(propertyName).SetValue(anchorTagHelper, "Home");
|
||||||
var output = new TagHelperOutput(
|
var output = new TagHelperOutput(
|
||||||
"a",
|
"a",
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var id = Guid.NewGuid().ToString();
|
var id = Guid.NewGuid().ToString();
|
||||||
var tagHelperContext = GetTagHelperContext(id);
|
var tagHelperContext = GetTagHelperContext(id);
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext()
|
ViewContext = GetViewContext()
|
||||||
};
|
};
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryBy = varyBy
|
VaryBy = varyBy
|
||||||
|
|
@ -80,7 +80,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByCookie = varyByCookie
|
VaryByCookie = varyByCookie
|
||||||
|
|
@ -105,7 +105,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByHeader = varyByHeader
|
VaryByHeader = varyByHeader
|
||||||
|
|
@ -132,7 +132,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByQuery = varyByQuery
|
VaryByQuery = varyByQuery
|
||||||
|
|
@ -157,7 +157,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByRoute = varyByRoute
|
VaryByRoute = varyByRoute
|
||||||
|
|
@ -178,7 +178,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expected = "CacheTagHelper||testid||VaryByUser||";
|
var expected = "CacheTagHelper||testid||VaryByUser||";
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByUser = true
|
VaryByUser = true
|
||||||
|
|
@ -197,7 +197,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expected = "CacheTagHelper||testid||VaryByUser||test_name";
|
var expected = "CacheTagHelper||testid||VaryByUser||test_name";
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByUser = true
|
VaryByUser = true
|
||||||
|
|
@ -219,7 +219,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var expected = GetHashedBytes("CacheTagHelper||testid||VaryBy||custom-value||" +
|
var expected = GetHashedBytes("CacheTagHelper||testid||VaryBy||custom-value||" +
|
||||||
"VaryByHeader(content-type||text/html)||VaryByUser||someuser");
|
"VaryByHeader(content-type||text/html)||VaryByUser||someuser");
|
||||||
var tagHelperContext = GetTagHelperContext();
|
var tagHelperContext = GetTagHelperContext();
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(Mock.Of<IMemoryCache>())
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
VaryByUser = true,
|
VaryByUser = true,
|
||||||
|
|
@ -257,10 +257,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
.Returns(false);
|
.Returns(false);
|
||||||
var tagHelperContext = GetTagHelperContext(id, childContent);
|
var tagHelperContext = GetTagHelperContext(id, childContent);
|
||||||
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList());
|
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache.Object)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache.Object,
|
|
||||||
Enabled = false
|
Enabled = false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -297,10 +296,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
.Returns(false);
|
.Returns(false);
|
||||||
var tagHelperContext = GetTagHelperContext(id, childContent);
|
var tagHelperContext = GetTagHelperContext(id, childContent);
|
||||||
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList());
|
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache.Object)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache.Object,
|
|
||||||
Enabled = true
|
Enabled = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -328,11 +326,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var tagHelperContext1 = GetTagHelperContext(id, childContent);
|
var tagHelperContext1 = GetTagHelperContext(id, childContent);
|
||||||
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList());
|
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList());
|
||||||
var cacheTagHelper1 = new CacheTagHelper
|
var cacheTagHelper1 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
VaryByQuery = "key1,key2",
|
VaryByQuery = "key1,key2",
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache
|
|
||||||
};
|
};
|
||||||
cacheTagHelper1.ViewContext.HttpContext.Request.QueryString = new Http.QueryString(
|
cacheTagHelper1.ViewContext.HttpContext.Request.QueryString = new Http.QueryString(
|
||||||
"?key1=value1&key2=value2");
|
"?key1=value1&key2=value2");
|
||||||
|
|
@ -349,11 +346,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange - 2
|
// Arrange - 2
|
||||||
var tagHelperContext2 = GetTagHelperContext(id, "different-content");
|
var tagHelperContext2 = GetTagHelperContext(id, "different-content");
|
||||||
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList());
|
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList());
|
||||||
var cacheTagHelper2 = new CacheTagHelper
|
var cacheTagHelper2 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
VaryByQuery = "key1,key2",
|
VaryByQuery = "key1,key2",
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache
|
|
||||||
};
|
};
|
||||||
cacheTagHelper2.ViewContext.HttpContext.Request.QueryString = new Http.QueryString(
|
cacheTagHelper2.ViewContext.HttpContext.Request.QueryString = new Http.QueryString(
|
||||||
"?key1=value1&key2=value2");
|
"?key1=value1&key2=value2");
|
||||||
|
|
@ -379,11 +375,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput1.PreContent.Append("<cache>");
|
tagHelperOutput1.PreContent.Append("<cache>");
|
||||||
tagHelperOutput1.PostContent.SetContent("</cache>");
|
tagHelperOutput1.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper1 = new CacheTagHelper
|
var cacheTagHelper1 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
VaryByCookie = "cookie1,cookie2",
|
VaryByCookie = "cookie1,cookie2",
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache
|
|
||||||
};
|
};
|
||||||
cacheTagHelper1.ViewContext.HttpContext.Request.Headers["Cookie"] = "cookie1=value1;cookie2=value2";
|
cacheTagHelper1.ViewContext.HttpContext.Request.Headers["Cookie"] = "cookie1=value1;cookie2=value2";
|
||||||
|
|
||||||
|
|
@ -402,11 +397,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput2.PreContent.SetContent("<cache>");
|
tagHelperOutput2.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput2.PostContent.SetContent("</cache>");
|
tagHelperOutput2.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper2 = new CacheTagHelper
|
var cacheTagHelper2 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
VaryByCookie = "cookie1,cookie2",
|
VaryByCookie = "cookie1,cookie2",
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache
|
|
||||||
};
|
};
|
||||||
cacheTagHelper2.ViewContext.HttpContext.Request.Headers["Cookie"] = "cookie1=value1;cookie2=not-value2";
|
cacheTagHelper2.ViewContext.HttpContext.Request.Headers["Cookie"] = "cookie1=value1;cookie2=not-value2";
|
||||||
|
|
||||||
|
|
@ -426,9 +420,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expiresOn = DateTimeOffset.UtcNow.AddMinutes(4);
|
var expiresOn = DateTimeOffset.UtcNow.AddMinutes(4);
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresOn = expiresOn
|
ExpiresOn = expiresOn
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -445,9 +438,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expiresOn = DateTimeOffset.UtcNow.AddMinutes(7);
|
var expiresOn = DateTimeOffset.UtcNow.AddMinutes(7);
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var entryLink = new EntryLink();
|
var entryLink = new EntryLink();
|
||||||
|
|
@ -467,9 +459,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var expiresOn1 = DateTimeOffset.UtcNow.AddDays(12);
|
var expiresOn1 = DateTimeOffset.UtcNow.AddDays(12);
|
||||||
var expiresOn2 = DateTimeOffset.UtcNow.AddMinutes(4);
|
var expiresOn2 = DateTimeOffset.UtcNow.AddMinutes(4);
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresOn = expiresOn1
|
ExpiresOn = expiresOn1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -489,9 +480,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expiresAfter = TimeSpan.FromSeconds(42);
|
var expiresAfter = TimeSpan.FromSeconds(42);
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresAfter = expiresAfter
|
ExpiresAfter = expiresAfter
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -508,9 +498,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var expiresSliding = TimeSpan.FromSeconds(37);
|
var expiresSliding = TimeSpan.FromSeconds(37);
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresSliding = expiresSliding
|
ExpiresSliding = expiresSliding
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -527,9 +516,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Arrange
|
// Arrange
|
||||||
var priority = CacheItemPriority.High;
|
var priority = CacheItemPriority.High;
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
Priority = priority
|
Priority = priority
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -547,9 +535,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var expiresSliding = TimeSpan.FromSeconds(30);
|
var expiresSliding = TimeSpan.FromSeconds(30);
|
||||||
var expected = new[] { Mock.Of<IExpirationTrigger>(), Mock.Of<IExpirationTrigger>() };
|
var expected = new[] { Mock.Of<IExpirationTrigger>(), Mock.Of<IExpirationTrigger>() };
|
||||||
var cache = new MemoryCache(new MemoryCacheOptions());
|
var cache = new MemoryCache(new MemoryCacheOptions());
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresSliding = expiresSliding
|
ExpiresSliding = expiresSliding
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -578,10 +565,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput1.PreContent.SetContent("<cache>");
|
tagHelperOutput1.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput1.PostContent.SetContent("</cache>");
|
tagHelperOutput1.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper1 = new CacheTagHelper
|
var cacheTagHelper1 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresAfter = TimeSpan.FromMinutes(10)
|
ExpiresAfter = TimeSpan.FromMinutes(10)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -600,10 +586,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput2.PreContent.SetContent("<cache>");
|
tagHelperOutput2.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput2.PostContent.SetContent("</cache>");
|
tagHelperOutput2.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper2 = new CacheTagHelper
|
var cacheTagHelper2 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresAfter = TimeSpan.FromMinutes(10)
|
ExpiresAfter = TimeSpan.FromMinutes(10)
|
||||||
};
|
};
|
||||||
currentTime = currentTime.AddMinutes(11);
|
currentTime = currentTime.AddMinutes(11);
|
||||||
|
|
@ -633,10 +618,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput1.PreContent.SetContent("<cache>");
|
tagHelperOutput1.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput1.PostContent.SetContent("</cache>");
|
tagHelperOutput1.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper1 = new CacheTagHelper
|
var cacheTagHelper1 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresOn = currentTime.AddMinutes(5)
|
ExpiresOn = currentTime.AddMinutes(5)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -656,10 +640,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput2.PreContent.SetContent("<cache>");
|
tagHelperOutput2.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput2.PostContent.SetContent("</cache>");
|
tagHelperOutput2.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper2 = new CacheTagHelper
|
var cacheTagHelper2 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresOn = currentTime.AddMinutes(5)
|
ExpiresOn = currentTime.AddMinutes(5)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -688,10 +671,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput1 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput1.PreContent.SetContent("<cache>");
|
tagHelperOutput1.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput1.PostContent.SetContent("</cache>");
|
tagHelperOutput1.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper1 = new CacheTagHelper
|
var cacheTagHelper1 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresSliding = TimeSpan.FromSeconds(30)
|
ExpiresSliding = TimeSpan.FromSeconds(30)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -711,10 +693,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput2 = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput2.PreContent.SetContent("<cache>");
|
tagHelperOutput2.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput2.PostContent.SetContent("</cache>");
|
tagHelperOutput2.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper2 = new CacheTagHelper
|
var cacheTagHelper2 = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
ExpiresSliding = TimeSpan.FromSeconds(30)
|
ExpiresSliding = TimeSpan.FromSeconds(30)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -757,10 +738,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
var tagHelperOutput = new TagHelperOutput("cache", new TagHelperAttributeList { { "attr", "value" } });
|
||||||
tagHelperOutput.PreContent.SetContent("<cache>");
|
tagHelperOutput.PreContent.SetContent("<cache>");
|
||||||
tagHelperOutput.PostContent.SetContent("</cache>");
|
tagHelperOutput.PostContent.SetContent("</cache>");
|
||||||
var cacheTagHelper = new CacheTagHelper
|
var cacheTagHelper = new CacheTagHelper(cache)
|
||||||
{
|
{
|
||||||
ViewContext = GetViewContext(),
|
ViewContext = GetViewContext(),
|
||||||
MemoryCache = cache,
|
|
||||||
};
|
};
|
||||||
var key = cacheTagHelper.GenerateKey(tagHelperContext);
|
var key = cacheTagHelper.GenerateKey(tagHelperContext);
|
||||||
|
|
||||||
|
|
@ -819,4 +799,4 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,9 +88,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Test
|
||||||
hostingEnvironment.Object.EnvironmentName = environmentName;
|
hostingEnvironment.Object.EnvironmentName = environmentName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var helper = new EnvironmentTagHelper
|
var helper = new EnvironmentTagHelper(hostingEnvironment.Object)
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment.Object,
|
|
||||||
Names = namesAttribute
|
Names = namesAttribute
|
||||||
};
|
};
|
||||||
helper.Process(context, output);
|
helper.Process(context, output);
|
||||||
|
|
@ -116,9 +115,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers.Test
|
||||||
hostingEnvironment.Object.EnvironmentName = environmentName;
|
hostingEnvironment.Object.EnvironmentName = environmentName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var helper = new EnvironmentTagHelper
|
var helper = new EnvironmentTagHelper(hostingEnvironment.Object)
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment.Object,
|
|
||||||
Names = namesAttribute
|
Names = namesAttribute
|
||||||
};
|
};
|
||||||
helper.Process(context, output);
|
helper.Process(context, output);
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
metadataProvider: metadataProvider);
|
metadataProvider: metadataProvider);
|
||||||
var expectedPostContent = "Something" + htmlGenerator.GenerateAntiForgery(viewContext)
|
var expectedPostContent = "Something" + htmlGenerator.GenerateAntiForgery(viewContext)
|
||||||
.ToString(TagRenderMode.SelfClosing);
|
.ToString(TagRenderMode.SelfClosing);
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Action = "index",
|
Action = "index",
|
||||||
AntiForgery = true,
|
AntiForgery = true,
|
||||||
Controller = "home",
|
Controller = "home",
|
||||||
Generator = htmlGenerator,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
RouteValues =
|
RouteValues =
|
||||||
{
|
{
|
||||||
|
|
@ -127,11 +126,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
generator.Setup(mock => mock.GenerateAntiForgery(viewContext))
|
generator.Setup(mock => mock.GenerateAntiForgery(viewContext))
|
||||||
.Returns(new TagBuilder("input", new CommonTestEncoder()));
|
.Returns(new TagBuilder("input", new CommonTestEncoder()));
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
Action = "Index",
|
Action = "Index",
|
||||||
AntiForgery = antiForgery,
|
AntiForgery = antiForgery,
|
||||||
Generator = generator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -194,11 +192,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
})
|
})
|
||||||
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
Action = "Index",
|
Action = "Index",
|
||||||
AntiForgery = false,
|
AntiForgery = false,
|
||||||
Generator = generator.Object,
|
|
||||||
ViewContext = testViewContext,
|
ViewContext = testViewContext,
|
||||||
RouteValues =
|
RouteValues =
|
||||||
{
|
{
|
||||||
|
|
@ -250,12 +247,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
null))
|
null))
|
||||||
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
Action = "Index",
|
Action = "Index",
|
||||||
AntiForgery = false,
|
AntiForgery = false,
|
||||||
Controller = "Home",
|
Controller = "Home",
|
||||||
Generator = generator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -301,11 +297,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
null))
|
null))
|
||||||
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
.Returns(new TagBuilder("form", new CommonTestEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
AntiForgery = false,
|
AntiForgery = false,
|
||||||
Route = "Default",
|
Route = "Default",
|
||||||
Generator = generator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
RouteValues =
|
RouteValues =
|
||||||
{
|
{
|
||||||
|
|
@ -341,10 +336,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
generator.Setup(mock => mock.GenerateAntiForgery(It.IsAny<ViewContext>()))
|
generator.Setup(mock => mock.GenerateAntiForgery(It.IsAny<ViewContext>()))
|
||||||
.Returns(new TagBuilder("input", new CommonTestEncoder()));
|
.Returns(new TagBuilder("input", new CommonTestEncoder()));
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
AntiForgery = antiForgery,
|
AntiForgery = antiForgery,
|
||||||
Generator = generator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -386,7 +380,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_ThrowsIfActionConflictsWithBoundAttributes(string propertyName)
|
public async Task ProcessAsync_ThrowsIfActionConflictsWithBoundAttributes(string propertyName)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var formTagHelper = new FormTagHelper();
|
var formTagHelper = new FormTagHelper(new TestableHtmlGenerator(new EmptyModelMetadataProvider()));
|
||||||
var tagHelperOutput = new TagHelperOutput(
|
var tagHelperOutput = new TagHelperOutput(
|
||||||
"form",
|
"form",
|
||||||
attributes: new TagHelperAttributeList
|
attributes: new TagHelperAttributeList
|
||||||
|
|
@ -419,7 +413,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_ThrowsIfRouteAndActionOrControllerProvided(string propertyName)
|
public async Task ProcessAsync_ThrowsIfRouteAndActionOrControllerProvided(string propertyName)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var formTagHelper = new FormTagHelper
|
var formTagHelper = new FormTagHelper(new TestableHtmlGenerator(new EmptyModelMetadataProvider()))
|
||||||
{
|
{
|
||||||
Route = "Default",
|
Route = "Default",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -56,13 +56,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ImageTagHelper
|
|
||||||
|
var helper = new ImageTagHelper(hostingEnvironment, MakeCache())
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "testimage.png",
|
Src = "testimage.png",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -98,13 +97,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
});
|
});
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ImageTagHelper
|
|
||||||
|
var helper = new ImageTagHelper(hostingEnvironment, MakeCache())
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "/images/test-image.png",
|
Src = "/images/test-image.png",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -135,13 +133,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
});
|
});
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ImageTagHelper
|
|
||||||
|
var helper = new ImageTagHelper(hostingEnvironment, MakeCache())
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "/images/test-image.png",
|
Src = "/images/test-image.png",
|
||||||
FileVersion = false,
|
FileVersion = false,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -172,13 +169,12 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
});
|
});
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext("/bar");
|
var viewContext = MakeViewContext("/bar");
|
||||||
var helper = new ImageTagHelper
|
|
||||||
|
var helper = new ImageTagHelper(hostingEnvironment, MakeCache())
|
||||||
{
|
{
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "/bar/images/image.jpg",
|
Src = "/bar/images/image.jpg",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
|
||||||
|
|
@ -939,10 +939,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
var modelExpression = new ModelExpression(expressionName, modelExplorer);
|
var modelExpression = new ModelExpression(expressionName, modelExplorer);
|
||||||
var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider);
|
var viewContext = TestableHtmlGenerator.GetViewContext(container, htmlGenerator, metadataProvider);
|
||||||
var inputTagHelper = new InputTagHelper
|
var inputTagHelper = new InputTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Generator = htmlGenerator,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,9 +177,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, "Text");
|
var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, "Text");
|
||||||
var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, modelAccessor());
|
var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, modelAccessor());
|
||||||
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
var modelExpression = new ModelExpression(propertyPath, modelExplorer);
|
var modelExpression = new ModelExpression(propertyPath, modelExplorer);
|
||||||
var tagHelper = new LabelTagHelper
|
var tagHelper = new LabelTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
};
|
};
|
||||||
|
|
@ -211,11 +212,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
output.Content.SetContent(tagHelperOutputContent.OriginalContent);
|
output.Content.SetContent(tagHelperOutputContent.OriginalContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
|
||||||
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
||||||
tagHelper.ViewContext = viewContext;
|
tagHelper.ViewContext = viewContext;
|
||||||
tagHelper.Generator = htmlGenerator;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await tagHelper.ProcessAsync(tagHelperContext, output);
|
await tagHelper.ProcessAsync(tagHelperContext, output);
|
||||||
|
|
|
||||||
|
|
@ -109,19 +109,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
FallbackHref = "test.css",
|
FallbackHref = "test.css",
|
||||||
FallbackTestClass = "hidden",
|
FallbackTestClass = "hidden",
|
||||||
FallbackTestProperty = "visibility",
|
FallbackTestProperty = "visibility",
|
||||||
FallbackTestValue = "hidden",
|
FallbackTestValue = "hidden",
|
||||||
Href = "test.css",
|
Href = "test.css",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -280,14 +281,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache()
|
|
||||||
};
|
};
|
||||||
setProperties(helper);
|
setProperties(helper);
|
||||||
|
|
||||||
|
|
@ -324,19 +326,20 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
FallbackHref = "test.css",
|
FallbackHref = "test.css",
|
||||||
FallbackTestClass = "hidden",
|
FallbackTestClass = "hidden",
|
||||||
FallbackTestProperty = "visibility",
|
FallbackTestProperty = "visibility",
|
||||||
FallbackTestValue = "hidden",
|
FallbackTestValue = "hidden",
|
||||||
Href = "test.css",
|
Href = "test.css",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -431,12 +434,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
setProperties(helper);
|
setProperties(helper);
|
||||||
|
|
||||||
|
|
@ -457,12 +463,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -494,16 +503,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
||||||
.Returns(new[] { "/css/site.css", "/base.css" });
|
.Returns(new[] { "/css/site.css", "/base.css" });
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Href = "/css/site.css",
|
Href = "/css/site.css",
|
||||||
HrefInclude = "**/*.css",
|
HrefInclude = "**/*.css",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -537,16 +548,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
||||||
.Returns(new[] { "/css/site.css", "/base.css" });
|
.Returns(new[] { "/css/site.css", "/base.css" });
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Href = "/css/site.css",
|
Href = "/css/site.css",
|
||||||
HrefInclude = "**/*.css",
|
HrefInclude = "**/*.css",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -577,16 +590,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Href = "/css/site.css",
|
Href = "/css/site.css",
|
||||||
HrefInclude = "**/*.css",
|
HrefInclude = "**/*.css",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -616,16 +631,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<LinkTagHelper>>();
|
var logger = new Mock<ILogger<LinkTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext("/bar");
|
var viewContext = MakeViewContext("/bar");
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Href = "/bar/css/site.css",
|
Href = "/bar/css/site.css",
|
||||||
HrefInclude = "**/*.css",
|
HrefInclude = "**/*.css",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -659,17 +676,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/css/site.css", "**/*.css", null))
|
||||||
.Returns(new[] { "/css/site.css", "/base.css" });
|
.Returns(new[] { "/css/site.css", "/base.css" });
|
||||||
var helper = new LinkTagHelper
|
|
||||||
|
var helper = new LinkTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Href = "/css/site.css",
|
Href = "/css/site.css",
|
||||||
HrefInclude = "**/*.css",
|
HrefInclude = "**/*.css",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
|
||||||
|
|
@ -419,9 +419,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
htmlGenerator: htmlGenerator,
|
htmlGenerator: htmlGenerator,
|
||||||
metadataProvider: metadataProvider);
|
metadataProvider: metadataProvider);
|
||||||
viewContext.FormContext.FormData[SelectTagHelper.SelectedValuesFormDataKey] = selectedValues;
|
viewContext.FormContext.FormData[SelectTagHelper.SelectedValuesFormDataKey] = selectedValues;
|
||||||
var tagHelper = new OptionTagHelper
|
var tagHelper = new OptionTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Generator = htmlGenerator,
|
|
||||||
Value = value,
|
Value = value,
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
@ -489,7 +488,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
htmlGenerator: htmlGenerator,
|
htmlGenerator: htmlGenerator,
|
||||||
metadataProvider: metadataProvider);
|
metadataProvider: metadataProvider);
|
||||||
viewContext.FormContext.FormData[SelectTagHelper.SelectedValuesFormDataKey] = selectedValues;
|
viewContext.FormContext.FormData[SelectTagHelper.SelectedValuesFormDataKey] = selectedValues;
|
||||||
var tagHelper = new OptionTagHelper
|
var tagHelper = new OptionTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Value = value,
|
Value = value,
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
|
|
@ -535,6 +534,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
tagHelperContent.SetContent(originalContent);
|
tagHelperContent.SetContent(originalContent);
|
||||||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||||
});
|
});
|
||||||
|
|
||||||
var output = new TagHelperOutput(originalTagName, originalAttributes)
|
var output = new TagHelperOutput(originalTagName, originalAttributes)
|
||||||
{
|
{
|
||||||
SelfClosing = false,
|
SelfClosing = false,
|
||||||
|
|
@ -543,7 +543,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.Content.SetContent(originalContent);
|
output.Content.SetContent(originalContent);
|
||||||
output.PostContent.SetContent(originalPostContent);
|
output.PostContent.SetContent(originalPostContent);
|
||||||
|
|
||||||
var tagHelper = new OptionTagHelper
|
var metadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
|
var tagHelper = new OptionTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
Value = value,
|
Value = value,
|
||||||
};
|
};
|
||||||
|
|
@ -562,4 +565,4 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
return tagHelperOutput;
|
return tagHelperOutput;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -55,17 +55,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var output = MakeTagHelperOutput("script", combinedOutputAttributes);
|
var output = MakeTagHelperOutput("script", combinedOutputAttributes);
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
CreateLogger(),
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
FallbackSrc = "~/blank.js",
|
FallbackSrc = "~/blank.js",
|
||||||
FallbackTestExpression = "http://www.example.com/blank.js",
|
FallbackTestExpression = "http://www.example.com/blank.js",
|
||||||
Src = "/blank.js",
|
Src = "/blank.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
Logger = CreateLogger()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -271,14 +271,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = CreateLogger();
|
var logger = CreateLogger();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
CreateLogger(),
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
setProperties(helper);
|
setProperties(helper);
|
||||||
|
|
||||||
|
|
@ -363,12 +364,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = new Mock<ILogger<ScriptTagHelper>>();
|
var logger = new Mock<ILogger<ScriptTagHelper>>();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
CreateLogger(),
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
setProperties(helper);
|
setProperties(helper);
|
||||||
|
|
||||||
|
|
@ -392,12 +396,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = CreateLogger();
|
var logger = CreateLogger();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
logger,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
setProperties(helper);
|
setProperties(helper);
|
||||||
|
|
||||||
|
|
@ -431,11 +438,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var output = MakeTagHelperOutput("script");
|
var output = MakeTagHelperOutput("script");
|
||||||
var logger = CreateLogger();
|
var logger = CreateLogger();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
CreateLogger(),
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -455,11 +465,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var output = MakeTagHelperOutput("script");
|
var output = MakeTagHelperOutput("script");
|
||||||
var logger = CreateLogger();
|
var logger = CreateLogger();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
logger,
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -503,17 +516,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var logger = CreateLogger();
|
var logger = CreateLogger();
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
logger,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new CommonTestEncoder(),
|
|
||||||
Logger = logger,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
FallbackSrc = "~/blank.js",
|
FallbackSrc = "~/blank.js",
|
||||||
FallbackTestExpression = "http://www.example.com/blank.js",
|
FallbackTestExpression = "http://www.example.com/blank.js",
|
||||||
Src = "/blank.js",
|
Src = "/blank.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -543,16 +556,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "**/*.js", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "**/*.js", null))
|
||||||
.Returns(new[] { "/js/site.js", "/common.js" });
|
.Returns(new[] { "/js/site.js", "/common.js" });
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "/js/site.js",
|
Src = "/js/site.js",
|
||||||
SrcInclude = "**/*.js",
|
SrcInclude = "**/*.js",
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -580,17 +595,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "**/*.js", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "**/*.js", null))
|
||||||
.Returns(new[] { "/js/site.js", "/common.js" });
|
.Returns(new[] { "/js/site.js", "/common.js" });
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
hostingEnvironment,
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
Src = "/js/site.js",
|
Src = "/js/site.js",
|
||||||
SrcInclude = "**/*.js",
|
SrcInclude = "**/*.js",
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new TestJavaScriptEncoder(),
|
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -617,16 +633,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new TestJavaScriptEncoder(),
|
|
||||||
Src = "/js/site.js",
|
Src = "/js/site.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -654,16 +670,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext("/bar");
|
var viewContext = MakeViewContext("/bar");
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new TestJavaScriptEncoder(),
|
|
||||||
Src = "/bar/js/site.js",
|
Src = "/bar/js/site.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -693,18 +709,18 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var hostingEnvironment = MakeHostingEnvironment();
|
var hostingEnvironment = MakeHostingEnvironment();
|
||||||
var viewContext = MakeViewContext();
|
var viewContext = MakeViewContext();
|
||||||
|
|
||||||
var helper = new ScriptTagHelper
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
FallbackSrc = "fallback.js",
|
FallbackSrc = "fallback.js",
|
||||||
FallbackTestExpression = "isavailable()",
|
FallbackTestExpression = "isavailable()",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new TestJavaScriptEncoder(),
|
|
||||||
Src = "/js/site.js",
|
Src = "/js/site.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -713,7 +729,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(
|
Assert.Equal(
|
||||||
"<script src=\"HtmlEncode[[/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\">" +
|
"<script src=\"HtmlEncode[[/js/site.js?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\">" +
|
||||||
"</script>\r\n<script>(isavailable()||document.write(\"<script src=\\\"JavaScriptEncode[[fallback.js" +
|
"</script>\r\n<script>(isavailable()||document.write(\"<script src=\\\"JavaScriptStringEncode[[fallback.js" +
|
||||||
"?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\\\"><\\/script>\"));</script>",
|
"?v=f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk]]\\\"><\\/script>\"));</script>",
|
||||||
output.Content.GetContent());
|
output.Content.GetContent());
|
||||||
}
|
}
|
||||||
|
|
@ -736,18 +752,19 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
var globbingUrlBuilder = new Mock<GlobbingUrlBuilder>();
|
||||||
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "*.js", null))
|
globbingUrlBuilder.Setup(g => g.BuildUrlList("/js/site.js", "*.js", null))
|
||||||
.Returns(new[] { "/js/site.js", "/common.js" });
|
.Returns(new[] { "/js/site.js", "/common.js" });
|
||||||
var helper = new ScriptTagHelper
|
|
||||||
|
var helper = new ScriptTagHelper(
|
||||||
|
logger.Object,
|
||||||
|
MakeHostingEnvironment(),
|
||||||
|
MakeCache(),
|
||||||
|
new CommonTestEncoder(),
|
||||||
|
new CommonTestEncoder())
|
||||||
{
|
{
|
||||||
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
GlobbingUrlBuilder = globbingUrlBuilder.Object,
|
||||||
Logger = logger.Object,
|
|
||||||
HostingEnvironment = hostingEnvironment,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
SrcInclude = "*.js",
|
SrcInclude = "*.js",
|
||||||
FileVersion = true,
|
FileVersion = true,
|
||||||
HtmlEncoder = new CommonTestEncoder(),
|
|
||||||
JavaScriptEncoder = new TestJavaScriptEncoder(),
|
|
||||||
Src = "/js/site.js",
|
Src = "/js/site.js",
|
||||||
Cache = MakeCache(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
|
||||||
|
|
@ -224,10 +224,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
||||||
var tagHelper = new SelectTagHelper
|
var tagHelper = new SelectTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Generator = htmlGenerator,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -319,10 +318,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var savedSelected = items.Select(item => item.Selected).ToList();
|
var savedSelected = items.Select(item => item.Selected).ToList();
|
||||||
var savedText = items.Select(item => item.Text).ToList();
|
var savedText = items.Select(item => item.Text).ToList();
|
||||||
var savedValue = items.Select(item => item.Value).ToList();
|
var savedValue = items.Select(item => item.Value).ToList();
|
||||||
var tagHelper = new SelectTagHelper
|
|
||||||
|
var tagHelper = new SelectTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Generator = htmlGenerator,
|
|
||||||
Items = items,
|
Items = items,
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
@ -422,10 +421,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var savedSelected = items.Select(item => item.Selected).ToList();
|
var savedSelected = items.Select(item => item.Selected).ToList();
|
||||||
var savedText = items.Select(item => item.Text).ToList();
|
var savedText = items.Select(item => item.Text).ToList();
|
||||||
var savedValue = items.Select(item => item.Value).ToList();
|
var savedValue = items.Select(item => item.Value).ToList();
|
||||||
var tagHelper = new SelectTagHelper
|
|
||||||
|
var tagHelper = new SelectTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Generator = htmlGenerator,
|
|
||||||
Items = items,
|
Items = items,
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
@ -519,11 +518,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
.Returns((TagBuilder)null)
|
.Returns((TagBuilder)null)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
var tagHelper = new SelectTagHelper
|
var tagHelper = new SelectTagHelper(htmlGenerator.Object)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Items = inputItems,
|
Items = inputItems,
|
||||||
Generator = htmlGenerator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -593,10 +591,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
.Returns((TagBuilder)null)
|
.Returns((TagBuilder)null)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
var tagHelper = new SelectTagHelper
|
var tagHelper = new SelectTagHelper(htmlGenerator.Object)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
Generator = htmlGenerator.Object,
|
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,9 +106,17 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, "Text");
|
var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, "Text");
|
||||||
var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, model);
|
var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, model);
|
||||||
|
|
||||||
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider)
|
||||||
|
{
|
||||||
|
ValidationAttributes =
|
||||||
|
{
|
||||||
|
{ "valid", "from validation attributes" },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Property name is either nameof(Model.Text) or nameof(NestedModel.Text).
|
// Property name is either nameof(Model.Text) or nameof(NestedModel.Text).
|
||||||
var modelExpression = new ModelExpression(nameAndId.Name, modelExplorer);
|
var modelExpression = new ModelExpression(nameAndId.Name, modelExplorer);
|
||||||
var tagHelper = new TextAreaTagHelper
|
var tagHelper = new TextAreaTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression,
|
For = modelExpression,
|
||||||
};
|
};
|
||||||
|
|
@ -134,16 +142,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
};
|
};
|
||||||
output.Content.SetContent("original content");
|
output.Content.SetContent("original content");
|
||||||
|
|
||||||
var htmlGenerator = new TestableHtmlGenerator(metadataProvider)
|
|
||||||
{
|
|
||||||
ValidationAttributes =
|
|
||||||
{
|
|
||||||
{ "valid", "from validation attributes" },
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
|
||||||
tagHelper.ViewContext = viewContext;
|
tagHelper.ViewContext = viewContext;
|
||||||
tagHelper.Generator = htmlGenerator;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await tagHelper.ProcessAsync(tagHelperContext, output);
|
await tagHelper.ProcessAsync(tagHelperContext, output);
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
var expectedTagName = "not-span";
|
var expectedTagName = "not-span";
|
||||||
var metadataProvider = new TestModelMetadataProvider();
|
var metadataProvider = new TestModelMetadataProvider();
|
||||||
var modelExpression = CreateModelExpression("Name");
|
var modelExpression = CreateModelExpression("Name");
|
||||||
var validationMessageTagHelper = new ValidationMessageTagHelper
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
|
var validationMessageTagHelper = new ValidationMessageTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
For = modelExpression
|
For = modelExpression
|
||||||
};
|
};
|
||||||
|
|
@ -57,12 +59,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.PreContent.SetContent(expectedPreContent);
|
output.PreContent.SetContent(expectedPreContent);
|
||||||
output.Content.SetContent(expectedContent);
|
output.Content.SetContent(expectedContent);
|
||||||
output.PostContent.SetContent(expectedPostContent);
|
output.PostContent.SetContent(expectedPostContent);
|
||||||
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
|
||||||
var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
|
var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
|
||||||
htmlGenerator: htmlGenerator,
|
htmlGenerator: htmlGenerator,
|
||||||
metadataProvider: metadataProvider);
|
metadataProvider: metadataProvider);
|
||||||
validationMessageTagHelper.ViewContext = viewContext;
|
validationMessageTagHelper.ViewContext = viewContext;
|
||||||
validationMessageTagHelper.Generator = htmlGenerator;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationMessageTagHelper.ProcessAsync(tagHelperContext, output);
|
await validationMessageTagHelper.ProcessAsync(tagHelperContext, output);
|
||||||
|
|
@ -87,7 +88,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_CallsIntoGenerateValidationMessageWithExpectedParameters()
|
public async Task ProcessAsync_CallsIntoGenerateValidationMessageWithExpectedParameters()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationMessageTagHelper = new ValidationMessageTagHelper
|
var expectedViewContext = CreateViewContext();
|
||||||
|
var generator = new Mock<IHtmlGenerator>();
|
||||||
|
generator
|
||||||
|
.Setup(mock =>
|
||||||
|
mock.GenerateValidationMessage(expectedViewContext, "Hello", null, null, null))
|
||||||
|
.Returns(new TagBuilder("span", new CommonTestEncoder()))
|
||||||
|
.Verifiable();
|
||||||
|
|
||||||
|
var validationMessageTagHelper = new ValidationMessageTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
For = CreateModelExpression("Hello")
|
For = CreateModelExpression("Hello")
|
||||||
};
|
};
|
||||||
|
|
@ -112,14 +121,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.Content.SetContent(expectedContent);
|
output.Content.SetContent(expectedContent);
|
||||||
output.PostContent.SetContent(expectedPostContent);
|
output.PostContent.SetContent(expectedPostContent);
|
||||||
|
|
||||||
var expectedViewContext = CreateViewContext();
|
|
||||||
var generator = new Mock<IHtmlGenerator>();
|
|
||||||
generator
|
|
||||||
.Setup(mock =>
|
|
||||||
mock.GenerateValidationMessage(expectedViewContext, "Hello", null, null, null))
|
|
||||||
.Returns(new TagBuilder("span", new CommonTestEncoder()))
|
|
||||||
.Verifiable();
|
|
||||||
validationMessageTagHelper.Generator = generator.Object;
|
|
||||||
validationMessageTagHelper.ViewContext = expectedViewContext;
|
validationMessageTagHelper.ViewContext = expectedViewContext;
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
|
|
@ -141,7 +142,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
string childContent, string outputContent, string expectedOutputContent)
|
string childContent, string outputContent, string expectedOutputContent)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationMessageTagHelper = new ValidationMessageTagHelper
|
var tagBuilder = new TagBuilder("span2", new CommonTestEncoder())
|
||||||
|
{
|
||||||
|
InnerHtml = "New HTML"
|
||||||
|
};
|
||||||
|
tagBuilder.Attributes.Add("data-foo", "bar");
|
||||||
|
tagBuilder.Attributes.Add("data-hello", "world");
|
||||||
|
|
||||||
|
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||||
|
var setup = generator
|
||||||
|
.Setup(mock => mock.GenerateValidationMessage(
|
||||||
|
It.IsAny<ViewContext>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<object>()))
|
||||||
|
.Returns(tagBuilder);
|
||||||
|
|
||||||
|
var validationMessageTagHelper = new ValidationMessageTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
For = CreateModelExpression("Hello")
|
For = CreateModelExpression("Hello")
|
||||||
};
|
};
|
||||||
|
|
@ -161,25 +179,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
tagHelperContent.SetContent(childContent);
|
tagHelperContent.SetContent(childContent);
|
||||||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||||
});
|
});
|
||||||
var tagBuilder = new TagBuilder("span2", new CommonTestEncoder())
|
|
||||||
{
|
|
||||||
InnerHtml = "New HTML"
|
|
||||||
};
|
|
||||||
tagBuilder.Attributes.Add("data-foo", "bar");
|
|
||||||
tagBuilder.Attributes.Add("data-hello", "world");
|
|
||||||
|
|
||||||
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
|
||||||
var setup = generator
|
|
||||||
.Setup(mock => mock.GenerateValidationMessage(
|
|
||||||
It.IsAny<ViewContext>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<object>()))
|
|
||||||
.Returns(tagBuilder);
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
validationMessageTagHelper.ViewContext = viewContext;
|
validationMessageTagHelper.ViewContext = viewContext;
|
||||||
validationMessageTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationMessageTagHelper.ProcessAsync(context, output: output);
|
await validationMessageTagHelper.ProcessAsync(context, output: output);
|
||||||
|
|
@ -201,7 +203,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
string childContent, string expectedOutputContent)
|
string childContent, string expectedOutputContent)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationMessageTagHelper = new ValidationMessageTagHelper
|
var tagBuilder = new TagBuilder("span2", new CommonTestEncoder())
|
||||||
|
{
|
||||||
|
InnerHtml = "New HTML"
|
||||||
|
};
|
||||||
|
tagBuilder.Attributes.Add("data-foo", "bar");
|
||||||
|
tagBuilder.Attributes.Add("data-hello", "world");
|
||||||
|
|
||||||
|
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||||
|
var setup = generator
|
||||||
|
.Setup(mock => mock.GenerateValidationMessage(
|
||||||
|
It.IsAny<ViewContext>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<string>(),
|
||||||
|
It.IsAny<object>()))
|
||||||
|
.Returns(tagBuilder);
|
||||||
|
|
||||||
|
var validationMessageTagHelper = new ValidationMessageTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
For = CreateModelExpression("Hello")
|
For = CreateModelExpression("Hello")
|
||||||
};
|
};
|
||||||
|
|
@ -220,25 +239,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
tagHelperContent.SetContent(childContent);
|
tagHelperContent.SetContent(childContent);
|
||||||
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
return Task.FromResult<TagHelperContent>(tagHelperContent);
|
||||||
});
|
});
|
||||||
var tagBuilder = new TagBuilder("span2", new CommonTestEncoder())
|
|
||||||
{
|
|
||||||
InnerHtml = "New HTML"
|
|
||||||
};
|
|
||||||
tagBuilder.Attributes.Add("data-foo", "bar");
|
|
||||||
tagBuilder.Attributes.Add("data-hello", "world");
|
|
||||||
|
|
||||||
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
|
||||||
var setup = generator
|
|
||||||
.Setup(mock => mock.GenerateValidationMessage(
|
|
||||||
It.IsAny<ViewContext>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<string>(),
|
|
||||||
It.IsAny<object>()))
|
|
||||||
.Returns(tagBuilder);
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
validationMessageTagHelper.ViewContext = viewContext;
|
validationMessageTagHelper.ViewContext = viewContext;
|
||||||
validationMessageTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationMessageTagHelper.ProcessAsync(context, output: output);
|
await validationMessageTagHelper.ProcessAsync(context, output: output);
|
||||||
|
|
@ -257,7 +260,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_DoesNothingIfNullFor()
|
public async Task ProcessAsync_DoesNothingIfNullFor()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationMessageTagHelper = new ValidationMessageTagHelper();
|
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||||
|
var validationMessageTagHelper = new ValidationMessageTagHelper(generator.Object);
|
||||||
var expectedPreContent = "original pre-content";
|
var expectedPreContent = "original pre-content";
|
||||||
var expectedContent = "original content";
|
var expectedContent = "original content";
|
||||||
var expectedPostContent = "original post-content";
|
var expectedPostContent = "original post-content";
|
||||||
|
|
@ -269,9 +273,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.PostContent.SetContent(expectedPostContent);
|
output.PostContent.SetContent(expectedPostContent);
|
||||||
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
|
||||||
validationMessageTagHelper.ViewContext = viewContext;
|
validationMessageTagHelper.ViewContext = viewContext;
|
||||||
validationMessageTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationMessageTagHelper.ProcessAsync(context: null, output: output);
|
await validationMessageTagHelper.ProcessAsync(context: null, output: output);
|
||||||
|
|
|
||||||
|
|
@ -20,24 +20,15 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
{
|
{
|
||||||
public class ValidationSummaryTagHelperTest
|
public class ValidationSummaryTagHelperTest
|
||||||
{
|
{
|
||||||
public void Concstructor_IntializesProperties_AsExpected()
|
|
||||||
{
|
|
||||||
// Arrange & Act
|
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.Null(validationSummaryTagHelper.Generator);
|
|
||||||
Assert.Null(validationSummaryTagHelper.ViewContext);
|
|
||||||
Assert.Equal(ValidationSummary.None, validationSummaryTagHelper.ValidationSummary);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task ProcessAsync_GeneratesExpectedOutput()
|
public async Task ProcessAsync_GeneratesExpectedOutput()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var expectedTagName = "not-div";
|
var expectedTagName = "not-div";
|
||||||
var metadataProvider = new TestModelMetadataProvider();
|
var metadataProvider = new TestModelMetadataProvider();
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper
|
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(htmlGenerator)
|
||||||
{
|
{
|
||||||
ValidationSummary = ValidationSummary.All,
|
ValidationSummary = ValidationSummary.All,
|
||||||
};
|
};
|
||||||
|
|
@ -65,11 +56,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.Content.SetContent(expectedContent);
|
output.Content.SetContent(expectedContent);
|
||||||
output.PostContent.SetContent("Custom Content");
|
output.PostContent.SetContent("Custom Content");
|
||||||
|
|
||||||
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);
|
||||||
validationSummaryTagHelper.ViewContext = viewContext;
|
validationSummaryTagHelper.ViewContext = viewContext;
|
||||||
validationSummaryTagHelper.Generator = htmlGenerator;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output);
|
await validationSummaryTagHelper.ProcessAsync(tagHelperContext, output);
|
||||||
|
|
@ -95,21 +84,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
bool expectedExcludePropertyErrors)
|
bool expectedExcludePropertyErrors)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper
|
|
||||||
{
|
|
||||||
ValidationSummary = validationSummary,
|
|
||||||
};
|
|
||||||
var expectedPreContent = "original pre-content";
|
|
||||||
var expectedContent = "original content";
|
|
||||||
var expectedPostContent = "original post-content";
|
|
||||||
var output = new TagHelperOutput(
|
|
||||||
"div",
|
|
||||||
attributes: new TagHelperAttributeList());
|
|
||||||
output.PreContent.SetContent(expectedPreContent);
|
|
||||||
output.Content.SetContent(expectedContent);
|
|
||||||
output.PostContent.SetContent(expectedPostContent);
|
|
||||||
|
|
||||||
var expectedViewContext = CreateViewContext();
|
var expectedViewContext = CreateViewContext();
|
||||||
|
|
||||||
var generator = new Mock<IHtmlGenerator>();
|
var generator = new Mock<IHtmlGenerator>();
|
||||||
generator
|
generator
|
||||||
.Setup(mock => mock.GenerateValidationSummary(
|
.Setup(mock => mock.GenerateValidationSummary(
|
||||||
|
|
@ -120,8 +96,24 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
null)) // htmlAttributes
|
null)) // htmlAttributes
|
||||||
.Returns(new TagBuilder("div", new HtmlEncoder()))
|
.Returns(new TagBuilder("div", new HtmlEncoder()))
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object)
|
||||||
|
{
|
||||||
|
ValidationSummary = validationSummary,
|
||||||
|
};
|
||||||
|
|
||||||
|
var expectedPreContent = "original pre-content";
|
||||||
|
var expectedContent = "original content";
|
||||||
|
var expectedPostContent = "original post-content";
|
||||||
|
var output = new TagHelperOutput(
|
||||||
|
"div",
|
||||||
|
attributes: new TagHelperAttributeList());
|
||||||
|
output.PreContent.SetContent(expectedPreContent);
|
||||||
|
output.Content.SetContent(expectedContent);
|
||||||
|
output.PostContent.SetContent(expectedPostContent);
|
||||||
|
|
||||||
|
|
||||||
validationSummaryTagHelper.ViewContext = expectedViewContext;
|
validationSummaryTagHelper.ViewContext = expectedViewContext;
|
||||||
validationSummaryTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
||||||
|
|
@ -138,19 +130,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_MergesTagBuilderFromGenerateValidationSummary()
|
public async Task ProcessAsync_MergesTagBuilderFromGenerateValidationSummary()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper
|
|
||||||
{
|
|
||||||
ValidationSummary = ValidationSummary.ModelOnly,
|
|
||||||
};
|
|
||||||
var expectedPreContent = "original pre-content";
|
|
||||||
var expectedContent = "original content";
|
|
||||||
var output = new TagHelperOutput(
|
|
||||||
"div",
|
|
||||||
attributes: new TagHelperAttributeList());
|
|
||||||
output.PreContent.SetContent(expectedPreContent);
|
|
||||||
output.Content.SetContent(expectedContent);
|
|
||||||
output.PostContent.SetContent("Content of validation summary");
|
|
||||||
|
|
||||||
var tagBuilder = new TagBuilder("span2", new HtmlEncoder())
|
var tagBuilder = new TagBuilder("span2", new HtmlEncoder())
|
||||||
{
|
{
|
||||||
InnerHtml = "New HTML"
|
InnerHtml = "New HTML"
|
||||||
|
|
@ -169,9 +148,23 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
It.IsAny<string>(),
|
It.IsAny<string>(),
|
||||||
It.IsAny<object>()))
|
It.IsAny<object>()))
|
||||||
.Returns(tagBuilder);
|
.Returns(tagBuilder);
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object)
|
||||||
|
{
|
||||||
|
ValidationSummary = ValidationSummary.ModelOnly,
|
||||||
|
};
|
||||||
|
|
||||||
|
var expectedPreContent = "original pre-content";
|
||||||
|
var expectedContent = "original content";
|
||||||
|
var output = new TagHelperOutput(
|
||||||
|
"div",
|
||||||
|
attributes: new TagHelperAttributeList());
|
||||||
|
output.PreContent.SetContent(expectedPreContent);
|
||||||
|
output.Content.SetContent(expectedContent);
|
||||||
|
output.PostContent.SetContent("Content of validation summary");
|
||||||
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
validationSummaryTagHelper.ViewContext = viewContext;
|
validationSummaryTagHelper.ViewContext = viewContext;
|
||||||
validationSummaryTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
||||||
|
|
@ -194,10 +187,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_DoesNothingIfValidationSummaryNone()
|
public async Task ProcessAsync_DoesNothingIfValidationSummaryNone()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper
|
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object)
|
||||||
{
|
{
|
||||||
ValidationSummary = ValidationSummary.None,
|
ValidationSummary = ValidationSummary.None,
|
||||||
};
|
};
|
||||||
|
|
||||||
var expectedPreContent = "original pre-content";
|
var expectedPreContent = "original pre-content";
|
||||||
var expectedContent = "original content";
|
var expectedContent = "original content";
|
||||||
var expectedPostContent = "original post-content";
|
var expectedPostContent = "original post-content";
|
||||||
|
|
@ -208,10 +204,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
output.Content.SetContent(expectedContent);
|
output.Content.SetContent(expectedContent);
|
||||||
output.PostContent.SetContent(expectedPostContent);
|
output.PostContent.SetContent(expectedPostContent);
|
||||||
|
|
||||||
var generator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
validationSummaryTagHelper.ViewContext = viewContext;
|
validationSummaryTagHelper.ViewContext = viewContext;
|
||||||
validationSummaryTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
||||||
|
|
@ -230,18 +224,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
public async Task ProcessAsync_GeneratesValidationSummaryWhenNotNone(ValidationSummary validationSummary)
|
public async Task ProcessAsync_GeneratesValidationSummaryWhenNotNone(ValidationSummary validationSummary)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper
|
|
||||||
{
|
|
||||||
ValidationSummary = validationSummary,
|
|
||||||
};
|
|
||||||
var expectedPreContent = "original pre-content";
|
|
||||||
var expectedContent = "original content";
|
|
||||||
var output = new TagHelperOutput(
|
|
||||||
"div",
|
|
||||||
attributes: new TagHelperAttributeList());
|
|
||||||
output.PreContent.SetContent(expectedPreContent);
|
|
||||||
output.Content.SetContent(expectedContent);
|
|
||||||
output.PostContent.SetContent("Content of validation message");
|
|
||||||
var tagBuilder = new TagBuilder("span2", new HtmlEncoder())
|
var tagBuilder = new TagBuilder("span2", new HtmlEncoder())
|
||||||
{
|
{
|
||||||
InnerHtml = "New HTML"
|
InnerHtml = "New HTML"
|
||||||
|
|
@ -257,9 +239,23 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
It.IsAny<object>()))
|
It.IsAny<object>()))
|
||||||
.Returns(tagBuilder)
|
.Returns(tagBuilder)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator.Object)
|
||||||
|
{
|
||||||
|
ValidationSummary = validationSummary,
|
||||||
|
};
|
||||||
|
|
||||||
|
var expectedPreContent = "original pre-content";
|
||||||
|
var expectedContent = "original content";
|
||||||
|
var output = new TagHelperOutput(
|
||||||
|
"div",
|
||||||
|
attributes: new TagHelperAttributeList());
|
||||||
|
output.PreContent.SetContent(expectedPreContent);
|
||||||
|
output.Content.SetContent(expectedContent);
|
||||||
|
output.PostContent.SetContent("Content of validation message");
|
||||||
|
|
||||||
var viewContext = CreateViewContext();
|
var viewContext = CreateViewContext();
|
||||||
validationSummaryTagHelper.ViewContext = viewContext;
|
validationSummaryTagHelper.ViewContext = viewContext;
|
||||||
validationSummaryTagHelper.Generator = generator.Object;
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
await validationSummaryTagHelper.ProcessAsync(context: null, output: output);
|
||||||
|
|
@ -282,7 +278,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
ValidationSummary validationSummary)
|
ValidationSummary validationSummary)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var validationSummaryTagHelper = new ValidationSummaryTagHelper();
|
var generator = new TestableHtmlGenerator(new EmptyModelMetadataProvider());
|
||||||
|
|
||||||
|
var validationSummaryTagHelper = new ValidationSummaryTagHelper(generator);
|
||||||
var expectedMessage = string.Format(
|
var expectedMessage = string.Format(
|
||||||
@"The value of argument 'value' ({0}) is invalid for Enum type 'Microsoft.AspNet.Mvc.ValidationSummary'.
|
@"The value of argument 'value' ({0}) is invalid for Enum type 'Microsoft.AspNet.Mvc.ValidationSummary'.
|
||||||
Parameter name: value",
|
Parameter name: value",
|
||||||
|
|
|
||||||
|
|
@ -2,23 +2,28 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
|
||||||
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
||||||
|
using Microsoft.Framework.WebEncoders;
|
||||||
|
|
||||||
namespace ActivatorWebSite.TagHelpers
|
namespace ActivatorWebSite.TagHelpers
|
||||||
{
|
{
|
||||||
[TargetElement("body")]
|
[TargetElement("body")]
|
||||||
public class FooterTagHelper : TagHelper
|
public class FooterTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
public FooterTagHelper(IHtmlEncoder encoder)
|
||||||
public IHtmlHelper HtmlHelper { get; set; }
|
{
|
||||||
|
Encoder = encoder;
|
||||||
|
}
|
||||||
|
|
||||||
[Activate]
|
public IHtmlEncoder Encoder { get; }
|
||||||
public ViewDataDictionary ViewData { get; set; }
|
|
||||||
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
output.PostContent.SetContent($"<footer>{HtmlHelper.Encode(ViewData["footer"])}</footer>");
|
output.PostContent.SetContent($"<footer>{Encoder.HtmlEncode((string)ViewContext.ViewData["footer"])}</footer>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -11,13 +11,23 @@ namespace ActivatorWebSite.TagHelpers
|
||||||
[TargetElement("span")]
|
[TargetElement("span")]
|
||||||
public class HiddenTagHelper : TagHelper
|
public class HiddenTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public HiddenTagHelper(IHtmlHelper htmlHelper)
|
||||||
|
{
|
||||||
|
HtmlHelper = htmlHelper;
|
||||||
|
}
|
||||||
|
|
||||||
[Activate]
|
public IHtmlHelper HtmlHelper { get; }
|
||||||
public IHtmlHelper HtmlHelper { get; set; }
|
|
||||||
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
|
(HtmlHelper as ICanHasViewContext)?.Contextualize(ViewContext);
|
||||||
|
|
||||||
var content = await context.GetChildContentAsync();
|
var content = await context.GetChildContentAsync();
|
||||||
|
|
||||||
output.Content.SetContent(HtmlHelper.Hidden(Name, content).ToString());
|
output.Content.SetContent(HtmlHelper.Hidden(Name, content).ToString());
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,25 @@ namespace ActivatorWebSite.TagHelpers
|
||||||
[TargetElement("div")]
|
[TargetElement("div")]
|
||||||
public class RepeatContentTagHelper : TagHelper
|
public class RepeatContentTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
|
public RepeatContentTagHelper(IHtmlHelper htmlHelper)
|
||||||
|
{
|
||||||
|
HtmlHelper = htmlHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IHtmlHelper HtmlHelper { get; }
|
||||||
|
|
||||||
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
public int RepeatContent { get; set; }
|
public int RepeatContent { get; set; }
|
||||||
|
|
||||||
public ModelExpression Expression { get; set; }
|
public ModelExpression Expression { get; set; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
public IHtmlHelper HtmlHelper { get; set; }
|
|
||||||
|
|
||||||
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
|
(HtmlHelper as ICanHasViewContext)?.Contextualize(ViewContext);
|
||||||
|
|
||||||
var content = await context.GetChildContentAsync();
|
var content = await context.GetChildContentAsync();
|
||||||
var repeatContent = HtmlHelper.Encode(Expression.Model.ToString());
|
var repeatContent = HtmlHelper.Encode(Expression.Model.ToString());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,27 @@
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
||||||
using Microsoft.AspNet.Razor.TagHelpers;
|
|
||||||
|
|
||||||
namespace ActivatorWebSite.TagHelpers
|
namespace ActivatorWebSite.TagHelpers
|
||||||
{
|
{
|
||||||
[TargetElement("body")]
|
[TargetElement("body")]
|
||||||
public class TitleTagHelper : TagHelper
|
public class TitleTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
public TitleTagHelper(IHtmlHelper htmlHelper)
|
||||||
public IHtmlHelper HtmlHelper { get; set; }
|
{
|
||||||
|
HtmlHelper = htmlHelper;
|
||||||
|
}
|
||||||
|
|
||||||
[Activate]
|
public IHtmlHelper HtmlHelper { get; }
|
||||||
|
|
||||||
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
|
(HtmlHelper as ICanHasViewContext)?.Contextualize(ViewContext);
|
||||||
|
|
||||||
var builder = new TagBuilder("h2", HtmlHelper.HtmlEncoder);
|
var builder = new TagBuilder("h2", HtmlHelper.HtmlEncoder);
|
||||||
var title = ViewContext.ViewBag.Title;
|
var title = ViewContext.ViewBag.Title;
|
||||||
builder.InnerHtml = HtmlHelper.Encode(title);
|
builder.InnerHtml = HtmlHelper.Encode(title);
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,18 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNet.Mvc;
|
|
||||||
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
||||||
using Microsoft.AspNet.Razor.TagHelpers;
|
|
||||||
|
|
||||||
namespace RequestServicesWebSite
|
namespace RequestServicesWebSite
|
||||||
{
|
{
|
||||||
public class RequestScopedTagHelper : TagHelper
|
public class RequestScopedTagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
public RequestScopedTagHelper(RequestIdService service)
|
||||||
public RequestIdService RequestIdService { get; set; }
|
{
|
||||||
|
RequestIdService = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequestIdService RequestIdService { get; }
|
||||||
|
|
||||||
public override void Process(TagHelperContext context, TagHelperOutput output)
|
public override void Process(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,13 @@ namespace TagHelpersWebSite.TagHelpers
|
||||||
{
|
{
|
||||||
public class ATagHelper : TagHelper
|
public class ATagHelper : TagHelper
|
||||||
{
|
{
|
||||||
[Activate]
|
public ATagHelper(IUrlHelper urlHelper)
|
||||||
|
{
|
||||||
|
UrlHelper = urlHelper;
|
||||||
|
}
|
||||||
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
public IUrlHelper UrlHelper { get; set; }
|
public IUrlHelper UrlHelper { get; }
|
||||||
|
|
||||||
public string Controller { get; set; }
|
public string Controller { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace TagHelpersWebSite.TagHelpers
|
||||||
|
|
||||||
public string Style { get; set; }
|
public string Style { get; set; }
|
||||||
|
|
||||||
[Activate]
|
[ViewContext]
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ namespace MvcSample.Web.Components
|
||||||
|
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
|
|
||||||
[Activate]
|
|
||||||
[HtmlAttributeNotBound]
|
[HtmlAttributeNotBound]
|
||||||
|
[ViewContext]
|
||||||
public ViewContext ViewContext { get; set; }
|
public ViewContext ViewContext { get; set; }
|
||||||
|
|
||||||
public int Order { get; } = 0;
|
public int Order { get; } = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue