mirror of https://github.com/icsharpcode/ILSpy.git
				
				
			
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							194 lines
						
					
					
						
							6.8 KiB
						
					
					
				
			
		
		
	
	
							194 lines
						
					
					
						
							6.8 KiB
						
					
					
				// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) | 
						|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) | 
						|
 | 
						|
using System; | 
						|
using System.IO; | 
						|
using ICSharpCode.NRefactory.VB.Parser; | 
						|
using NUnit.Framework; | 
						|
 | 
						|
namespace ICSharpCode.NRefactory.VB.Tests.Lexer | 
						|
{ | 
						|
	[TestFixture] | 
						|
	public sealed class LiteralsTests | 
						|
	{ | 
						|
		VBLexer GenerateLexer(StringReader sr) | 
						|
		{ | 
						|
			return new VBLexer(sr); | 
						|
		} | 
						|
		 | 
						|
		Token GetSingleToken(string text) | 
						|
		{ | 
						|
			VBLexer lexer = GenerateLexer(new StringReader(text)); | 
						|
			Token t = lexer.NextToken(); | 
						|
			Assert.AreEqual(Tokens.EOL, lexer.NextToken().Kind, "Tokens.EOL"); | 
						|
			Assert.AreEqual(Tokens.EOF, lexer.NextToken().Kind, "Tokens.EOF"); | 
						|
			Assert.AreEqual("", lexer.Errors.ErrorOutput); | 
						|
			return t; | 
						|
		} | 
						|
		 | 
						|
		void CheckToken(string text, int tokenType, object val) | 
						|
		{ | 
						|
			Token t = GetSingleToken(text); | 
						|
			Assert.AreEqual(tokenType, t.Kind, "Tokens.Literal"); | 
						|
			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", Tokens.LiteralInteger, 5); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestZero() | 
						|
		{ | 
						|
			CheckToken("0", Tokens.LiteralInteger, 0); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestInteger() | 
						|
		{ | 
						|
			CheckToken("15", Tokens.LiteralInteger, 15); | 
						|
			CheckToken("8581", Tokens.LiteralInteger, 8581); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void InvalidTypeCharacter() | 
						|
		{ | 
						|
			// just check that we don't get exceptions: | 
						|
			GenerateLexer(new StringReader(".5s")).NextToken(); | 
						|
			GenerateLexer(new StringReader(".5ul")).NextToken(); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestHexadecimalInteger() | 
						|
		{ | 
						|
			CheckToken("&H10", Tokens.LiteralInteger, 0x10); | 
						|
			CheckToken("&H10&", Tokens.LiteralInteger, (long)0x10); | 
						|
			CheckToken("&h3ff%", Tokens.LiteralInteger, 0x3ff); | 
						|
			CheckToken("&h8000s", Tokens.LiteralInteger, short.MinValue); | 
						|
			CheckToken("&h8000us", Tokens.LiteralInteger, (ushort)0x8000); | 
						|
			CheckToken("&HffffFFFF", Tokens.LiteralInteger, -1); | 
						|
			CheckToken("&HffffFFFF%", Tokens.LiteralInteger, -1); | 
						|
			CheckToken("&HffffFFFFui", Tokens.LiteralInteger, uint.MaxValue); | 
						|
			CheckToken("&HffffFFFF&", Tokens.LiteralInteger, (long)uint.MaxValue); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestLongHexadecimalInteger() | 
						|
		{ | 
						|
			CheckToken("&H4244636f446c6d58", Tokens.LiteralInteger, 0x4244636f446c6d58); | 
						|
			CheckToken("&hf244636f446c6d58", Tokens.LiteralInteger, -989556688574190248); | 
						|
			CheckToken("&hf244636f446c6d58&", Tokens.LiteralInteger, -989556688574190248); | 
						|
			CheckToken("&hf244636f446c6d58ul", Tokens.LiteralInteger, 0xf244636f446c6d58); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void InvalidHexadecimalInteger() | 
						|
		{ | 
						|
			// just check that we don't get exceptions: | 
						|
			GenerateLexer(new StringReader("&H")).NextToken(); | 
						|
			// >ulong.MaxValue | 
						|
			GenerateLexer(new StringReader("&hff244636f446c6d58")).NextToken(); | 
						|
			// needs an ulong, but "i" postfix specified integer | 
						|
			GenerateLexer(new StringReader("&hf244636f446c6d58i")).NextToken(); | 
						|
			GenerateLexer(new StringReader("&hf244636f446c6d58ui")).NextToken(); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestIncompleteHexadecimal() | 
						|
		{ | 
						|
			VBLexer lexer = GenerateLexer(new StringReader("&H\r\nabc")); | 
						|
			Token t = lexer.NextToken(); | 
						|
			Assert.AreEqual(Tokens.LiteralInteger, t.Kind); | 
						|
			Assert.AreEqual(0, (int)t.LiteralValue); | 
						|
			Assert.AreEqual(Tokens.EOL, lexer.NextToken().Kind, "Tokens.EOL (1)"); | 
						|
			Assert.AreEqual(Tokens.Identifier, lexer.NextToken().Kind, "Tokens.Identifier"); | 
						|
			Assert.AreEqual(Tokens.EOL, lexer.NextToken().Kind, "Tokens.EOL (2)"); | 
						|
			Assert.AreEqual(Tokens.EOF, lexer.NextToken().Kind, "Tokens.EOF"); | 
						|
			Assert.AreNotEqual("", lexer.Errors.ErrorOutput); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestStringLiterals() | 
						|
		{ | 
						|
			CheckToken("\"\"", Tokens.LiteralString, ""); | 
						|
			CheckToken("\"Hello, World!\"", Tokens.LiteralString, "Hello, World!"); | 
						|
			CheckToken("\"\"\"\"", Tokens.LiteralString, "\""); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestCharacterLiterals() | 
						|
		{ | 
						|
			CheckToken("\" \"c", Tokens.LiteralCharacter, ' '); | 
						|
			CheckToken("\"!\"c", Tokens.LiteralCharacter, '!'); | 
						|
			CheckToken("\"\"\"\"c", Tokens.LiteralCharacter, '"'); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestDateLiterals() | 
						|
		{ | 
						|
			CheckToken("# 8/23/1970 #", Tokens.LiteralDate, new DateTime(1970, 8, 23, 0, 0, 0)); | 
						|
			CheckToken("#8/23/1970#", Tokens.LiteralDate, new DateTime(1970, 8, 23, 0, 0, 0)); | 
						|
			CheckToken("# 8/23/1970  3:45:39AM #", Tokens.LiteralDate, new DateTime(1970, 8, 23, 3, 45, 39)); | 
						|
			CheckToken("# 3:45:39AM #", Tokens.LiteralDate, new DateTime(1, 1, 1, 3, 45, 39)); | 
						|
			CheckToken("# 3:45:39  PM #", Tokens.LiteralDate, new DateTime(1, 1, 1, 15, 45, 39)); | 
						|
			CheckToken("# 3:45:39 #", Tokens.LiteralDate, new DateTime(1, 1, 1, 3, 45, 39)); | 
						|
			CheckToken("# 13:45:39 #", Tokens.LiteralDate, new DateTime(1, 1, 1, 13, 45, 39)); | 
						|
			CheckToken("# 1AM #", Tokens.LiteralDate, new DateTime(1, 1, 1, 1, 0, 0)); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestDouble() | 
						|
		{ | 
						|
			CheckToken("1.0", Tokens.LiteralDouble, 1.0); | 
						|
			CheckToken("1.1", Tokens.LiteralDouble, 1.1); | 
						|
			CheckToken("2e-5", Tokens.LiteralDouble, 2e-5); | 
						|
			CheckToken("2.0e-5", Tokens.LiteralDouble, 2e-5); | 
						|
			CheckToken("2e5", Tokens.LiteralDouble, 2e5); | 
						|
			CheckToken("2.2e5", Tokens.LiteralDouble, 2.2e5); | 
						|
			CheckToken("2e+5", Tokens.LiteralDouble, 2e5); | 
						|
			CheckToken("2.2e+5", Tokens.LiteralDouble, 2.2e5); | 
						|
			 | 
						|
			CheckToken("1r", Tokens.LiteralDouble, 1.0); | 
						|
			CheckToken("1.0r", Tokens.LiteralDouble, 1.0); | 
						|
			CheckToken("1.1r", Tokens.LiteralDouble, 1.1); | 
						|
			CheckToken("2e-5r", Tokens.LiteralDouble, 2e-5); | 
						|
			CheckToken("2.0e-5r", Tokens.LiteralDouble, 2e-5); | 
						|
			CheckToken("2e5r", Tokens.LiteralDouble, 2e5); | 
						|
			CheckToken("2.2e5r", Tokens.LiteralDouble, 2.2e5); | 
						|
			CheckToken("2e+5r", Tokens.LiteralDouble, 2e5); | 
						|
			CheckToken("2.2e+5r", Tokens.LiteralDouble, 2.2e5); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestSingle() | 
						|
		{ | 
						|
			CheckToken("1f", Tokens.LiteralSingle, 1.0f); | 
						|
			CheckToken("1.0f", Tokens.LiteralSingle, 1.0f); | 
						|
			CheckToken("1.1f", Tokens.LiteralSingle, 1.1f); | 
						|
			CheckToken("2e-5f", Tokens.LiteralSingle, 2e-5f); | 
						|
			CheckToken("2.0e-5f", Tokens.LiteralSingle, 2e-5f); | 
						|
			CheckToken("2e5f", Tokens.LiteralSingle, 2e5f); | 
						|
			CheckToken("2.2e5f", Tokens.LiteralSingle, 2.2e5f); | 
						|
			CheckToken("2e+5f", Tokens.LiteralSingle, 2e5f); | 
						|
			CheckToken("2.2e+5f", Tokens.LiteralSingle, 2.2e5f); | 
						|
		} | 
						|
		 | 
						|
		[Test] | 
						|
		public void TestDecimal() | 
						|
		{ | 
						|
			CheckToken("1d", Tokens.LiteralDecimal, 1m); | 
						|
			CheckToken("1.0d", Tokens.LiteralDecimal, 1.0m); | 
						|
			CheckToken("1.1d", Tokens.LiteralDecimal, 1.1m); | 
						|
			CheckToken("2e-5d", Tokens.LiteralDecimal, 2e-5m); | 
						|
			CheckToken("2.0e-5d", Tokens.LiteralDecimal, 2.0e-5m); | 
						|
			CheckToken("2e5d", Tokens.LiteralDecimal, 2e5m); | 
						|
			CheckToken("2.2e5d", Tokens.LiteralDecimal, 2.2e5m); | 
						|
			CheckToken("2e+5d", Tokens.LiteralDecimal, 2e5m); | 
						|
			CheckToken("2.2e+5d", Tokens.LiteralDecimal, 2.2e5m); | 
						|
		} | 
						|
	} | 
						|
}
 | 
						|
 |