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