From d080dc8f717ad4d0d9319c60eb3f7b9c1044786f Mon Sep 17 00:00:00 2001 From: NTaylorMullen Date: Thu, 25 Sep 2014 01:34:35 -0700 Subject: [PATCH] Test TagHelperScopeManager functionality. #155 --- ...st.cs => TagHelperExecutionContextTest.cs} | 12 +-- .../TagHelpers/TagHelperRunnerTest.cs | 8 +- .../TagHelpers/TagHelperScopeManagerTest.cs | 91 +++++++++++++++++++ 3 files changed, 101 insertions(+), 10 deletions(-) rename test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/{TagHelpersExecutionContextTest.cs => TagHelperExecutionContextTest.cs} (85%) create mode 100644 test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelpersExecutionContextTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperExecutionContextTest.cs similarity index 85% rename from test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelpersExecutionContextTest.cs rename to test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperExecutionContextTest.cs index 75f8ff38f5..54fe598719 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelpersExecutionContextTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperExecutionContextTest.cs @@ -7,13 +7,13 @@ using Xunit; namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { - public class TagHelpersExecutionContextTest + public class TagHelperExecutionContextTest { [Fact] public void AddHtmlAttribute_MaintainsHTMLAttributes() { // Arrange - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var expectedAttributes = new Dictionary { { "class", "btn" }, @@ -29,10 +29,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers } [Fact] - public void TagHelpersExecutionContext_MaintainsAllAttributes() + public void TagHelperExecutionContext_MaintainsAllAttributes() { // Arrange - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var expectedAttributes = new Dictionary { { "class", "btn" }, @@ -53,7 +53,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public void Add_MaintainsTagHelpers() { // Arrange - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var tagHelper = new PTagHelper(); // Act @@ -68,7 +68,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers public void Add_MaintainsMultipleTagHelpers() { // Arrange - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var tagHelper1 = new PTagHelper(); var tagHelper2 = new PTagHelper(); diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs index f7ce46ee9b..7e09f88404 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperRunnerTest.cs @@ -15,7 +15,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var runner = new TagHelperRunner(); - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var executableTagHelper1 = new ExecutableTagHelper(); var executableTagHelper2 = new ExecutableTagHelper(); @@ -34,7 +34,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var runner = new TagHelperRunner(); - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var executableTagHelper = new ExecutableTagHelper(); // Act @@ -54,7 +54,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var runner = new TagHelperRunner(); - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var tagHelper = new TagHelperContextTouchingTagHelper(); // Act @@ -71,7 +71,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { // Arrange var runner = new TagHelperRunner(); - var executionContext = new TagHelpersExecutionContext("p"); + var executionContext = new TagHelperExecutionContext("p"); var tagHelper = new ExecutableTagHelper(); var contentWriter = new StringWriter(new StringBuilder("Hello World")); diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs new file mode 100644 index 0000000000..7697f52b72 --- /dev/null +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperScopeManagerTest.cs @@ -0,0 +1,91 @@ +// 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; +using Microsoft.AspNet.Razor.Runtime.TagHelpers; +using Xunit; + +namespace Microsoft.AspNet.Razor.Runtime.Test.TagHelpers +{ + public class TagHelperScopeManagerTest + { + [Fact] + public void Begin_CreatesContextWithAppropriateTagName() + { + // Arrange + var scopeManager = new TagHelperScopeManager(); + + // Act + var executionContext = scopeManager.Begin("p"); + + // Assert + Assert.Equal("p", executionContext.TagName); + } + + [Fact] + public void Begin_CanNest() + { + // Arrange + var scopeManager = new TagHelperScopeManager(); + + // Act + var executionContext = scopeManager.Begin("p"); + executionContext = scopeManager.Begin("div"); + + // Assert + Assert.Equal("div", executionContext.TagName); + } + + [Fact] + public void End_ReturnsParentExecutionContext() + { + // Arrange + var scopeManager = new TagHelperScopeManager(); + + // Act + var executionContext = scopeManager.Begin("p"); + executionContext = scopeManager.Begin("div"); + executionContext = scopeManager.End(); + + // Assert + Assert.Equal("p", executionContext.TagName); + } + + [Fact] + public void End_ReturnsNullIfNoNestedContext() + { + // Arrange + var scopeManager = new TagHelperScopeManager(); + + // Act + var executionContext = scopeManager.Begin("p"); + executionContext = scopeManager.Begin("div"); + executionContext = scopeManager.End(); + executionContext = scopeManager.End(); + + // Assert + Assert.Null(executionContext); + } + + [Fact] + public void End_ThrowsIfNoScope() + { + // Arrange + var scopeManager = new TagHelperScopeManager(); + var expectedError = string.Format( + "Must call '{2}.{1}' before calling '{2}.{0}'.", + nameof(TagHelperScopeManager.End), + nameof(TagHelperScopeManager.Begin), + nameof(TagHelperScopeManager)); + + // Act & Assert + var ex = Assert.Throws(() => + { + scopeManager.End(); + }); + + Assert.Equal(expectedError, ex.Message); + + } + } +} \ No newline at end of file