From cdea6fd3fb6bbb90266b34ab952f44b1a33df782 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Tue, 17 May 2016 15:24:35 -0700 Subject: [PATCH] Fix TagHelper directive tests to fail when expected. - Prior to this change the equals bits were falling back to the type comparison that `ChunkGenerator` exposes. --- .gitignore | 3 ++- .../Generators/AddTagHelperChunkGenerator.cs | 20 +++++++++++++++++++ .../RemoveTagHelperChunkGenerator.cs | 20 +++++++++++++++++++ .../TagHelperPrefixDirectiveChunkGenerator.cs | 20 +++++++++++++++++++ .../Parser/CSharp/CSharpDirectivesTest.cs | 14 ++++++------- 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 2e4b2d6b5d..5ce31f8898 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ project.lock.json *.ncrunchsolution *.*sdf *.ipch -.build/ \ No newline at end of file +.build/ +.vs/ \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/AddTagHelperChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/AddTagHelperChunkGenerator.cs index eaa37af67b..463e4424e0 100644 --- a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/AddTagHelperChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/AddTagHelperChunkGenerator.cs @@ -1,7 +1,9 @@ // 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; using Microsoft.AspNetCore.Razor.Parser.SyntaxTree; +using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Razor.Chunks.Generators { @@ -35,5 +37,23 @@ namespace Microsoft.AspNetCore.Razor.Chunks.Generators { context.ChunkTreeBuilder.AddAddTagHelperChunk(_lookupText, target); } + + /// + public override bool Equals(object obj) + { + var other = obj as AddTagHelperChunkGenerator; + return base.Equals(other) && + string.Equals(_lookupText, other._lookupText, StringComparison.Ordinal); + } + + /// + public override int GetHashCode() + { + var combiner = HashCodeCombiner.Start(); + combiner.Add(base.GetHashCode()); + combiner.Add(_lookupText, StringComparer.Ordinal); + + return combiner.CombinedHash; + } } } diff --git a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/RemoveTagHelperChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/RemoveTagHelperChunkGenerator.cs index 3817d32dcd..c41dcd95e9 100644 --- a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/RemoveTagHelperChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/RemoveTagHelperChunkGenerator.cs @@ -1,7 +1,9 @@ // 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; using Microsoft.AspNetCore.Razor.Parser.SyntaxTree; +using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Razor.Chunks.Generators { @@ -35,5 +37,23 @@ namespace Microsoft.AspNetCore.Razor.Chunks.Generators { context.ChunkTreeBuilder.AddRemoveTagHelperChunk(_lookupText, target); } + + /// + public override bool Equals(object obj) + { + var other = obj as RemoveTagHelperChunkGenerator; + return base.Equals(other) && + string.Equals(_lookupText, other._lookupText, StringComparison.Ordinal); + } + + /// + public override int GetHashCode() + { + var combiner = HashCodeCombiner.Start(); + combiner.Add(base.GetHashCode()); + combiner.Add(_lookupText, StringComparer.Ordinal); + + return combiner.CombinedHash; + } } } \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/TagHelperPrefixDirectiveChunkGenerator.cs b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/TagHelperPrefixDirectiveChunkGenerator.cs index ff1faeaf61..ab59b1827d 100644 --- a/src/Microsoft.AspNetCore.Razor/Chunks/Generators/TagHelperPrefixDirectiveChunkGenerator.cs +++ b/src/Microsoft.AspNetCore.Razor/Chunks/Generators/TagHelperPrefixDirectiveChunkGenerator.cs @@ -1,7 +1,9 @@ // 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; using Microsoft.AspNetCore.Razor.Parser.SyntaxTree; +using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Razor.Chunks.Generators { @@ -36,5 +38,23 @@ namespace Microsoft.AspNetCore.Razor.Chunks.Generators { context.ChunkTreeBuilder.AddTagHelperPrefixDirectiveChunk(_prefix, target); } + + /// + public override bool Equals(object obj) + { + var other = obj as TagHelperPrefixDirectiveChunkGenerator; + return base.Equals(other) && + string.Equals(_prefix, other._prefix, StringComparison.Ordinal); + } + + /// + public override int GetHashCode() + { + var combiner = HashCodeCombiner.Start(); + combiner.Add(base.GetHashCode()); + combiner.Add(_prefix, StringComparer.Ordinal); + + return combiner.CombinedHash; + } } } \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpDirectivesTest.cs b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpDirectivesTest.cs index 16d7efb73d..58d7349c33 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpDirectivesTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpDirectivesTest.cs @@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("\"Foo") - .AsTagHelperPrefixDirective("Foo")), + .AsTagHelperPrefixDirective("\"Foo")), new RazorError( RazorResources.ParseError_Unterminated_String_Literal, absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1), @@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("Foo \"") - .AsTagHelperPrefixDirective("Foo")), + .AsTagHelperPrefixDirective("Foo \"")), new RazorError( RazorResources.ParseError_Unterminated_String_Literal, absoluteIndex: 23, lineIndex: 0, columnIndex: 23, length: 1), @@ -183,7 +183,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("\"Foo") - .AsRemoveTagHelper("Foo")), + .AsRemoveTagHelper("\"Foo")), new RazorError( RazorResources.ParseError_Unterminated_String_Literal, absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1), @@ -202,7 +202,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("Foo\"") - .AsRemoveTagHelper("Foo") + .AsRemoveTagHelper("Foo\"") .Accepts(AcceptedCharacters.AnyExceptNewline)), new RazorError( RazorResources.ParseError_Unterminated_String_Literal, @@ -258,7 +258,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("Foo, Bar ") - .AsAddTagHelper("Foo, Bar"))); + .AsAddTagHelper("Foo, Bar"))); } [Fact] @@ -286,7 +286,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("\"Foo") - .AsAddTagHelper("Foo")), + .AsAddTagHelper("\"Foo")), new RazorError( RazorResources.ParseError_Unterminated_String_Literal, absoluteIndex: 14, lineIndex: 0, columnIndex: 14, length: 1), @@ -305,7 +305,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword + " ") .Accepts(AcceptedCharacters.None), Factory.Code("Foo\"") - .AsAddTagHelper("Foo") + .AsAddTagHelper("Foo\"") .Accepts(AcceptedCharacters.AnyExceptNewline)), new RazorError( RazorResources.ParseError_Unterminated_String_Literal,