public CombatHandler() { _preCombatLogic = new HookExecutor("PreCombatLogic", null, new ActionAlwaysFail()); _preCombatBuff = new HookExecutor("PreCombatBuff", null, RoutineManager.Current.PreCombatBuffBehavior ?? new ActionAlwaysFail()); _heal = new HookExecutor("Heal", null, RoutineManager.Current.HealBehavior ?? new ActionAlwaysFail()); _pull = new HookExecutor("Pull", null, RoutineManager.Current.PullBehavior ?? new ActionAlwaysFail()); _combatBuff = new HookExecutor("CombatBuff", null, RoutineManager.Current.CombatBuffBehavior ?? new ActionAlwaysFail()); _combatBehavior = new HookExecutor("Combat", null, RoutineManager.Current.CombatBehavior ?? new ActionAlwaysFail()); _rest = new HookExecutor("Rest", null, RoutineManager.Current.RestBehavior ?? new ActionAlwaysFail()); }
public void ShoudExecuteHooksWithExecutionContext() { var mockInstance = new Mock <object>().Object; var mockClassInstanceManagerType = new Mock <Type>().Object; var mockClassInstanceManager = new ThreadLocal <object>(() => new Mock <object>().Object); var mockAssemblyLoader = new Mock <IAssemblyLoader>(); var type = LibType.BeforeSuite; var methodInfo = new MockMethodBuilder(mockAssemblyLoader) .WithName($"{type}Hook") .WithFilteredHook(type) .WithDeclaringTypeName("my.foo.type") .WithParameters(new KeyValuePair <Type, string>(typeof(ExecutionContext), "context")) .Build(); mockAssemblyLoader.Setup(x => x.GetMethods(type)).Returns(new List <MethodInfo> { methodInfo }); mockAssemblyLoader.Setup(x => x.ClassInstanceManagerType).Returns(mockClassInstanceManagerType); var executionInfo = new ExecutionInfo(); var mockReflectionWrapper = new Mock <IReflectionWrapper>(); mockReflectionWrapper .Setup(x => x.InvokeMethod(mockClassInstanceManagerType, mockClassInstanceManager, "Get", methodInfo.DeclaringType)) .Returns(mockInstance); var expectedExecutionInfo = new ExecutionContext(); var mockExecutionInfoMapper = new Mock <IExecutionInfoMapper>(); mockExecutionInfoMapper.Setup(x => x.ExecutionContextFrom(executionInfo)) .Returns(expectedExecutionInfo); mockReflectionWrapper.Setup(x => x.Invoke(methodInfo, mockInstance, expectedExecutionInfo)) .Verifiable(); var executor = new HookExecutor(mockAssemblyLoader.Object, mockReflectionWrapper.Object, mockClassInstanceManager, mockExecutionInfoMapper.Object); var result = executor.Execute("BeforeSuite", new HooksStrategy(), new List <string>(), executionInfo); Assert.True(result.Success, $"Hook execution failed: {result.ExceptionMessage}\n{result.StackTrace}"); mockReflectionWrapper.VerifyAll(); }
public void ShoudExecuteHooksAndGetTheError() { var mockInstance = new Mock <object>().Object; var mockClassInstanceManagerType = new Mock <Type>().Object; var mockClassInstanceManager = new ThreadLocal <object>(() => new Mock <object>().Object); var mockAssemblyLoader = new Mock <IAssemblyLoader>(); var type = LibType.BeforeSuite; var methodInfo = new MockMethodBuilder(mockAssemblyLoader) .WithName($"{type}Hook") .WithFilteredHook(type) .WithDeclaringTypeName("my.foo.type") .Build(); mockAssemblyLoader.Setup(x => x.GetMethods(type)).Returns(new List <MethodInfo> { methodInfo }); mockAssemblyLoader.Setup(x => x.ClassInstanceManagerType).Returns(mockClassInstanceManagerType); var mockReflectionWrapper = new Mock <IReflectionWrapper>(); mockReflectionWrapper .Setup(x => x.InvokeMethod(mockClassInstanceManagerType, mockClassInstanceManager, "Get", methodInfo.DeclaringType)) .Returns(mockInstance); var mockExecutionInfoMapper = new Mock <IExecutionInfoMapper>(); mockExecutionInfoMapper.Setup(x => x.ExecutionContextFrom(It.IsAny <ExecutionInfo>())) .Returns(new { Foo = "bar" }); var executor = new HookExecutor(mockAssemblyLoader.Object, mockReflectionWrapper.Object, mockClassInstanceManager, mockExecutionInfoMapper.Object); mockReflectionWrapper.Setup(x => x.Invoke(methodInfo, mockInstance)) .Throws(new Exception("hook failed")); var result = executor.Execute("BeforeSuite", new HooksStrategy(), new List <string>(), new ExecutionInfo()); Assert.False(result.Success, "Hook execution passed, expected failure"); Assert.AreEqual(result.ExceptionMessage, "hook failed"); }
public void ShoudExecuteHooks() { var mockInstance = new Mock <object>().Object; var mockClassInstanceManagerType = new Mock <Type>().Object; var mockClassInstanceManager = new Mock <object>().Object; var mockAssemblyLoader = new Mock <IAssemblyLoader>(); var type = LibType.BeforeSuite; var methodInfo = new MockMethodBuilder(mockAssemblyLoader) .WithName($"{type}Hook") .WithFilteredHook(type) .WithDeclaringTypeName("my.foo.type") .Build(); mockAssemblyLoader.Setup(x => x.GetMethods(type)).Returns(new List <MethodInfo> { methodInfo }); mockAssemblyLoader.Setup(x => x.ClassInstanceManagerType).Returns(mockClassInstanceManagerType); var mockReflectionWrapper = new Mock <IReflectionWrapper>(); mockReflectionWrapper .Setup(x => x.InvokeMethod(mockClassInstanceManagerType, mockClassInstanceManager, "Get", methodInfo.DeclaringType)) .Returns(mockInstance); var executor = new HookExecutor(mockAssemblyLoader.Object, mockReflectionWrapper.Object, mockClassInstanceManager); mockReflectionWrapper.Setup(x => x.Invoke(methodInfo, mockInstance, new List <object>())) .Returns(null); var result = executor.Execute("BeforeSuite", new HooksStrategy(), new List <string>(), new ExecutionContext()); Assert.True(result.Success); }