blob: c3cdb1447d6531a66465afe35e436dee9913728c [file] [log] [blame]
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml.FormulaParsing;
using Rhino.Mocks;
using ExGraph = OfficeOpenXml.FormulaParsing.ExpressionGraph.ExpressionGraph;
using OfficeOpenXml.FormulaParsing.LexicalAnalysis;
using OfficeOpenXml.FormulaParsing.ExpressionGraph;
namespace EPPlusTest.FormulaParsing
{
[TestClass]
public class FormulaParserTests
{
private FormulaParser _parser;
[TestInitialize]
public void Setup()
{
var provider = MockRepository.GenerateStub<ExcelDataProvider>();
_parser = new FormulaParser(provider);
}
[TestCleanup]
public void Cleanup()
{
}
[TestMethod]
public void ParserShouldCallLexer()
{
var lexer = MockRepository.GenerateStub<ILexer>();
lexer.Stub(x => x.Tokenize("ABC")).Return(Enumerable.Empty<Token>());
_parser.Configure(x => x.SetLexer(lexer));
_parser.Parse("ABC");
lexer.AssertWasCalled(x => x.Tokenize("ABC"));
}
[TestMethod]
public void ParserShouldCallGraphBuilder()
{
var lexer = MockRepository.GenerateStub<ILexer>();
var tokens = new List<Token>();
lexer.Stub(x => x.Tokenize("ABC")).Return(tokens);
var graphBuilder = MockRepository.GenerateStub<IExpressionGraphBuilder>();
graphBuilder.Stub(x => x.Build(tokens)).Return(new ExGraph());
_parser.Configure(config =>
{
config
.SetLexer(lexer)
.SetGraphBuilder(graphBuilder);
});
_parser.Parse("ABC");
graphBuilder.AssertWasCalled(x => x.Build(tokens));
}
[TestMethod]
public void ParserShouldCallCompiler()
{
var lexer = MockRepository.GenerateStub<ILexer>();
var tokens = new List<Token>();
lexer.Stub(x => x.Tokenize("ABC")).Return(tokens);
var expectedGraph = new ExGraph();
expectedGraph.Add(new StringExpression("asdf"));
var graphBuilder = MockRepository.GenerateStub<IExpressionGraphBuilder>();
graphBuilder.Stub(x => x.Build(tokens)).Return(expectedGraph);
var compiler = MockRepository.GenerateStub<IExpressionCompiler>();
compiler.Stub(x => x.Compile(expectedGraph.Expressions)).Return(new CompileResult(0, DataType.Integer));
_parser.Configure(config =>
{
config
.SetLexer(lexer)
.SetGraphBuilder(graphBuilder)
.SetExpresionCompiler(compiler);
});
_parser.Parse("ABC");
compiler.AssertWasCalled(x => x.Compile(expectedGraph.Expressions));
}
[TestMethod]
public void ParseAtShouldCallExcelDataProvider()
{
var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>();
excelDataProvider
.Stub(x => x.GetRangeFormula(string.Empty, 1, 1))
.Return("Sum(1,2)");
var parser = new FormulaParser(excelDataProvider);
var result = parser.ParseAt("A1");
Assert.AreEqual(3d, result);
}
[TestMethod, ExpectedException(typeof(ArgumentException))]
public void ParseAtShouldThrowIfAddressIsNull()
{
_parser.ParseAt(null);
}
}
}