blob: 62d8385e4a5765ff243dd139c435b6c74795b04d [file] [log] [blame]
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Rhino.Mocks;
using OfficeOpenXml.FormulaParsing;
using OfficeOpenXml.FormulaParsing.LexicalAnalysis;
namespace EPPlusTest.FormulaParsing.LexicalAnalysis
{
[TestClass]
public class TokenFactoryTests
{
private ITokenFactory _tokenFactory;
private INameValueProvider _nameValueProvider;
[TestInitialize]
public void Setup()
{
var context = ParsingContext.Create();
var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>();
_nameValueProvider = MockRepository.GenerateStub<INameValueProvider>();
_tokenFactory = new TokenFactory(context.Configuration.FunctionRepository, _nameValueProvider);
}
[TestCleanup]
public void Cleanup()
{
}
[TestMethod]
public void ShouldCreateAStringToken()
{
var input = "\"";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("\"", token.Value);
Assert.AreEqual(TokenType.String, token.TokenType);
}
[TestMethod]
public void ShouldCreatePlusAsOperatorToken()
{
var input = "+";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("+", token.Value);
Assert.AreEqual(TokenType.Operator, token.TokenType);
}
[TestMethod]
public void ShouldCreateMinusAsOperatorToken()
{
var input = "-";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("-", token.Value);
Assert.AreEqual(TokenType.Operator, token.TokenType);
}
[TestMethod]
public void ShouldCreateMultiplyAsOperatorToken()
{
var input = "*";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("*", token.Value);
Assert.AreEqual(TokenType.Operator, token.TokenType);
}
[TestMethod]
public void ShouldCreateDivideAsOperatorToken()
{
var input = "/";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("/", token.Value);
Assert.AreEqual(TokenType.Operator, token.TokenType);
}
[TestMethod]
public void ShouldCreateEqualsAsOperatorToken()
{
var input = "=";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("=", token.Value);
Assert.AreEqual(TokenType.Operator, token.TokenType);
}
[TestMethod]
public void ShouldCreateIntegerAsIntegerToken()
{
var input = "23";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("23", token.Value);
Assert.AreEqual(TokenType.Integer, token.TokenType);
}
[TestMethod]
public void ShouldCreateBooleanAsBooleanToken()
{
var input = "true";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("true", token.Value);
Assert.AreEqual(TokenType.Boolean, token.TokenType);
}
[TestMethod]
public void ShouldCreateDecimalAsDecimalToken()
{
var input = "23.3";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual("23.3", token.Value);
Assert.AreEqual(TokenType.Decimal, token.TokenType);
}
[TestMethod]
public void CreateShouldReadFunctionsFromFuncRepository()
{
var input = "Text";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual(TokenType.Function, token.TokenType);
Assert.AreEqual("Text", token.Value);
}
[TestMethod]
public void CreateShouldCreateExcelAddressAsExcelAddressToken()
{
var input = "A1";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual(TokenType.ExcelAddress, token.TokenType);
Assert.AreEqual("A1", token.Value);
}
[TestMethod]
public void CreateShouldCreateExcelRangeAsExcelAddressToken()
{
var input = "A1:B15";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual(TokenType.ExcelAddress, token.TokenType);
Assert.AreEqual("A1:B15", token.Value);
}
[TestMethod]
public void CreateShouldCreateExcelRangeOnOtherSheetAsExcelAddressToken()
{
var input = "ws!A1:B15";
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual(TokenType.ExcelAddress, token.TokenType);
Assert.AreEqual("WS!A1:B15", token.Value);
}
[TestMethod]
public void CreateShouldCreateNamedValueAsExcelAddressToken()
{
var input = "NamedValue";
_nameValueProvider.Stub(x => x.IsNamedValue("NamedValue","")).Return(true);
_nameValueProvider.Stub(x => x.IsNamedValue("NamedValue", null)).Return(true);
var token = _tokenFactory.Create(Enumerable.Empty<Token>(), input);
Assert.AreEqual(TokenType.NameValue, token.TokenType);
Assert.AreEqual("NamedValue", token.Value);
}
}
}