From 2abbff5b3b8bea159fcb26ffc2e4efd0931faa66 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Fri, 9 Aug 2019 13:50:13 -0700 Subject: [PATCH] Don't coalesce as non-HTML - we don't want it to be coalesced so that we can support setting "selected" attribute on it. + // We only care about option tags that are nested under a select tag. + foreach (var ancestor in Ancestors) + { + if (ancestor is MarkupElementIntermediateNode element && + string.Equals("select", element.TagName, StringComparison.OrdinalIgnoreCase)) + { + _foundNonHtml = true; + break; + } + } + } base.VisitDefault(node); diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Components/ComponentMarkupBlockPassTest.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Components/ComponentMarkupBlockPassTest.cs index 75c32a7878..ca9885009a 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Components/ComponentMarkupBlockPassTest.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/test/Components/ComponentMarkupBlockPassTest.cs @@ -306,6 +306,65 @@ namespace Microsoft.AspNetCore.Razor.Language.Components Assert.Empty(documentNode.FindDescendantNodes()); } + [Fact] + public void Execute_CannotRewriteHtml_SelectOption() + { + // Arrange + var document = CreateDocument(@" + + @if (some_bool) + { + + + + } +"); + + var documentNode = Lower(document); + + // Act + Pass.Execute(document, documentNode); + + // Assert + Assert.Empty(documentNode.FindDescendantNodes()); + } + + [Fact] + public void Execute_CanRewriteHtml_OptionWithNoSelectAncestor() + { + // Arrange + var document = CreateDocument(@" + + @if (some_bool) + { + + + + + } +"); + + var expected = NormalizeContent(@" + + + + +"); + + var documentNode = Lower(document); + + // Act + Pass.Execute(document, documentNode); + + // Assert + var block = documentNode.FindDescendantNodes().Single(); + Assert.Equal(expected, block.Content, ignoreLineEndingDifferences: true); + } + // The unclosed tag will have errors, so we won't rewrite it or its parent. [Fact] public void Execute_CannotRewriteHtml_Errors()