Пример #1
0
        public void GetReturnType()
        {
            // Arrange
            var method = this.Calculator.MultiplyMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetReturnType(method, out TypeSyntax returnType);

            // Assert
            Assert.True(result);
            Assert.NotNull(returnType);
        }
Пример #2
0
        public void GetOrchestrationFunctionKind()
        {
            // Arrange
            var expectedFunctionKind = DurableFunctionKind.Orchestration;
            var method = this.Calculator.MultiplyMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionKind(method, out DurableFunctionKind kind);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedFunctionKind, kind);
        }
Пример #3
0
        public void GetMissingFunctionKind()
        {
            // Arrange
            var expectedFunctionKind = DurableFunctionKind.Unknonwn;
            var method = this.Calculator.DivideMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionKind(method, out DurableFunctionKind kind);

            // Assert
            Assert.False(result);
            Assert.Equal(expectedFunctionKind, kind);
        }
Пример #4
0
        public void GetMissingFunctionName()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.SubtractMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionName(model, method, out string functionName);

            // Assert
            Assert.False(result);
            Assert.Null(functionName);
        }
Пример #5
0
        public void GetActivityFunctionKind()
        {
            // Arrange
            var expectedFunctionKind = DurableFunctionKind.Activity;
            var method = this.Calculator.SubtractMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionKind(method, out DurableFunctionKind kind);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedFunctionKind, kind);
        }
Пример #6
0
        public void GetQualifiedName()
        {
            // Arrange
            var expectedQualifiedName = "WebJobs.Extensions.DurableTask.CodeGen.Example.Calculator.Add";
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetQualifiedTypeName(model, method, out string qualifiedName);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedQualifiedName, qualifiedName);
        }
Пример #7
0
        public void GetExistingFunctionName()
        {
            // Arrange
            var expectedFunctionName = "Add";
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionName(model, method, out string functionName);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedFunctionName, functionName);
        }
Пример #8
0
        public void GetGenericParameterFromLocalDeclaration()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddListMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> parameters);

            // Assert
            Assert.True(result);
            Assert.Single(parameters);
            Assert.Equal("List<int>", parameters[0].Type.ToString());
            Assert.Equal("nums", parameters[0].Name.ToString());
        }
Пример #9
0
        public void GetRequiredNamespaces()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddComplexMethod;

            var parameterTypes = SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> typedParameters);
            var usedTypes      = typedParameters.Select(p => p.Type).ToList();

            // Act
            var result = SyntaxNodeUtility.TryGetRequiredNamespaces(model, usedTypes, out HashSet <string> requiredNamespaces);

            // Assert
            Assert.True(result);
            Assert.Single(requiredNamespaces);
            Assert.Equal("WebJobs.Extensions.DurableTask.CodeGen.Example.Models", requiredNamespaces.First());
        }
Пример #10
0
        public void GetGenericParametersFromAssignment()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddListsMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> parameters);

            // Assert
            Assert.True(result);
            Assert.Equal(2, parameters.Count);
            Assert.Equal("List<int>", parameters[0].Type.ToString());
            Assert.Equal("List<int>", parameters[1].Type.ToString());
            Assert.Equal("nums1", parameters[0].Name.ToString());
            Assert.Equal("nums2", parameters[1].Name.ToString());
        }
        public static bool TryParse(SemanticModel model, MethodDeclarationSyntax method, out DurableFunction function)
        {
            function = null;

            if (!SyntaxNodeUtility.TryGetFunctionName(model, method, out string name))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetFunctionKind(method, out DurableFunctionKind kind))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetReturnType(method, out TypeSyntax returnType))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> parameters))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetQualifiedTypeName(model, method, out string fullTypeName))
            {
                return(false);
            }

            var usedTypes = new List <TypeSyntax>();

            usedTypes.Add(returnType);
            usedTypes.AddRange(parameters.Select(p => p.Type));

            if (!SyntaxNodeUtility.TryGetRequiredNamespaces(model, usedTypes, out HashSet <string> requiredNamespaces))
            {
                return(false);
            }

            requiredNamespaces.UnionWith(GetRequiredGlobalNamespaces());

            function = new DurableFunction(fullTypeName, name, kind, parameters, returnType, requiredNamespaces);
            return(true);
        }
Пример #12
0
        public void GetRequiredNamespacesWithGenerics()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddListComplexMethod;

            SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> typedParameters);
            var usedTypes = typedParameters.Select(p => p.Type).ToList();

            // Act
            var result = SyntaxNodeUtility.TryGetRequiredNamespaces(model, usedTypes, out HashSet <string> requiredNamespaces);

            // Assert
            Assert.True(result);
            Assert.Equal(2, requiredNamespaces.Count);
            var requiredNamespaceList = requiredNamespaces.ToList();

            Assert.Equal("System.Collections.Generic", requiredNamespaceList[0]);
            Assert.Equal("WebJobs.Extensions.DurableTask.CodeGen.Example.Models", requiredNamespaceList[1]);
        }