Add tests for TagHelper order control.

- Tested runtime run execution order control.

#94
This commit is contained in:
N. Taylor Mullen 2015-01-26 12:06:09 -08:00 committed by NTaylorMullen
parent 53d60159f9
commit a0574fb9be
2 changed files with 107 additions and 2 deletions

View File

@ -1,8 +1,8 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using Xunit;
@ -10,6 +10,77 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
{
public class TagHelperRunnerTest
{
public static TheoryData TagHelperOrderData
{
get
{
// tagHelperOrders, expectedTagHelperOrders
return new TheoryData<int[], int[]>
{
{
new[] { 1000, int.MaxValue, 0 },
new[] { 0, 1000, int.MaxValue }
},
{
new[] { int.MaxValue, int.MaxValue, int.MinValue },
new[] { int.MinValue, int.MaxValue, int.MaxValue }
},
{
new[] { 0, 0, int.MinValue },
new[] { int.MinValue, 0, 0 }
},
{
new[] { int.MinValue, -1000, 0 },
new[] { int.MinValue, -1000, 0 }
},
{
new[] { 0, 1000, int.MaxValue },
new[] { 0, 1000, int.MaxValue }
},
{
new[] { int.MaxValue, int.MinValue, int.MaxValue, -1000, int.MaxValue, 0 },
new[] { int.MinValue, -1000, 0, int.MaxValue, int.MaxValue, int.MaxValue }
},
{
new[] { 0, 0, 0, 0 },
new[] { 0, 0, 0, 0 }
},
{
new[] { 1000, int.MaxValue, 0, -1000, int.MinValue },
new[] { int.MinValue, -1000, 0, 1000, int.MaxValue }
},
};
}
}
[Theory]
[MemberData(nameof(TagHelperOrderData))]
public async Task RunAsync_OrdersTagHelpers(
int[] tagHelperOrders,
int[] expectedTagHelperOrders)
{
// Arrange
var runner = new TagHelperRunner();
var executionContext = new TagHelperExecutionContext("p");
var processOrder = new List<int>();
foreach (var order in tagHelperOrders)
{
var orderedTagHelper = new OrderedTagHelper(order)
{
ProcessOrderTracker = processOrder
};
executionContext.Add(orderedTagHelper);
}
// Act
await runner.RunAsync(executionContext);
// Assert
Assert.Equal(expectedTagHelperOrders, processOrder);
}
[Fact]
public async Task RunAsync_ProcessesAllTagHelpers()
{
@ -88,5 +159,25 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
output.Attributes["foo"] = context.AllAttributes["foo"].ToString();
}
}
private class OrderedTagHelper : TagHelper
{
public OrderedTagHelper(int order)
{
Order = order;
}
public override int Order { get; }
public IList<int> ProcessOrderTracker { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
// If using this class for testing, ensure that ProcessOrderTracker is always set prior to Process
// execution.
Debug.Assert(ProcessOrderTracker != null);
ProcessOrderTracker.Add(Order);
}
}
}
}

View File

@ -129,6 +129,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
public class Invalid_NestedPublicTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -137,6 +139,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
internal class Invalid_NestedInternalTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -145,6 +149,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
private class Invalid_PrivateTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -153,6 +159,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
protected class Invalid_ProtectedTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -164,6 +172,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
// In this case they do not fulfill other TagHelper requirements.
public abstract class Invalid_AbstractTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -172,6 +182,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
public class Invalid_GenericTagHelper<T> : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);
@ -180,6 +192,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
internal class Invalid_InternalTagHelper : ITagHelper
{
public int Order { get { return 0; } }
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
return Task.FromResult(result: true);