|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml.FormulaParsing; | 
|  | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
|  | using OfficeOpenXml.FormulaParsing.ExpressionGraph; | 
|  | using OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; | 
|  |  | 
|  | namespace EPPlusTest.FormulaParsing.Excel.Functions | 
|  | { | 
|  | [TestClass] | 
|  | public class FunctionRepositoryTests | 
|  | { | 
|  | #region LoadModule Tests | 
|  | [TestMethod] | 
|  | public void LoadModulePopulatesFunctionsAndCustomCompilers() | 
|  | { | 
|  | var functionRepository = FunctionRepository.Create(); | 
|  | Assert.IsFalse(functionRepository.IsFunctionName(MyFunction.Name)); | 
|  | Assert.IsFalse(functionRepository.CustomCompilers.ContainsKey(typeof(MyFunction))); | 
|  | functionRepository.LoadModule(new TestFunctionModule()); | 
|  | Assert.IsTrue(functionRepository.IsFunctionName(MyFunction.Name)); | 
|  | Assert.IsTrue(functionRepository.CustomCompilers.ContainsKey(typeof(MyFunction))); | 
|  | // Make sure reloading the module overwrites previous functions and compilers | 
|  | functionRepository.LoadModule(new TestFunctionModule()); | 
|  | } | 
|  | #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 | 
|  | } | 
|  | } |