| 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")); | |
| } | |
| } | |
| } | |
| } | |
| } |