blob: f93de36ad301c8817bb5755f680177cde2f7841a [file] [log] [blame]
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
}
}