| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Text; | |
| using System.Threading.Tasks; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml.FormulaParsing; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; | |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph; | |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers; | |
| namespace EPPlusTest.FormulaParsing.ExpressionGraph.FunctionCompilers | |
| { | |
| [TestClass] | |
| public class FunctionCompilerFactoryTests | |
| { | |
| #region Create Tests | |
| [TestMethod] | |
| public void CreateHandlesStandardFunctionCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new Sum(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(DefaultCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesSpecialIfCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new If(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(IfFunctionCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesSpecialIfErrorCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new IfError(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(IfErrorFunctionCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesSpecialIfNaCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new IfNa(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(IfNaFunctionCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesLookupFunctionCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new Column(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(LookupFunctionCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesErrorFunctionCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new IsError(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(ErrorHandlingFunctionCompiler)); | |
| } | |
| [TestMethod] | |
| public void CreateHandlesCustomFunctionCompiler() | |
| { | |
| var functionRepository = FunctionRepository.Create(); | |
| functionRepository.LoadModule(new TestFunctionModule()); | |
| var functionCompilerFactory = new FunctionCompilerFactory(functionRepository); | |
| var function = new MyFunction(); | |
| var functionCompiler = functionCompilerFactory.Create(function); | |
| Assert.IsInstanceOfType(functionCompiler, typeof(MyFunctionCompiler)); | |
| } | |
| #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 | |
| } | |
| } |