a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
169 lines
5.3 KiB
C#
169 lines
5.3 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System.Web.Razor.Tokenizer;
|
|
using System.Web.Razor.Tokenizer.Symbols;
|
|
using Xunit;
|
|
using Assert = Microsoft.TestCommon.AssertEx;
|
|
|
|
namespace System.Web.Razor.Test.Tokenizer
|
|
{
|
|
public class HtmlTokenizerTest : HtmlTokenizerTestBase
|
|
{
|
|
[Fact]
|
|
public void Constructor_Throws_ArgNull_If_Null_Source_Provided()
|
|
{
|
|
Assert.ThrowsArgumentNull(() => new HtmlTokenizer(null), "source");
|
|
}
|
|
|
|
[Fact]
|
|
public void Next_Returns_Null_When_EOF_Reached()
|
|
{
|
|
TestTokenizer("");
|
|
}
|
|
|
|
[Fact]
|
|
public void Text_Is_Recognized()
|
|
{
|
|
TestTokenizer("foo-9309&smlkmb;::-3029022,.sdkq92384",
|
|
new HtmlSymbol(0, 0, 0, "foo-9309&smlkmb;::-3029022,.sdkq92384", HtmlSymbolType.Text));
|
|
}
|
|
|
|
[Fact]
|
|
public void Whitespace_Is_Recognized()
|
|
{
|
|
TestTokenizer(" \t\f ",
|
|
new HtmlSymbol(0, 0, 0, " \t\f ", HtmlSymbolType.WhiteSpace));
|
|
}
|
|
|
|
[Fact]
|
|
public void Newline_Is_Recognized()
|
|
{
|
|
TestTokenizer("\n\r\r\n",
|
|
new HtmlSymbol(0, 0, 0, "\n", HtmlSymbolType.NewLine),
|
|
new HtmlSymbol(1, 1, 0, "\r", HtmlSymbolType.NewLine),
|
|
new HtmlSymbol(2, 2, 0, "\r\n", HtmlSymbolType.NewLine));
|
|
}
|
|
|
|
[Fact]
|
|
public void Transition_Is_Not_Recognized_Mid_Text_If_Surrounded_By_Alphanumeric_Characters()
|
|
{
|
|
TestSingleToken("foo@bar", HtmlSymbolType.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void OpenAngle_Is_Recognized()
|
|
{
|
|
TestSingleToken("<", HtmlSymbolType.OpenAngle);
|
|
}
|
|
|
|
[Fact]
|
|
public void Bang_Is_Recognized()
|
|
{
|
|
TestSingleToken("!", HtmlSymbolType.Bang);
|
|
}
|
|
|
|
[Fact]
|
|
public void Solidus_Is_Recognized()
|
|
{
|
|
TestSingleToken("/", HtmlSymbolType.Solidus);
|
|
}
|
|
|
|
[Fact]
|
|
public void QuestionMark_Is_Recognized()
|
|
{
|
|
TestSingleToken("?", HtmlSymbolType.QuestionMark);
|
|
}
|
|
|
|
[Fact]
|
|
public void LeftBracket_Is_Recognized()
|
|
{
|
|
TestSingleToken("[", HtmlSymbolType.LeftBracket);
|
|
}
|
|
|
|
[Fact]
|
|
public void CloseAngle_Is_Recognized()
|
|
{
|
|
TestSingleToken(">", HtmlSymbolType.CloseAngle);
|
|
}
|
|
|
|
[Fact]
|
|
public void RightBracket_Is_Recognized()
|
|
{
|
|
TestSingleToken("]", HtmlSymbolType.RightBracket);
|
|
}
|
|
|
|
[Fact]
|
|
public void Equals_Is_Recognized()
|
|
{
|
|
TestSingleToken("=", HtmlSymbolType.Equals);
|
|
}
|
|
|
|
[Fact]
|
|
public void DoubleQuote_Is_Recognized()
|
|
{
|
|
TestSingleToken("\"", HtmlSymbolType.DoubleQuote);
|
|
}
|
|
|
|
[Fact]
|
|
public void SingleQuote_Is_Recognized()
|
|
{
|
|
TestSingleToken("'", HtmlSymbolType.SingleQuote);
|
|
}
|
|
|
|
[Fact]
|
|
public void Transition_Is_Recognized()
|
|
{
|
|
TestSingleToken("@", HtmlSymbolType.Transition);
|
|
}
|
|
|
|
[Fact]
|
|
public void DoubleHyphen_Is_Recognized()
|
|
{
|
|
TestSingleToken("--", HtmlSymbolType.DoubleHyphen);
|
|
}
|
|
|
|
[Fact]
|
|
public void SingleHyphen_Is_Not_Recognized()
|
|
{
|
|
TestSingleToken("-", HtmlSymbolType.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void SingleHyphen_Mid_Text_Is_Not_Recognized_As_Separate_Token()
|
|
{
|
|
TestSingleToken("foo-bar", HtmlSymbolType.Text);
|
|
}
|
|
|
|
[Fact]
|
|
public void Next_Ignores_Star_At_EOF_In_RazorComment()
|
|
{
|
|
TestTokenizer("@* Foo * Bar * Baz *",
|
|
new HtmlSymbol(0, 0, 0, "@", HtmlSymbolType.RazorCommentTransition),
|
|
new HtmlSymbol(1, 0, 1, "*", HtmlSymbolType.RazorCommentStar),
|
|
new HtmlSymbol(2, 0, 2, " Foo * Bar * Baz *", HtmlSymbolType.RazorComment));
|
|
}
|
|
|
|
[Fact]
|
|
public void Next_Ignores_Star_Without_Trailing_At()
|
|
{
|
|
TestTokenizer("@* Foo * Bar * Baz *@",
|
|
new HtmlSymbol(0, 0, 0, "@", HtmlSymbolType.RazorCommentTransition),
|
|
new HtmlSymbol(1, 0, 1, "*", HtmlSymbolType.RazorCommentStar),
|
|
new HtmlSymbol(2, 0, 2, " Foo * Bar * Baz ", HtmlSymbolType.RazorComment),
|
|
new HtmlSymbol(19, 0, 19, "*", HtmlSymbolType.RazorCommentStar),
|
|
new HtmlSymbol(20, 0, 20, "@", HtmlSymbolType.RazorCommentTransition));
|
|
}
|
|
|
|
[Fact]
|
|
public void Next_Returns_RazorComment_Token_For_Entire_Razor_Comment()
|
|
{
|
|
TestTokenizer("@* Foo Bar Baz *@",
|
|
new HtmlSymbol(0, 0, 0, "@", HtmlSymbolType.RazorCommentTransition),
|
|
new HtmlSymbol(1, 0, 1, "*", HtmlSymbolType.RazorCommentStar),
|
|
new HtmlSymbol(2, 0, 2, " Foo Bar Baz ", HtmlSymbolType.RazorComment),
|
|
new HtmlSymbol(15, 0, 15, "*", HtmlSymbolType.RazorCommentStar),
|
|
new HtmlSymbol(16, 0, 16, "@", HtmlSymbolType.RazorCommentTransition));
|
|
}
|
|
}
|
|
}
|