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