using Microsoft.VisualStudio.TestTools.UnitTesting; using System.IO; namespace VAR.ExpressionEvaluator.Tests { [TestClass()] public class TokenizerTests { [TestMethod()] public void Tokenizer__Plus() { var testString = "10 + 20"; var t = new Tokenizer(new StringReader(testString)); // "10" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 10); t.NextToken(); // "+" Assert.AreEqual(t.Token, Token.Plus); t.NextToken(); // "20" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 20); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } [TestMethod()] public void Tokenizer__PlusMinusAndDecimal() { var testString = "10 + 20 - 30.123"; var t = new Tokenizer(new StringReader(testString)); // "10" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 10); t.NextToken(); // "+" Assert.AreEqual(t.Token, Token.Plus); t.NextToken(); // "20" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 20); t.NextToken(); // "-" Assert.AreEqual(t.Token, Token.Minus); t.NextToken(); // "20" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 30.123m); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } [TestMethod()] public void Tokenizer__SimpleString() { var testString = "\"Hello World\""; var t = new Tokenizer(new StringReader(testString)); // "Hello World" Assert.AreEqual(t.Token, Token.String); Assert.AreEqual(t.Text, "Hello World"); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } [TestMethod()] public void Tokenizer__StringWithEscaping() { var testString = "\"Hello \\\"World\\\"\""; var t = new Tokenizer(new StringReader(testString)); // "Hello \"World\"" Assert.AreEqual(t.Token, Token.String); Assert.AreEqual(t.Text, "Hello \"World\""); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } [TestMethod()] public void Tokenizer__Keywords() { var testString = "null true false"; var t = new Tokenizer(new StringReader(testString)); // "null" Assert.AreEqual(t.Token, Token.Keyword); Assert.AreEqual(t.Text, "null"); t.NextToken(); // "true" Assert.AreEqual(t.Token, Token.Keyword); Assert.AreEqual(t.Text, "true"); t.NextToken(); // "false" Assert.AreEqual(t.Token, Token.Keyword); Assert.AreEqual(t.Text, "false"); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } [TestMethod()] public void Tokenizer__AllTogether() { var testString = "(10 + 20) * -30.123 + \"Hello \\\"World\\\"\" = false"; var t = new Tokenizer(new StringReader(testString)); // "(" Assert.AreEqual(t.Token, Token.ParentesisStart); t.NextToken(); // "10" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 10); t.NextToken(); // "+" Assert.AreEqual(t.Token, Token.Plus); t.NextToken(); // "20" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 20); t.NextToken(); // ")" Assert.AreEqual(t.Token, Token.ParentesisEnd); t.NextToken(); // "*" Assert.AreEqual(t.Token, Token.Multiply); t.NextToken(); // "-" Assert.AreEqual(t.Token, Token.Minus); t.NextToken(); // "20" Assert.AreEqual(t.Token, Token.Number); Assert.AreEqual(t.Number, 30.123m); t.NextToken(); // "+" Assert.AreEqual(t.Token, Token.Plus); t.NextToken(); // "Hello \"World\"" Assert.AreEqual(t.Token, Token.String); Assert.AreEqual(t.Text, "Hello \"World\""); t.NextToken(); // "=" Assert.AreEqual(t.Token, Token.Equals); t.NextToken(); // "false" Assert.AreEqual(t.Token, Token.Keyword); Assert.AreEqual(t.Text, "false"); t.NextToken(); Assert.AreEqual(t.Token, Token.EOF); } } }