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