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