| 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); | |
| } | |
| } | |
| } |