Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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 });
                }
            }
        }
Ejemplo n.º 5
0
 public void spec_locator_can_find_specs()
 {
     var specs = new HasSpecLocator().Locate<Robot>();
     Assert.True(specs.Any());
 }