183 lines
6.9 KiB
C#
Raw Normal View History

// 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 VBTokenizerLiteralTest : VBTokenizerTestBase
{
[Fact]
public void Decimal_Integer_Literal_Is_Recognized()
{
TestSingleToken("01189998819991197253", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Integer_Type_Suffixes_Are_Recognized_In_Decimal_Literal()
{
TestSingleToken("42S", VBSymbolType.IntegerLiteral);
TestSingleToken("42I", VBSymbolType.IntegerLiteral);
TestSingleToken("42L", VBSymbolType.IntegerLiteral);
TestSingleToken("42US", VBSymbolType.IntegerLiteral);
TestSingleToken("42UI", VBSymbolType.IntegerLiteral);
TestSingleToken("42UL", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Hex_Integer_Literal_Is_Recognized()
{
TestSingleToken("&HDeadBeef", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Integer_Type_Suffixes_Are_Recognized_In_Hex_Literal()
{
TestSingleToken("&HDeadBeefS", VBSymbolType.IntegerLiteral);
TestSingleToken("&HDeadBeefI", VBSymbolType.IntegerLiteral);
TestSingleToken("&HDeadBeefL", VBSymbolType.IntegerLiteral);
TestSingleToken("&HDeadBeefUS", VBSymbolType.IntegerLiteral);
TestSingleToken("&HDeadBeefUI", VBSymbolType.IntegerLiteral);
TestSingleToken("&HDeadBeefUL", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Octal_Integer_Literal_Is_Recognized()
{
TestSingleToken("&O77", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Integer_Type_Suffixes_Are_Recognized_In_Octal_Literal()
{
TestSingleToken("&O77S", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77I", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77L", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77US", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77UI", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77UL", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Incomplete_Type_Suffix_Is_Recognized()
{
TestSingleToken("42U", VBSymbolType.IntegerLiteral);
TestSingleToken("&H42U", VBSymbolType.IntegerLiteral);
TestSingleToken("&O77U", VBSymbolType.IntegerLiteral);
}
[Fact]
public void Integer_With_FloatingPoint_Type_Suffix_Is_Recognized_As_FloatingPointLiteral()
{
TestSingleToken("42F", VBSymbolType.FloatingPointLiteral);
TestSingleToken("42R", VBSymbolType.FloatingPointLiteral);
TestSingleToken("42D", VBSymbolType.FloatingPointLiteral);
}
[Fact]
public void Simple_FloatingPoint_Is_Recognized()
{
TestSingleToken("3.14159", VBSymbolType.FloatingPointLiteral);
}
[Fact]
public void Integer_With_Exponent_Is_Recognized()
{
TestSingleToken("1E10", VBSymbolType.FloatingPointLiteral);
TestSingleToken("1e10", VBSymbolType.FloatingPointLiteral);
TestSingleToken("1E+10", VBSymbolType.FloatingPointLiteral);
TestSingleToken("1e+10", VBSymbolType.FloatingPointLiteral);
TestSingleToken("1E-10", VBSymbolType.FloatingPointLiteral);
TestSingleToken("1e-10", VBSymbolType.FloatingPointLiteral);
}
[Fact]
public void Simple_FloatingPoint_With_Exponent_Is_Recognized()
{
TestSingleToken("3.14159e10", VBSymbolType.FloatingPointLiteral);
}
[Fact]
public void FloatingPoint_Between_Zero_And_One_Is_Recognized()
{
TestSingleToken(".314159e1", VBSymbolType.FloatingPointLiteral);
}
[Fact]
public void Simple_String_Literal_Is_Recognized()
{
TestSingleToken("\"Foo Bar Baz\"", VBSymbolType.StringLiteral);
}
[Fact]
public void Two_Double_Quotes_Are_Recognized_As_Escape_Sequence()
{
TestSingleToken("\"Foo \"\"Bar\"\" Baz\"", VBSymbolType.StringLiteral);
}
[Fact]
public void String_Literal_Is_Terminated_At_EOF()
{
TestSingleToken("\"Foo", VBSymbolType.StringLiteral);
}
[Fact]
public void String_Literal_Is_Terminated_At_EOL()
{
TestTokenizer("\"Foo\nBar", new VBSymbol(0, 0, 0, "\"Foo", VBSymbolType.StringLiteral), IgnoreRemaining);
}
[Fact]
public void Character_Literal_Is_Recognized_By_Trailing_C_After_String_Literal()
{
TestSingleToken("\"abc\"c", VBSymbolType.CharacterLiteral);
}
[Fact]
public void LeftDoubleQuote_Is_Valid_DoubleQuote()
{
// Repeat all the above tests with Unicode Left Double Quote Character U+201C: “
TestSingleToken("“Foo Bar Baz“", VBSymbolType.StringLiteral);
TestSingleToken("“Foo ““Bar““ Baz“", VBSymbolType.StringLiteral);
TestSingleToken("“Foo", VBSymbolType.StringLiteral);
TestSingleToken("“abc“c", VBSymbolType.CharacterLiteral);
TestTokenizer("“Foo\nBar", new VBSymbol(0, 0, 0, "“Foo", VBSymbolType.StringLiteral), IgnoreRemaining);
}
[Fact]
public void RightDoubleQuote_Is_Valid_DoubleQuote()
{
// Repeat all the above tests with Unicode Right Double Quote Character U+201D: ”
TestSingleToken("”Foo Bar Baz”", VBSymbolType.StringLiteral);
TestSingleToken("”Foo ””Bar”” Baz”", VBSymbolType.StringLiteral);
TestSingleToken("”Foo", VBSymbolType.StringLiteral);
TestSingleToken("”abc”c", VBSymbolType.CharacterLiteral);
TestTokenizer("”Foo\nBar", new VBSymbol(0, 0, 0, "”Foo", VBSymbolType.StringLiteral), IgnoreRemaining);
}
[Fact]
public void DateLiteral_Is_Recognized()
{
TestSingleToken("# 8/23/1970 3:45:39AM #", VBSymbolType.DateLiteral);
}
[Fact]
public void DateLiteral_Is_Terminated_At_EndHash()
{
TestTokenizer("# 8/23/1970 # 3:45:39AM", new VBSymbol(0, 0, 0, "# 8/23/1970 #", VBSymbolType.DateLiteral), IgnoreRemaining);
}
[Fact]
public void DateLiteral_Is_Terminated_At_EOF()
{
TestSingleToken("# 8/23/1970 3:45:39AM", VBSymbolType.DateLiteral);
}
[Fact]
public void DateLiteral_Is_Terminated_At_EOL()
{
TestTokenizer("# 8/23/1970\n3:45:39AM", new VBSymbol(0, 0, 0, "# 8/23/1970", VBSymbolType.DateLiteral), IgnoreRemaining);
}
}
}