blob: eef31344076ceb92e53b66c2a24d96b312447634 [file] [log] [blame]
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml.FormulaParsing;
using OfficeOpenXml.FormulaParsing.Excel.Functions;
using OfficeOpenXml.FormulaParsing.ExpressionGraph;
using OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers;
namespace EPPlusTest.FormulaParsing.Excel.Functions
{
[TestClass]
public class FunctionRepositoryTests
{
#region LoadModule Tests
[TestMethod]
public void LoadModulePopulatesFunctionsAndCustomCompilers()
{
var functionRepository = FunctionRepository.Create();
Assert.IsFalse(functionRepository.IsFunctionName(MyFunction.Name));
Assert.IsFalse(functionRepository.CustomCompilers.ContainsKey(typeof(MyFunction)));
functionRepository.LoadModule(new TestFunctionModule());
Assert.IsTrue(functionRepository.IsFunctionName(MyFunction.Name));
Assert.IsTrue(functionRepository.CustomCompilers.ContainsKey(typeof(MyFunction)));
// Make sure reloading the module overwrites previous functions and compilers
functionRepository.LoadModule(new TestFunctionModule());
}
#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
}
}