コード例 #1
0
        private static void CreateHttpControllerTypeResolverTracer(HttpConfiguration configuration, ITraceWriter traceWriter)
        {
            DefaultHttpControllerTypeResolver resolver =
                configuration.Services.GetHttpControllerTypeResolver() as DefaultHttpControllerTypeResolver;

            if (resolver != null)
            {
                IHttpControllerTypeResolver tracer = new DefaultHttpControllerTypeResolverTracer(resolver, traceWriter);
                configuration.Services.Replace(typeof(IHttpControllerTypeResolver), tracer);
            }
        }
        public void IsControllerTypePredicateProperty_SameAsInInner()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            Predicate<Type> innerPredicate = HttpControllerTypeResolver.Object.IsControllerTypePredicate;
            Predicate<Type> tracerPredicate = tracer.IsControllerTypePredicate;

            // Assert
            Assert.NotNull(tracerPredicate);
            Assert.Same(innerPredicate, tracerPredicate);
        }
        public void IsControllerTypePredicateProperty_RoundTrips()
        {
            // Arrange
            Predicate<Type> expectedPredicate = type => type != null;
            DefaultHttpControllerTypeResolver resolver = new DefaultHttpControllerTypeResolver(expectedPredicate);

            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(resolver, traceWriter);

            // Act
            Predicate<Type> predicate = tracer.IsControllerTypePredicate;

            // Assert
            Assert.NotNull(predicate);
            Assert.Same(expectedPredicate, predicate);
        }
        public void Decorator_GetInner_ReturnsOriginal()
        {
            // Arrange
            DefaultHttpControllerTypeResolver expectedResolver = HttpControllerTypeResolver.Object;
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            DefaultHttpControllerTypeResolver resolver = Decorator.GetInner(tracer as DefaultHttpControllerTypeResolver);

            // Assert
            Assert.NotNull(resolver);
            Assert.Same(expectedResolver, resolver);
        }
        public void InnerProperty_ReturnsOriginal()
        {
            // Arrange
            DefaultHttpControllerTypeResolver expectedResolver = HttpControllerTypeResolver.Object;
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            DefaultHttpControllerTypeResolver resolver = tracer.Inner;

            // Assert
            Assert.NotNull(resolver);
            Assert.Same(expectedResolver, resolver);
        }
        public void GetControllerTypes_TracesAsExpected()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            ICollection<Type> types = tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert
            Assert.NotNull(traceWriter.Traces);
            Assert.Equal(ExpectedTraces, traceWriter.Traces, new TraceRecordComparer());
        }
        public void GetControllerTypes_ReturnsExpectedTypes()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            ICollection<Type> types = tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert
            Assert.NotNull(types);
            Assert.NotEmpty(types);
            Assert.Equal(ExpectedTypes, types);
        }
        public void GetControllerTypes_CallsMocks()
        {
            // Arrange
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            tracer.GetControllerTypes(AssembliesResolver.Object);

            // Assert (particularly important tracer delegates to original DefaultHttpControllerTypeResolver)
            HttpControllerTypeResolver.Verify(
                controller => controller.GetControllerTypes(AssembliesResolver.Object), Times.Once());

            // Predicate is not called on null entries or internal types in the Type arrays (see TypeIsVisible)
            HttpControllerTypeResolver.VerifyGet(controller => controller.IsControllerTypePredicate, Times.Exactly(7));

            AssembliesResolver.Verify(resolver => resolver.GetAssemblies(), Times.Once());
            foreach (Mock<MockableAssembly> mock in Assemblies)
            {
                mock.VerifyGet(assembly => assembly.IsDynamic, Times.Once());
                mock.Verify(assembly => assembly.GetTypes(), mock.Object.IsDynamic ? Times.Never() : Times.Once());
            }
        }