Skip to content
This repository has been archived by the owner on Dec 14, 2018. It is now read-only.

Commit

Permalink
[Fixes #2085] Using custom HtmlEncoder in unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ajaybhargavb committed Apr 23, 2015
1 parent 017e44a commit 5da8ba7
Show file tree
Hide file tree
Showing 23 changed files with 229 additions and 199 deletions.
4 changes: 4 additions & 0 deletions src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu
{
selected = selectedValues.Contains(Value);
}
else if (output.IsContentModified)
{
selected = encodedValues.Contains(output.Content.GetContent());
}
else
{
var childContent = await context.GetChildContentAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Collections;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.Framework.WebEncoders;
using Microsoft.Framework.WebEncoders.Testing;
using Moq;
using Xunit;

Expand Down Expand Up @@ -36,7 +36,7 @@ public async Task ChecksSSL_ValidateAsync_Throws()
tokenStore: null,
generator: null,
validator: null,
htmlEncoder: new HtmlEncoder());
htmlEncoder: new CommonTestEncoder());

// Act & assert
var ex =
Expand Down Expand Up @@ -68,7 +68,7 @@ public void ChecksSSL_Validate_Throws()
tokenStore: null,
generator: null,
validator: null,
htmlEncoder: new HtmlEncoder());
htmlEncoder: new CommonTestEncoder());

// Act & assert
var ex = Assert.Throws<InvalidOperationException>(
Expand Down Expand Up @@ -98,7 +98,7 @@ public void ChecksSSL_GetFormInputElement_Throws()
tokenStore: null,
generator: null,
validator: null,
htmlEncoder: new HtmlEncoder());
htmlEncoder: new CommonTestEncoder());

// Act & assert
var ex = Assert.Throws<InvalidOperationException>(() => worker.GetFormInputElement(mockHttpContext.Object));
Expand Down Expand Up @@ -127,7 +127,7 @@ public void ChecksSSL_GetTokens_Throws()
tokenStore: null,
generator: null,
validator: null,
htmlEncoder: new HtmlEncoder());
htmlEncoder: new CommonTestEncoder());

// Act & assert
var ex = Assert.Throws<InvalidOperationException>(() => worker.GetTokens(mockHttpContext.Object, "cookie-token"));
Expand All @@ -154,7 +154,8 @@ public void GetFormInputElement_ExistingInvalidCookieToken_GeneratesANewCookieAn
var inputElement = worker.GetFormInputElement(context.HttpContext.Object);

// Assert
Assert.Equal(@"<input name=""form-field-name"" type=""hidden"" value=""serialized-form-token"" />",
Assert.Equal(@"<input name=""HtmlEncode[[form-field-name]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[serialized-form-token]]"" />",
inputElement.ToString(TagRenderMode.SelfClosing));
context.TokenStore.Verify();
}
Expand Down Expand Up @@ -184,7 +185,8 @@ public void GetFormInputElement_ExistingInvalidCookieToken_SwallowsExceptions()
var inputElement = worker.GetFormInputElement(context.HttpContext.Object);

// Assert
Assert.Equal(@"<input name=""form-field-name"" type=""hidden"" value=""serialized-form-token"" />",
Assert.Equal(@"<input name=""HtmlEncode[[form-field-name]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[serialized-form-token]]"" />",
inputElement.ToString(TagRenderMode.SelfClosing));
context.TokenStore.Verify();
}
Expand All @@ -206,7 +208,8 @@ public void GetFormInputElement_ExistingValidCookieToken_GeneratesAnAntiForgeryT
var inputElement = worker.GetFormInputElement(context.HttpContext.Object);

// Assert
Assert.Equal(@"<input name=""form-field-name"" type=""hidden"" value=""serialized-form-token"" />",
Assert.Equal(@"<input name=""HtmlEncode[[form-field-name]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[serialized-form-token]]"" />",
inputElement.ToString(TagRenderMode.SelfClosing));
}

Expand Down Expand Up @@ -415,7 +418,7 @@ private AntiForgeryWorker GetAntiForgeryWorker(AntiForgeryWorkerContext context)
tokenStore: context.TokenStore != null ? context.TokenStore.Object : null,
generator: context.TokenProvider != null ? context.TokenProvider.Object : null,
validator: context.TokenProvider != null ? context.TokenProvider.Object : null,
htmlEncoder: new HtmlEncoder());
htmlEncoder: new CommonTestEncoder());
}

private Mock<HttpContext> GetHttpContext(bool setupResponse = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using Microsoft.AspNet.DataProtection;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.OptionsModel;
using Microsoft.Framework.WebEncoders;
using Microsoft.Framework.WebEncoders.Testing;
using Moq;
using Xunit;

Expand Down Expand Up @@ -44,7 +44,7 @@ private AntiForgery GetAntiForgeryInstance()
dataProtectionProvider.Object,
additionalDataProvider.Object,
optionsAccessor.Object,
new HtmlEncoder(),
new CommonTestEncoder(),
mockDataProtectionOptions.Object);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

using System.Collections.Generic;
using System.IO;
using Microsoft.Framework.WebEncoders;
using Microsoft.Framework.WebEncoders.Testing;
using Moq;
using Xunit;

Expand Down Expand Up @@ -276,7 +276,7 @@ public static TheoryData<object> RouteValuesDataSet
public void BeginFormWithNoParameters_CallsHtmlGeneratorWithExpectedValues()
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -310,7 +310,7 @@ public void BeginFormWithNoParameters_CallsHtmlGeneratorWithExpectedValues()
public void BeginFormWithMethodParameter_CallsHtmlGeneratorWithExpectedValues(FormMethod method)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -346,7 +346,7 @@ public void BeginFormWithMethodAndHtmlAttributesParameters_CallsHtmlGeneratorWit
object htmlAttributes)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -380,7 +380,7 @@ public void BeginFormWithMethodAndHtmlAttributesParameters_CallsHtmlGeneratorWit
public void BeginFormWithRouteValuesParameter_CallsHtmlGeneratorWithExpectedValues(object routeValues)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -416,7 +416,7 @@ public void BeginFormWithActionNameAndControllerNameParameters_CallsHtmlGenerato
string controllerName)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -453,7 +453,7 @@ public void BeginFormWithActionNameControllerNameAndRouteValuesParameters_CallsH
object routeValues)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -490,7 +490,7 @@ public void BeginFormWithActionNameControllerNameAndMethodParameters_CallsHtmlGe
FormMethod method)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -528,7 +528,7 @@ public void BeginFormWithActionNameContollerNameRouteValuesAndMethodParameters_C
FormMethod method)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -566,7 +566,7 @@ public void BeginFormWithActionNameContollerNameMethodAndHtmlAttributesParameter
object htmlAttributes)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -600,7 +600,7 @@ public void BeginFormWithActionNameContollerNameMethodAndHtmlAttributesParameter
public void BeginRouteFormWithRouteValuesParameter_CallsHtmlGeneratorWithExpectedValues(object routeValues)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -633,7 +633,7 @@ public void BeginRouteFormWithRouteValuesParameter_CallsHtmlGeneratorWithExpecte
public void BeginRouteFormWithRouteNameParameter_CallsHtmlGeneratorWithExpectedValues(string routeName)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -668,7 +668,7 @@ public void BeginRouteFormWithRouteNameAndRouteValuesParameters_CallsHtmlGenerat
object routeValues)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -703,7 +703,7 @@ public void BeginRouteFormWithRouteNameAndMethodParameters_CallsHtmlGeneratorWit
FormMethod method)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -739,7 +739,7 @@ public void BeginRouteFormWithRouteNameRouteValuesAndMethodParameters_CallsHtmlG
FormMethod method)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down Expand Up @@ -775,7 +775,7 @@ public void BeginRouteFormWithRouteNameMethodAndHtmlAttributesParameters_CallsHt
object htmlAttributes)
{
// Arrange
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new HtmlEncoder());
var tagBuilder = new TagBuilder(tagName: "form", htmlEncoder: new NullTestEncoder());
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(htmlGenerator.Object);
htmlGenerator
Expand Down
25 changes: 19 additions & 6 deletions test/Microsoft.AspNet.Mvc.Core.Test/Rendering/TagBuilderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

using System.Collections.Generic;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.Framework.WebEncoders;
using Microsoft.Framework.WebEncoders.Testing;
using Xunit;

namespace Microsoft.AspNet.Mvc.Core.Rendering
Expand All @@ -29,7 +29,7 @@ public static TheoryData<TagRenderMode, string> RenderingTestingData
public void MergeAttribute_IgnoresCase(bool replaceExisting, string expectedKey, string expectedValue)
{
// Arrange
var tagBuilder = new TagBuilder("p", new HtmlEncoder());
var tagBuilder = new TagBuilder("p", new NullTestEncoder());
tagBuilder.Attributes.Add("Hello", "World");

// Act
Expand All @@ -44,7 +44,7 @@ public void MergeAttribute_IgnoresCase(bool replaceExisting, string expectedKey,
public void AddCssClass_IgnoresCase()
{
// Arrange
var tagBuilder = new TagBuilder("p", new HtmlEncoder());
var tagBuilder = new TagBuilder("p", new NullTestEncoder());
tagBuilder.Attributes.Add("ClaSs", "btn");

// Act
Expand All @@ -59,7 +59,7 @@ public void AddCssClass_IgnoresCase()
public void GenerateId_IgnoresCase()
{
// Arrange
var tagBuilder = new TagBuilder("p", new HtmlEncoder());
var tagBuilder = new TagBuilder("p", new NullTestEncoder());
tagBuilder.Attributes.Add("ID", "something");

// Act
Expand All @@ -75,7 +75,7 @@ public void GenerateId_IgnoresCase()
public void ToString_IgnoresIdAttributeCase(TagRenderMode renderingMode, string expectedOutput)
{
// Arrange
var tagBuilder = new TagBuilder("p", new HtmlEncoder());
var tagBuilder = new TagBuilder("p", new NullTestEncoder());

// An empty value id attribute should not be rendered via ToString.
tagBuilder.Attributes.Add("ID", string.Empty);
Expand All @@ -92,7 +92,7 @@ public void ToString_IgnoresIdAttributeCase(TagRenderMode renderingMode, string
public void ToHtmlString_IgnoresIdAttributeCase(TagRenderMode renderingMode, string expectedOutput)
{
// Arrange
var tagBuilder = new TagBuilder("p", new HtmlEncoder());
var tagBuilder = new TagBuilder("p", new NullTestEncoder());

// An empty value id attribute should not be rendered via ToHtmlString.
tagBuilder.Attributes.Add("ID", string.Empty);
Expand All @@ -103,5 +103,18 @@ public void ToHtmlString_IgnoresIdAttributeCase(TagRenderMode renderingMode, str
// Assert
Assert.Equal(expectedOutput, value.ToString());
}

[Fact]
public void SetInnerText_HtmlEncodesValue()
{
// Arrange
var tagBuilder = new TagBuilder("p", new CommonTestEncoder());

// Act
tagBuilder.SetInnerText("TestValue");

// Assert
Assert.Equal("HtmlEncode[[TestValue]]", tagBuilder.InnerHtml);
}
}
}
1 change: 1 addition & 0 deletions test/Microsoft.AspNet.Mvc.Core.Test/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"Microsoft.AspNet.Mvc.Xml": "6.0.0-*",
"Microsoft.AspNet.Testing": "1.0.0-*",
"Microsoft.Framework.Logging.Testing": "1.0.0-*",
"Microsoft.Framework.WebEncoders.Testing": "1.0.0-*",
"Moq": "4.2.1312.1622",
"xunit.runner.aspnet": "2.0.0-aspnet-*"
},
Expand Down
10 changes: 5 additions & 5 deletions test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageActivatorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Routing;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.WebEncoders;
using Microsoft.Framework.WebEncoders.Testing;
using Moq;
using Xunit;

Expand All @@ -27,7 +27,7 @@ public void Activate_ActivatesAndContextualizesPropertiesOnViews()

var myService = new MyService();
var helper = Mock.Of<IHtmlHelper<object>>();
var htmlEncoder = new HtmlEncoder();
var htmlEncoder = new CommonTestEncoder();
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(p => p.GetService(typeof(MyService)))
.Returns(myService);
Expand Down Expand Up @@ -96,7 +96,7 @@ public void Activate_InstantiatesNewViewDataDictionaryType_IfTheTypeDoesNotMatch

var myService = new MyService();
var helper = Mock.Of<IHtmlHelper<object>>();
var htmlEncoder = new HtmlEncoder();
var htmlEncoder = new CommonTestEncoder();
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(p => p.GetService(typeof(MyService)))
.Returns(myService);
Expand Down Expand Up @@ -134,7 +134,7 @@ public void Activate_UsesPassedInViewDataDictionaryInstance_IfPassedInTypeMatche
var instance = new TestRazorPage();
var myService = new MyService();
var helper = Mock.Of<IHtmlHelper<object>>();
var htmlEncoder = new HtmlEncoder();
var htmlEncoder = new CommonTestEncoder();
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(p => p.GetService(typeof(MyService)))
.Returns(myService);
Expand Down Expand Up @@ -172,7 +172,7 @@ public void Activate_DeterminesModelTypeFromProperty()
var instance = new DoesNotDeriveFromRazorPageOfTButHasModelProperty();
var myService = new MyService();
var helper = Mock.Of<IHtmlHelper<object>>();
var htmlEncoder = new HtmlEncoder();
var htmlEncoder = new CommonTestEncoder();
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(p => p.GetService(typeof(MyService)))
.Returns(myService);
Expand Down
Loading

0 comments on commit 5da8ba7

Please sign in to comment.