| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml; |
| using OfficeOpenXml.FormulaParsing; |
| using OfficeOpenXml.FormulaParsing.Excel.Functions; |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph; |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; |
| |
| namespace EPPlusTest.FormulaParsing |
| { |
| [TestClass] |
| public class FormulaParserManagerTests |
| { |
| #region test classes |
| |
| private class MyFunction : ExcelFunction |
| { |
| public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) |
| { |
| throw new NotImplementedException(); |
| } |
| } |
| |
| private class MyModule : IFunctionModule |
| { |
| public MyModule() |
| { |
| Functions = new Dictionary<string, ExcelFunction>(); |
| Functions.Add("MyFunction", new MyFunction()); |
| |
| CustomCompilers = new Dictionary<Type, FunctionCompiler>(); |
| } |
| public IDictionary<string, ExcelFunction> Functions { get; } |
| public IDictionary<Type, FunctionCompiler> CustomCompilers { get; } |
| } |
| #endregion |
| |
| [TestMethod] |
| public void FunctionsShouldBeCopied() |
| { |
| using (var package1 = new ExcelPackage()) |
| { |
| package1.Workbook.FormulaParserManager.LoadFunctionModule(new MyModule()); |
| using (var package2 = new ExcelPackage()) |
| { |
| var origNumberOfFuncs = package2.Workbook.FormulaParserManager.GetImplementedFunctionNames().Count(); |
| |
| // replace functions including the custom functions from package 1 |
| package2.Workbook.FormulaParserManager.CopyFunctionsFrom(package1.Workbook); |
| |
| // Assertions: number of functions are increased with 1, and the list of function names contains the custom function. |
| Assert.AreEqual(origNumberOfFuncs + 1, package2.Workbook.FormulaParserManager.GetImplementedFunctionNames().Count()); |
| Assert.IsTrue(package2.Workbook.FormulaParserManager.GetImplementedFunctionNames().Contains("myfunction")); |
| } |
| } |
| } |
| } |
| } |