public void robot_recharger_recharges_robot() { var specs = new HasSpecLocator().Locate<Robot>(); var mockRecharger = new Mock<IRobotRecharger>(); var robot = new Robot(mockRecharger.Object) { Charge = 10 }; specs.ForEach(s => s.GetSpec().Run(robot)); mockRecharger.Verify(x => x.Recharge(robot)); }
public void robot_recharger_recharges_robot() { var specs = new HasSpecLocator().Locate <Robot>(); var mockRecharger = new Mock <IRobotRecharger>(); var robot = new Robot(mockRecharger.Object) { Charge = 10 }; specs.ForEach(s => s.GetSpec().Run(robot)); mockRecharger.Verify(x => x.Recharge(robot)); }
public void spec_locator_can_find_specs() { var specs = new HasSpecLocator().Locate <Robot>(); Assert.True(specs.Any()); }
public override void OnExit(PostSharp.Aspects.MethodExecutionArgs args) { if (args.Arguments.Any()) { args.Arguments .ToList().ForEach( argument => { var locator = new HasSpecLocator(); var specs = typeof(HasSpecLocator) .GetMethod("Locate") .MakeGenericMethod(argument.GetType()) .Invoke(locator, BindingFlags.Public, null, null, null); foreach (var iHasSpec in ((IEnumerable)specs)) { var spec = typeof(IHasSpec<>) .MakeGenericType(argument.GetType()) .GetMethod("GetSpec") .Invoke(iHasSpec, new object[] { }); var list = Activator.CreateInstance(typeof(List<>).MakeGenericType(argument.GetType())); typeof(List<>).MakeGenericType(argument.GetType()) .GetMethod("Add") .Invoke(list, new object[] { argument }); var arr = typeof(List<>).MakeGenericType(argument.GetType()) .GetMethod("ToArray") .Invoke(list, new object[] { }); typeof(Spec<>) .MakeGenericType(argument.GetType()) .GetMethod("Run") .Invoke(spec, new object[] { arr }); } }); } else { var locator = new HasSpecLocator(); var specs = typeof(HasSpecLocator) .GetMethod("Locate") .MakeGenericMethod(args.Instance.GetType()) .Invoke(locator, BindingFlags.Public, null, null, null); foreach (var iHasSpec in ((IEnumerable)specs)) { var spec = typeof(IHasSpec<>) .MakeGenericType(args.Instance.GetType()) .GetMethod("GetSpec") .Invoke(iHasSpec, new object[] { }); var list = Activator.CreateInstance(typeof(List<>).MakeGenericType(args.Instance.GetType())); typeof(List<>).MakeGenericType(args.Instance.GetType()) .GetMethod("Add") .Invoke(list, new object[] { args.Instance }); var arr = typeof(List<>).MakeGenericType(args.Instance.GetType()) .GetMethod("ToArray") .Invoke(list, new object[] { }); typeof(Spec<>) .MakeGenericType(args.Instance.GetType()) .GetMethod("Run") .Invoke(spec, new object[] { arr }); } } }
public void spec_locator_can_find_specs() { var specs = new HasSpecLocator().Locate<Robot>(); Assert.True(specs.Any()); }