Add tests for TagHelper order control.
- Tested runtime run execution order control. #94
This commit is contained in:
parent
53d60159f9
commit
a0574fb9be
|
|
@ -1,8 +1,8 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System.IO;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Diagnostics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -10,6 +10,77 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
{
|
{
|
||||||
public class TagHelperRunnerTest
|
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]
|
[Fact]
|
||||||
public async Task RunAsync_ProcessesAllTagHelpers()
|
public async Task RunAsync_ProcessesAllTagHelpers()
|
||||||
{
|
{
|
||||||
|
|
@ -88,5 +159,25 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
output.Attributes["foo"] = context.AllAttributes["foo"].ToString();
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -129,6 +129,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
public class Invalid_NestedPublicTagHelper : ITagHelper
|
public class Invalid_NestedPublicTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
@ -137,6 +139,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
internal class Invalid_NestedInternalTagHelper : ITagHelper
|
internal class Invalid_NestedInternalTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
@ -145,6 +149,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
private class Invalid_PrivateTagHelper : ITagHelper
|
private class Invalid_PrivateTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
@ -153,6 +159,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
protected class Invalid_ProtectedTagHelper : ITagHelper
|
protected class Invalid_ProtectedTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
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.
|
// In this case they do not fulfill other TagHelper requirements.
|
||||||
public abstract class Invalid_AbstractTagHelper : ITagHelper
|
public abstract class Invalid_AbstractTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
@ -172,6 +182,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
public class Invalid_GenericTagHelper<T> : ITagHelper
|
public class Invalid_GenericTagHelper<T> : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
@ -180,6 +192,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
|
|
||||||
internal class Invalid_InternalTagHelper : ITagHelper
|
internal class Invalid_InternalTagHelper : ITagHelper
|
||||||
{
|
{
|
||||||
|
public int Order { get { return 0; } }
|
||||||
|
|
||||||
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
public Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
|
||||||
{
|
{
|
||||||
return Task.FromResult(result: true);
|
return Task.FromResult(result: true);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue