Rearrangements

Migrate to Sdk projects.
Migrate tests to xUnit.
Bump version 0.2.3.
Migrate to NetStandar2.0.
This commit is contained in:
2021-06-13 20:10:23 +02:00
parent 196131a66b
commit fa13af7f82
16 changed files with 379 additions and 532 deletions

View File

@@ -1,230 +1,229 @@
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Xunit;
namespace VAR.ExpressionEvaluator.Tests
{
[TestClass()]
public class TokenizerTests
{
[TestMethod()]
[Fact]
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);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(10, t.Number);
t.NextToken();
// "+"
Assert.AreEqual(t.Token, Token.Plus);
Assert.Equal(Token.Plus, t.Token);
t.NextToken();
// "20"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 20);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(20, t.Number);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
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);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(10, t.Number);
t.NextToken();
// "+"
Assert.AreEqual(t.Token, Token.Plus);
Assert.Equal(Token.Plus, t.Token);
t.NextToken();
// "20"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 20);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(20, t.Number);
t.NextToken();
// "-"
Assert.AreEqual(t.Token, Token.Minus);
Assert.Equal(Token.Minus, t.Token);
t.NextToken();
// "20"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 30.123m);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(30.123m, t.Number);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
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");
Assert.Equal(Token.String, t.Token);
Assert.Equal("Hello World", t.Text);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
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\"");
Assert.Equal(Token.String, t.Token);
Assert.Equal("Hello \"World\"", t.Text);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
public void Tokenizer__Identifiers()
{
var testString = "null true false _$variable1 $variable2 [;{}#]";
var t = new Tokenizer(new StringReader(testString));
// "null"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "null");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("null", t.Text);
t.NextToken();
// "true"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "true");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("true", t.Text);
t.NextToken();
// "false"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "false");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("false", t.Text);
t.NextToken();
// "_$variable1"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "_$variable1");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("_$variable1", t.Text);
t.NextToken();
// "$variable2"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "$variable2");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("$variable2", t.Text);
t.NextToken();
// ";{}#"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, ";{}#");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal(";{}#", t.Text);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
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.ParenthesisStart);
Assert.Equal(Token.ParenthesisStart, t.Token);
t.NextToken();
// "10"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 10);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(10, t.Number);
t.NextToken();
// "+"
Assert.AreEqual(t.Token, Token.Plus);
Assert.Equal(Token.Plus, t.Token);
t.NextToken();
// "20"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 20);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(20, t.Number);
t.NextToken();
// ")"
Assert.AreEqual(t.Token, Token.ParenthesisEnd);
Assert.Equal(Token.ParenthesisEnd, t.Token);
t.NextToken();
// "*"
Assert.AreEqual(t.Token, Token.Multiply);
Assert.Equal(Token.Multiply, t.Token);
t.NextToken();
// "-"
Assert.AreEqual(t.Token, Token.Minus);
Assert.Equal(Token.Minus, t.Token);
t.NextToken();
// "20"
Assert.AreEqual(t.Token, Token.Number);
Assert.AreEqual(t.Number, 30.123m);
Assert.Equal(Token.Number, t.Token);
Assert.Equal(30.123m, t.Number);
t.NextToken();
// "+"
Assert.AreEqual(t.Token, Token.Plus);
Assert.Equal(Token.Plus, t.Token);
t.NextToken();
// "Hello \"World\""
Assert.AreEqual(t.Token, Token.String);
Assert.AreEqual(t.Text, "Hello \"World\"");
Assert.Equal(Token.String, t.Token);
Assert.Equal("Hello \"World\"", t.Text);
t.NextToken();
// "="
Assert.AreEqual(t.Token, Token.Equals);
Assert.Equal(Token.Equals, t.Token);
t.NextToken();
// "false"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "false");
Assert.Equal(Token.Identifier, t.Token);
Assert.Equal("false", t.Text);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
[TestMethod()]
[Fact]
public void Tokenizer__MoreTokens()
{
var testString = "= < > <= >= == === ";
var t = new Tokenizer(new StringReader(testString));
// "="
Assert.AreEqual(t.Token, Token.Equals);
Assert.Equal(Token.Equals, t.Token);
t.NextToken();
// "<"
Assert.AreEqual(t.Token, Token.LessThan);
Assert.Equal(Token.LessThan, t.Token);
t.NextToken();
// ">"
Assert.AreEqual(t.Token, Token.GreaterThan);
Assert.Equal(Token.GreaterThan, t.Token);
t.NextToken();
// "<="
Assert.AreEqual(t.Token, Token.LessOrEqualThan);
Assert.Equal(Token.LessOrEqualThan, t.Token);
t.NextToken();
// ">="
Assert.AreEqual(t.Token, Token.GreaterOrEqualThan);
Assert.Equal(Token.GreaterOrEqualThan, t.Token);
t.NextToken();
// "=="
Assert.AreEqual(t.Token, Token.Equals);
Assert.Equal(Token.Equals, t.Token);
t.NextToken();
// "==="
Assert.AreEqual(t.Token, Token.ExclusiveEquals);
Assert.Equal(Token.ExclusiveEquals, t.Token);
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
Assert.Equal(Token.EOF, t.Token);
}
}