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