You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.9 KiB
157 lines
3.9 KiB
// <file> |
|
// <copyright see="prj:///doc/copyright.txt"/> |
|
// <license see="prj:///doc/license.txt"/> |
|
// <owner name="none" email=""/> |
|
// <version>$Revision$</version> |
|
// </file> |
|
|
|
using System; |
|
using System.IO; |
|
using NUnit.Framework; |
|
using ICSharpCode.NRefactory.Parser; |
|
using ICSharpCode.NRefactory.Parser.CSharp; |
|
using ICSharpCode.NRefactory.PrettyPrinter; |
|
|
|
namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp |
|
{ |
|
[TestFixture] |
|
public sealed class NumberLexerTests |
|
{ |
|
ILexer GenerateLexer(StringReader sr) |
|
{ |
|
return ParserFactory.CreateLexer(SupportedLanguage.CSharp, sr); |
|
} |
|
|
|
Token GetSingleToken(string text) |
|
{ |
|
ILexer lexer = GenerateLexer(new StringReader(text)); |
|
Token t = lexer.NextToken(); |
|
Assert.AreEqual(Tokens.EOF, lexer.NextToken().kind, "Tokens.EOF"); |
|
Assert.AreEqual("", lexer.Errors.ErrorOutput); |
|
return t; |
|
} |
|
|
|
void CheckToken(string text, object val) |
|
{ |
|
Token t = GetSingleToken(text); |
|
Assert.AreEqual(Tokens.Literal, t.kind, "Tokens.Literal"); |
|
Assert.AreEqual(text, t.val, "value"); |
|
Assert.IsNotNull(t.literalValue, "literalValue is null"); |
|
Assert.AreEqual(val.GetType(), t.literalValue.GetType(), "literalValue.GetType()"); |
|
Assert.AreEqual(val, t.literalValue, "literalValue"); |
|
} |
|
|
|
[Test] |
|
public void TestSingleDigit() |
|
{ |
|
CheckToken("5", 5); |
|
} |
|
|
|
[Test] |
|
public void TestZero() |
|
{ |
|
CheckToken("0", 0); |
|
} |
|
|
|
[Test] |
|
public void TestInteger() |
|
{ |
|
CheckToken("66", 66); |
|
} |
|
|
|
[Test] |
|
public void TestNonOctalInteger() |
|
{ |
|
// C# does not have octal integers, so 077 should parse to 77 |
|
Assert.IsTrue(077 == 77); |
|
|
|
CheckToken("077", 077); |
|
CheckToken("056", 056); |
|
} |
|
|
|
[Test] |
|
public void TestHexadecimalInteger() |
|
{ |
|
CheckToken("0x99F", 0x99F); |
|
CheckToken("0xAB1f", 0xAB1f); |
|
} |
|
|
|
[Test] |
|
public void InvalidHexadecimalInteger() |
|
{ |
|
// don't check result, just make sure there is no exception |
|
GenerateLexer(new StringReader("0x2GF")).NextToken(); |
|
GenerateLexer(new StringReader("0xG2F")).NextToken(); |
|
// SD2-457 |
|
GenerateLexer(new StringReader("0x")).NextToken(); |
|
// hexadecimal integer >ulong.MaxValue |
|
GenerateLexer(new StringReader("0xfedcba98765432100")).NextToken(); |
|
} |
|
|
|
[Test] |
|
public void TestLongHexadecimalInteger() |
|
{ |
|
CheckToken("0x4244636f446c6d58", 0x4244636f446c6d58); |
|
CheckToken("0xf244636f446c6d58", 0xf244636f446c6d58); |
|
} |
|
|
|
[Test] |
|
public void TestLongInteger() |
|
{ |
|
CheckToken("9223372036854775807", 9223372036854775807); // long.MaxValue |
|
CheckToken("9223372036854775808", 9223372036854775808); // long.MaxValue+1 |
|
CheckToken("18446744073709551615", 18446744073709551615); // ulong.MaxValue |
|
CheckToken("18446744073709551616f", 18446744073709551616f); // ulong.MaxValue+1 as float |
|
CheckToken("18446744073709551616d", 18446744073709551616d); // ulong.MaxValue+1 as double |
|
CheckToken("18446744073709551616m", 18446744073709551616m); // ulong.MaxValue+1 as decimal |
|
} |
|
|
|
[Test] |
|
public void TestDouble() |
|
{ |
|
CheckToken("1.0", 1.0); |
|
CheckToken("1.1", 1.1); |
|
CheckToken("1.1e-2", 1.1e-2); |
|
} |
|
|
|
[Test] |
|
public void TestFloat() |
|
{ |
|
CheckToken("1f", 1f); |
|
CheckToken("1.0f", 1.0f); |
|
CheckToken("1.1f", 1.1f); |
|
CheckToken("1.1e-2f", 1.1e-2f); |
|
} |
|
|
|
[Test] |
|
public void TestDecimal() |
|
{ |
|
CheckToken("1m", 1m); |
|
CheckToken("1.0m", 1.0m); |
|
CheckToken("1.1m", 1.1m); |
|
CheckToken("1.1e-2m", 1.1e-2m); |
|
CheckToken("2.0e-5m", 2.0e-5m); |
|
} |
|
|
|
[Test] |
|
public void TestString() |
|
{ |
|
CheckToken(@"@""-->""""<--""", @"-->""<--"); |
|
CheckToken(@"""-->\""<--""", "-->\"<--"); |
|
|
|
CheckToken(@"""\U00000041""", "\U00000041"); |
|
CheckToken(@"""\U00010041""", "\U00010041"); |
|
} |
|
|
|
[Test] |
|
public void TestCharLiteral() |
|
{ |
|
CheckToken(@"'a'", 'a'); |
|
CheckToken(@"'\u0041'", '\u0041'); |
|
CheckToken(@"'\x41'", '\x41'); |
|
CheckToken(@"'\x041'", '\x041'); |
|
CheckToken(@"'\x0041'", '\x0041'); |
|
CheckToken(@"'\U00000041'", '\U00000041'); |
|
} |
|
} |
|
}
|
|
|