using System;
using CodeDomExpParser;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace CodeDomExpParser.Test
{
[TestClass]
public class TestTokenizer
{
[TestMethod]
public void Tokenizer01_Class()
{
Tokenizer t = new Tokenizer("AClass");
Token token = t.GetNextToken();
Assert.AreEqual("AClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer02_Property()
{
Tokenizer t = new Tokenizer("AClass.AProperty");
Token token = t.GetNextToken();
Assert.AreEqual("AClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(".", token.Text);
Assert.AreEqual(TokenType.Dot, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("AProperty", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer03_Primitive_String()
{
Tokenizer t = new Tokenizer("\"AString\"");
Token token = t.GetNextToken();
Assert.AreEqual("AString", token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
t = new Tokenizer("\"This string contains \\\"quoted text.\\\"\"");
token = t.GetNextToken();
Assert.AreEqual(@"This string contains \""quoted text.\""", token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer04_Primitive_Integer()
{
Tokenizer t = new Tokenizer("65");
Token token = t.GetNextToken();
Assert.AreEqual(typeof(Int32), token.ParsedObject.GetType());
Assert.AreEqual(65, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer05_Primitive_Long()
{
Tokenizer t = new Tokenizer("2943L");
Token token = t.GetNextToken();
Assert.AreEqual(typeof(Int64), token.ParsedObject.GetType());
Assert.AreEqual(2943L, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer06_Primitive_Double()
{
Tokenizer t = new Tokenizer("32.76");
Token token = t.GetNextToken();
Assert.AreEqual(typeof(Double), token.ParsedObject.GetType());
Assert.AreEqual(32.76D, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
t = new Tokenizer("32.76D");
token = t.GetNextToken();
Assert.AreEqual(typeof(Double), token.ParsedObject.GetType());
Assert.AreEqual(32.76D, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
t = new Tokenizer("32D");
token = t.GetNextToken();
Assert.AreEqual(typeof(Double), token.ParsedObject.GetType());
Assert.AreEqual(32D, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer07_Primitive_Boolean()
{
Tokenizer t = new Tokenizer("true");
Token token = t.GetNextToken();
Assert.AreEqual(typeof(Boolean), token.ParsedObject.GetType());
Assert.AreEqual(true, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
t = new Tokenizer("false");
token = t.GetNextToken();
Assert.AreEqual(typeof(Boolean), token.ParsedObject.GetType());
Assert.AreEqual(false, token.ParsedObject);
Assert.AreEqual(TokenType.Primitive, token.Type);
Assert.AreEqual(TokenPriority.None, token.Priority);
}
[TestMethod]
public void Tokenizer08_GreaterThan()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.PropertyA > 3");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(">", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(3, token.ParsedObject);
}
[TestMethod]
public void Tokenizer09_LessThan()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.PropertyA <MyClass.PropertyB");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual("<", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyB", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
}
[TestMethod]
public void Tokenizer10_GreaterThanOrEqual()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.PropertyA>=87L");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(">=", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(long), token.ParsedObject.GetType());
Assert.AreEqual(87L, token.ParsedObject);
}
[TestMethod]
public void Tokenizer11_LessThanOrEqual()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.PropertyA <= 821.12");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual("<=", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(double), token.ParsedObject.GetType());
Assert.AreEqual(821.12D, token.ParsedObject);
}
[TestMethod]
public void Tokenizer12_Equals()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.PropertyA == 3D");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual("==", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(double), token.ParsedObject.GetType());
Assert.AreEqual(3D, token.ParsedObject);
}
[TestMethod]
public void Tokenizer13_Plus()
{
Tokenizer t;
Token token;
t = new Tokenizer("1+2");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(1, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("+", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.PlusMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(2, token.ParsedObject);
}
[TestMethod]
public void Tokenizer14_Minus()
{
Tokenizer t;
Token token;
t = new Tokenizer("3-2");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(3, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("-", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.PlusMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(2, token.ParsedObject);
}
[TestMethod]
public void Tokenizer15_UnaryMinus()
{
Tokenizer t;
Token token;
t = new Tokenizer("3+-2");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(3, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("+", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.PlusMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("-", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.UnaryMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(2, token.ParsedObject);
t = new Tokenizer("3--2");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(3, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("-", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.PlusMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("-", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.UnaryMinus, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(2, token.ParsedObject);
}
[TestMethod]
public void Tokenizer16_Multiply()
{
Tokenizer t;
Token token;
t = new Tokenizer("6*9");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(6, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("*", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.MulDiv, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(9, token.ParsedObject);
}
[TestMethod]
public void Tokenizer17_Divide()
{
Tokenizer t;
Token token;
t = new Tokenizer("15/3");
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(15, token.ParsedObject);
token = t.GetNextToken();
Assert.AreEqual("/", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.MulDiv, token.Priority);
token = t.GetNextToken();
Assert.AreEqual(typeof(int), token.ParsedObject.GetType());
Assert.AreEqual(3, token.ParsedObject);
}
[TestMethod]
public void Tokenizer18_Not()
{
Tokenizer t;
Token token;
t = new Tokenizer("!MyClass.PropertyA");
token = t.GetNextToken();
Assert.AreEqual("!", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Not, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("PropertyA", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
}
[TestMethod]
public void Tokenizer19_NotEqual()
{
Tokenizer t;
Token token;
t = new Tokenizer("MyClass.Foo != \"Bar\"");
token = t.GetNextToken();
Assert.AreEqual("MyClass", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual(TokenType.Dot, token.Type);
token = t.GetNextToken();
Assert.AreEqual("Foo", token.Text);
Assert.AreEqual(TokenType.Identifier, token.Type);
token = t.GetNextToken();
Assert.AreEqual("!=", token.Text);
Assert.AreEqual(TokenType.Operator, token.Type);
Assert.AreEqual(TokenPriority.Equality, token.Priority);
token = t.GetNextToken();
Assert.AreEqual("Bar", token.ParsedObject);
}
}
}