| using System; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using System.Text; | 
 | using System.Threading.Tasks; | 
 | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
 | using OfficeOpenXml.FormulaParsing; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; | 
 | using OfficeOpenXml.FormulaParsing.ExpressionGraph; | 
 | using OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; | 
 |  | 
 | namespace EPPlusTest.FormulaParsing.ExpressionGraph.FunctionCompilers | 
 | { | 
 |     [TestClass] | 
 |     public class FunctionCompilerFactoryTests | 
 |     { | 
 |         #region Create Tests | 
 |         [TestMethod] | 
 |         public void CreateHandlesStandardFunctionCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new Sum(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(DefaultCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesSpecialIfCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new If(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(IfFunctionCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesSpecialIfErrorCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new IfError(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(IfErrorFunctionCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesSpecialIfNaCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new IfNa(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(IfNaFunctionCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesLookupFunctionCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new Column(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(LookupFunctionCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesErrorFunctionCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new IsError(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(ErrorHandlingFunctionCompiler)); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void CreateHandlesCustomFunctionCompiler() | 
 |         { | 
 |             var functionRepository = FunctionRepository.Create(); | 
 |             functionRepository.LoadModule(new TestFunctionModule()); | 
 |             var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | 
 |             var function = new MyFunction(); | 
 |             var functionCompiler = functionCompilerFactory.Create(function); | 
 |             Assert.IsInstanceOfType(functionCompiler, typeof(MyFunctionCompiler)); | 
 |         } | 
 |         #endregion | 
 |  | 
 |         #region Nested Classes | 
 |         public class TestFunctionModule : FunctionsModule | 
 |         { | 
 |             public TestFunctionModule() | 
 |             { | 
 |                 var myFunction = new MyFunction(); | 
 |                 var customCompiler = new MyFunctionCompiler(myFunction); | 
 |                 base.Functions.Add(MyFunction.Name, myFunction); | 
 |                 base.CustomCompilers.Add(typeof(MyFunction), customCompiler); | 
 |             } | 
 |         } | 
 |  | 
 |         public class MyFunction : ExcelFunction | 
 |         { | 
 |             public const string Name = "MyFunction"; | 
 |             public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) | 
 |             { | 
 |                 throw new NotImplementedException(); | 
 |             } | 
 |         } | 
 |  | 
 |         public class MyFunctionCompiler : FunctionCompiler | 
 |         { | 
 |             public MyFunctionCompiler(MyFunction function) : base(function) { } | 
 |             public override CompileResult Compile(IEnumerable<Expression> children, ParsingContext context) | 
 |             { | 
 |                 throw new NotImplementedException(); | 
 |             } | 
 |         } | 
 |         #endregion | 
 |     } | 
 | } |