|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language.Legacy;
public class HtmlAttributeTest() : ParserTestBase(layer: TestProject.Layer.Compiler, validateSpanEditHandlers: true, useLegacyTokenizer: true)
{
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace1()
{
var attributeName = "[item]";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace2()
{
var attributeName = "[(item,";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace3()
{
var attributeName = "(click)";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace4()
{
var attributeName = "(^click)";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace5()
{
var attributeName = "*something";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_BeforeEqualWhitespace6()
{
var attributeName = "#local";
ParseDocumentTest($$"""
@{<a {{attributeName}}
='Foo' {{attributeName}}=
'Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace1()
{
var attributeName = "[item]";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace2()
{
var attributeName = "[(item,";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace3()
{
var attributeName = "(click)";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace4()
{
var attributeName = "(^click)";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace5()
{
var attributeName = "*something";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes_Whitespace6()
{
var attributeName = "#local";
ParseDocumentTest($$"""
@{<a
{{attributeName}}='Foo'
{{attributeName}}='Bar' />}
""");
}
[Fact]
public void SymbolBoundAttributes1()
{
var attributeName = "[item]";
ParseDocumentTest($$"""
@{<a {{attributeName}}='Foo' />}
""");
}
[Fact]
public void SymbolBoundAttributes2()
{
var attributeName = "[(item,";
ParseDocumentTest($$"""@{<a {{attributeName}}='Foo' />}""");
}
[Fact]
public void SymbolBoundAttributes3()
{
var attributeName = "(click)";
ParseDocumentTest($$"""@{<a {{attributeName}}='Foo' />}""");
}
[Fact]
public void SymbolBoundAttributes4()
{
var attributeName = "(^click)";
ParseDocumentTest($$"""@{<a {{attributeName}}='Foo' />}""");
}
[Fact]
public void SymbolBoundAttributes5()
{
var attributeName = "*something";
ParseDocumentTest($$"""@{<a {{attributeName}}='Foo' />}""");
}
[Fact]
public void SymbolBoundAttributes6()
{
var attributeName = "#local";
ParseDocumentTest($$"""
@{<a {{attributeName}}='Foo' />}
""");
}
[Fact]
public void SimpleLiteralAttribute()
{
ParseDocumentTest("@{<a href='Foo' />}");
}
[Fact]
public void SimpleLiteralAttributeWithWhitespaceSurroundingEquals()
{
ParseDocumentTest("@{<a href \f\r\n= \t\n'Foo' />}");
}
[Fact]
public void DynamicAttributeWithWhitespaceSurroundingEquals()
{
ParseDocumentTest("@{<a href \n= \r\n'@Foo' />}");
}
[Fact]
public void MultiPartLiteralAttribute()
{
ParseDocumentTest("@{<a href='Foo Bar Baz' />}");
}
[Fact]
public void DoubleQuotedLiteralAttribute()
{
ParseDocumentTest("@{<a href=\"Foo Bar Baz\" />}");
}
[Fact]
public void NewLinePrecedingAttribute()
{
ParseDocumentTest("@{<a\r\nhref='Foo' />}");
}
[Fact]
public void NewLineBetweenAttributes()
{
ParseDocumentTest("@{<a\nhref='Foo'\r\nabcd='Bar' />}");
}
[Fact]
public void WhitespaceAndNewLinePrecedingAttribute()
{
ParseDocumentTest("@{<a \t\r\nhref='Foo' />}");
}
[Fact]
public void UnquotedLiteralAttribute()
{
ParseDocumentTest("@{<a href=Foo Bar Baz />}");
}
[Fact]
public void SimpleExpressionAttribute()
{
ParseDocumentTest("@{<a href='@foo' />}");
}
[Fact]
public void MultiValueExpressionAttribute()
{
ParseDocumentTest("@{<a href='@foo bar @baz' />}");
}
[Fact]
public void VirtualPathAttributesWorkWithConditionalAttributes()
{
ParseDocumentTest("@{<a href='@foo ~/Foo/Bar' />}");
}
[Fact]
public void UnquotedAttributeWithCodeWithSpacesInBlock()
{
ParseDocumentTest("@{<input value=@foo />}");
}
[Fact]
public void UnquotedAttributeWithCodeWithSpacesInDocument()
{
ParseDocumentTest("<input value=@foo />}");
}
[Fact]
public void ConditionalAttributesAreEnabledForDataAttributesWithExperimentalFlag()
{
ParseDocumentTest(RazorLanguageVersion.Experimental, "@{<span data-foo='@foo'></span>}", directives: default, designTime: false);
}
[Fact]
public void ConditionalAttributesAreDisabledForDataAttributesInBlock()
{
ParseDocumentTest("@{<span data-foo='@foo'></span>}");
}
[Fact]
public void ConditionalAttributesWithWeirdSpacingAreDisabledForDataAttributesInBlock()
{
ParseDocumentTest("@{<span data-foo = '@foo'></span>}");
}
[Fact]
public void ConditionalAttributesAreDisabledForDataAttributesInDocument()
{
ParseDocumentTest("@{<span data-foo='@foo'></span>}");
}
[Fact]
public void ConditionalAttributesWithWeirdSpacingAreDisabledForDataAttributesInDocument()
{
ParseDocumentTest("@{<span data-foo=@foo ></span>}");
}
[Fact]
public void ComponentFileKind_ParsesDirectiveAttributesAsMarkup()
{
ParseDocumentTest("<span @class='@foo'></span>", RazorFileKind.Component);
}
[Fact]
public void ComponentFileKind_ParsesDirectiveAttributesWithParameterAsMarkup()
{
ParseDocumentTest("<span @class:param='@foo'></span>", RazorFileKind.Component);
}
}
|