a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
170 lines
7.2 KiB
C#
170 lines
7.2 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
||
|
||
using System.Web.Razor.Tokenizer.Symbols;
|
||
using Xunit;
|
||
|
||
namespace System.Web.Razor.Test.Tokenizer
|
||
{
|
||
public class CSharpTokenizerIdentifierTest : CSharpTokenizerTestBase
|
||
{
|
||
[Fact]
|
||
public void Simple_Identifier_Is_Recognized()
|
||
{
|
||
TestTokenizer("foo", new CSharpSymbol(0, 0, 0, "foo", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Starting_With_Underscore_Is_Recognized()
|
||
{
|
||
TestTokenizer("_foo", new CSharpSymbol(0, 0, 0, "_foo", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Digits()
|
||
{
|
||
TestTokenizer("foo4", new CSharpSymbol(0, 0, 0, "foo4", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Start_With_Titlecase_Letter()
|
||
{
|
||
TestTokenizer("ῼfoo", new CSharpSymbol(0, 0, 0, "ῼfoo", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Start_With_Letter_Modifier()
|
||
{
|
||
TestTokenizer("ᵊfoo", new CSharpSymbol(0, 0, 0, "ᵊfoo", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Start_With_Other_Letter()
|
||
{
|
||
TestTokenizer("ƻfoo", new CSharpSymbol(0, 0, 0, "ƻfoo", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Start_With_Number_Letter()
|
||
{
|
||
TestTokenizer("Ⅽool", new CSharpSymbol(0, 0, 0, "Ⅽool", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Non_Spacing_Mark()
|
||
{
|
||
TestTokenizer("foo\u0300", new CSharpSymbol(0, 0, 0, "foo\u0300", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Spacing_Combining_Mark()
|
||
{
|
||
TestTokenizer("fooः", new CSharpSymbol(0, 0, 0, "fooः", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Non_English_Digit()
|
||
{
|
||
TestTokenizer("foo١", new CSharpSymbol(0, 0, 0, "foo١", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Connector_Punctuation()
|
||
{
|
||
TestTokenizer("foo‿bar", new CSharpSymbol(0, 0, 0, "foo‿bar", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Identifier_Can_Contain_Format_Character()
|
||
{
|
||
TestTokenizer("foobar", new CSharpSymbol(0, 0, 0, "foobar", CSharpSymbolType.Identifier));
|
||
}
|
||
|
||
[Fact]
|
||
public void Keywords_Are_Recognized_As_Keyword_Tokens()
|
||
{
|
||
TestKeyword("abstract", CSharpKeyword.Abstract);
|
||
TestKeyword("byte", CSharpKeyword.Byte);
|
||
TestKeyword("class", CSharpKeyword.Class);
|
||
TestKeyword("delegate", CSharpKeyword.Delegate);
|
||
TestKeyword("event", CSharpKeyword.Event);
|
||
TestKeyword("fixed", CSharpKeyword.Fixed);
|
||
TestKeyword("if", CSharpKeyword.If);
|
||
TestKeyword("internal", CSharpKeyword.Internal);
|
||
TestKeyword("new", CSharpKeyword.New);
|
||
TestKeyword("override", CSharpKeyword.Override);
|
||
TestKeyword("readonly", CSharpKeyword.Readonly);
|
||
TestKeyword("short", CSharpKeyword.Short);
|
||
TestKeyword("struct", CSharpKeyword.Struct);
|
||
TestKeyword("try", CSharpKeyword.Try);
|
||
TestKeyword("unsafe", CSharpKeyword.Unsafe);
|
||
TestKeyword("volatile", CSharpKeyword.Volatile);
|
||
TestKeyword("as", CSharpKeyword.As);
|
||
TestKeyword("do", CSharpKeyword.Do);
|
||
TestKeyword("is", CSharpKeyword.Is);
|
||
TestKeyword("params", CSharpKeyword.Params);
|
||
TestKeyword("ref", CSharpKeyword.Ref);
|
||
TestKeyword("switch", CSharpKeyword.Switch);
|
||
TestKeyword("ushort", CSharpKeyword.Ushort);
|
||
TestKeyword("while", CSharpKeyword.While);
|
||
TestKeyword("case", CSharpKeyword.Case);
|
||
TestKeyword("const", CSharpKeyword.Const);
|
||
TestKeyword("explicit", CSharpKeyword.Explicit);
|
||
TestKeyword("float", CSharpKeyword.Float);
|
||
TestKeyword("null", CSharpKeyword.Null);
|
||
TestKeyword("sizeof", CSharpKeyword.Sizeof);
|
||
TestKeyword("typeof", CSharpKeyword.Typeof);
|
||
TestKeyword("implicit", CSharpKeyword.Implicit);
|
||
TestKeyword("private", CSharpKeyword.Private);
|
||
TestKeyword("this", CSharpKeyword.This);
|
||
TestKeyword("using", CSharpKeyword.Using);
|
||
TestKeyword("extern", CSharpKeyword.Extern);
|
||
TestKeyword("return", CSharpKeyword.Return);
|
||
TestKeyword("stackalloc", CSharpKeyword.Stackalloc);
|
||
TestKeyword("uint", CSharpKeyword.Uint);
|
||
TestKeyword("base", CSharpKeyword.Base);
|
||
TestKeyword("catch", CSharpKeyword.Catch);
|
||
TestKeyword("continue", CSharpKeyword.Continue);
|
||
TestKeyword("double", CSharpKeyword.Double);
|
||
TestKeyword("for", CSharpKeyword.For);
|
||
TestKeyword("in", CSharpKeyword.In);
|
||
TestKeyword("lock", CSharpKeyword.Lock);
|
||
TestKeyword("object", CSharpKeyword.Object);
|
||
TestKeyword("protected", CSharpKeyword.Protected);
|
||
TestKeyword("static", CSharpKeyword.Static);
|
||
TestKeyword("false", CSharpKeyword.False);
|
||
TestKeyword("public", CSharpKeyword.Public);
|
||
TestKeyword("sbyte", CSharpKeyword.Sbyte);
|
||
TestKeyword("throw", CSharpKeyword.Throw);
|
||
TestKeyword("virtual", CSharpKeyword.Virtual);
|
||
TestKeyword("decimal", CSharpKeyword.Decimal);
|
||
TestKeyword("else", CSharpKeyword.Else);
|
||
TestKeyword("operator", CSharpKeyword.Operator);
|
||
TestKeyword("string", CSharpKeyword.String);
|
||
TestKeyword("ulong", CSharpKeyword.Ulong);
|
||
TestKeyword("bool", CSharpKeyword.Bool);
|
||
TestKeyword("char", CSharpKeyword.Char);
|
||
TestKeyword("default", CSharpKeyword.Default);
|
||
TestKeyword("foreach", CSharpKeyword.Foreach);
|
||
TestKeyword("long", CSharpKeyword.Long);
|
||
TestKeyword("void", CSharpKeyword.Void);
|
||
TestKeyword("enum", CSharpKeyword.Enum);
|
||
TestKeyword("finally", CSharpKeyword.Finally);
|
||
TestKeyword("int", CSharpKeyword.Int);
|
||
TestKeyword("out", CSharpKeyword.Out);
|
||
TestKeyword("sealed", CSharpKeyword.Sealed);
|
||
TestKeyword("true", CSharpKeyword.True);
|
||
TestKeyword("goto", CSharpKeyword.Goto);
|
||
TestKeyword("unchecked", CSharpKeyword.Unchecked);
|
||
TestKeyword("interface", CSharpKeyword.Interface);
|
||
TestKeyword("break", CSharpKeyword.Break);
|
||
TestKeyword("checked", CSharpKeyword.Checked);
|
||
TestKeyword("namespace", CSharpKeyword.Namespace);
|
||
}
|
||
|
||
private void TestKeyword(string keyword, CSharpKeyword keywordType)
|
||
{
|
||
TestTokenizer(keyword, new CSharpSymbol(0, 0, 0, keyword, CSharpSymbolType.Keyword) { Keyword = keywordType });
|
||
}
|
||
}
|
||
}
|