예제 #1
0
        public void InitializeWithNullMethodInfoThrows()
        {
            var anonymousFactory = new DelegatingMethodFactory();

            Assert.Throws <ArgumentNullException>(() =>
                                                  new GenericMethod(null, anonymousFactory));
        }
예제 #2
0
        public void SutIsIMethod()
        {
            Action dummy            = delegate { };
            var    anonymousFactory = new DelegatingMethodFactory();
            var    sut = new GenericMethod(dummy.Method, anonymousFactory);

            Assert.IsAssignableFrom <IMethod>(sut);
        }
예제 #3
0
        public void FactoryIsCorrect()
        {
            var anonymousMethod = ((Action) delegate { }).Method;
            var expectedFactory = new DelegatingMethodFactory();
            var sut             = new GenericMethod(anonymousMethod, expectedFactory);

            var result = sut.Factory;

            Assert.Equal(expectedFactory, result);
        }
예제 #4
0
        public void ParametersIsCorrect()
        {
            Action <int, double> dummy = delegate { };
            var anonymousFactory       = new DelegatingMethodFactory();
            var expectedParameters     = dummy.Method.GetParameters();
            var sut = new GenericMethod(dummy.Method, anonymousFactory);

            var result = sut.Parameters;

            Assert.True(expectedParameters.SequenceEqual(result));
        }
예제 #5
0
        public void InvokeWithGenericMethodReturnsCorrectResult(Type targetType, int index, object values)
        {
            var method = (from mi in targetType
                          .GetMethods(BindingFlags.Static | BindingFlags.Public)
                          select mi).ElementAt(index);
            var factory = new DelegatingMethodFactory();

            factory.OnCreate = m => new StaticMethod(m);
            var sut = new GenericMethod(method, factory);

            var result = sut.Invoke((object[])values);

            Assert.IsAssignableFrom(targetType, result);
        }
예제 #6
0
        public void InvokeWithGenericMethodThatCannotBeInferedThrows(Type targetType, int index, object values)
        {
            var method = (from mi in targetType
                          .GetMethods(BindingFlags.Static | BindingFlags.Public)
                          select mi).ElementAt(index);
            var factory = new DelegatingMethodFactory();

            factory.OnCreate = m => new StaticMethod(m);
            var sut = new GenericMethod(method, factory);

            var exception = Assert.Throws <TypeArgumentsCannotBeInferredException>(
                () => sut.Invoke((object[])values));

            Assert.Contains(method.Name, exception.Message);
        }