Exemplo n.º 1
0
        public static bool IsApiControllerAction(ApiControllerSymbolCache symbolCache, IMethodSymbol method)
        {
            if (method == null)
            {
                return(false);
            }

            if (method.ReturnsVoid || method.ReturnType.TypeKind == TypeKind.Error)
            {
                return(false);
            }

            if (!MvcFacts.IsController(method.ContainingType, symbolCache.ControllerAttribute, symbolCache.NonControllerAttribute))
            {
                return(false);
            }

            if (!method.ContainingType.HasAttribute(symbolCache.IApiBehaviorMetadata, inherit: true))
            {
                return(false);
            }

            if (!MvcFacts.IsControllerAction(method, symbolCache.NonActionAttribute, symbolCache.IDisposableDispose))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 2
0
        private async Task IsControllerReturnsTrue(Type type)
        {
            var compilation = await GetIsControllerCompilation();

            var controllerAttribute    = compilation.GetTypeByMetadataName(ControllerAttribute);
            var nonControllerAttribute = compilation.GetTypeByMetadataName(NonControllerAttribute);
            var typeSymbol             = compilation.GetTypeByMetadataName(type.FullName);

            // Act
            var isController = MvcFacts.IsController(typeSymbol, controllerAttribute, nonControllerAttribute);

            // Assert
            Assert.True(isController);
        }
Exemplo n.º 3
0
        private async Task IsActionReturnsTrue(Type type, string methodName)
        {
            var compilation = await GetIsControllerActionCompilation();

            var nonActionAttribute = compilation.GetTypeByMetadataName(NonActionAttribute);
            var disposableDispose  = GetDisposableDispose(compilation);
            var typeSymbol         = compilation.GetTypeByMetadataName(type.FullName);
            var method             = (IMethodSymbol)typeSymbol.GetMembers(methodName).First();

            // Act
            var isControllerAction = MvcFacts.IsControllerAction(method, nonActionAttribute, disposableDispose);

            // Assert
            Assert.True(isControllerAction);
        }
Exemplo n.º 4
0
        public async Task IsAction_ReturnsTrueForNotDisposableDisposeOnTypeWithImplicitImplementation()
        {
            var compilation = await GetIsControllerActionCompilation();

            var nonActionAttribute = compilation.GetTypeByMetadataName(NonActionAttribute);
            var disposableDispose  = GetDisposableDispose(compilation);
            var typeSymbol         = compilation.GetTypeByMetadataName(typeof(NotDisposableWithDisposeThatIsNotInterfaceContract).FullName);
            var method             = typeSymbol.GetMembers(nameof(IDisposable.Dispose)).OfType <IMethodSymbol>().First(f => !f.ReturnsVoid);

            // Act
            var isControllerAction = MvcFacts.IsControllerAction(method, nonActionAttribute, disposableDispose);

            // Assert
            Assert.True(isControllerAction);
        }