示例#1
0
        public TestInfo[] Generate(string SourceCode)
        {
            SyntaxNode      TreeRoot = CSharpSyntaxTree.ParseText(SourceCode).GetRoot();
            List <TestInfo> result   = new List <TestInfo>();

            foreach (var SourceClass in TreeRoot.DescendantNodes().OfType <ClassDeclarationSyntax>())
            {
                string ClassName = SourceClass.Identifier.ValueText;
                var    methods   = SourceClass.DescendantNodes().OfType <MethodDeclarationSyntax>().Where(method => method.Modifiers.Any(SyntaxKind.PublicKeyword));

                NamespaceDeclarationSyntax NamespaceItem = SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName("UnitTests"));
                ClassDeclarationSyntax     ClassItem     = SyntaxFactory.ClassDeclaration($"{ClassName}Test").
                                                           AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword)).
                                                           AddAttributeLists(SyntaxFactory.AttributeList(SyntaxFactory.AttributeList().Attributes.Add(TestClassAttribute)));

                var unit = SyntaxFactory.CompilationUnit().
                           AddUsings(FormUsings(TreeRoot)).
                           AddMembers(NamespaceItem.
                                      AddMembers(ClassItem.
                                                 AddMembers(FormMethods(methods)
                                                            )));

                result.Add(new TestInfo()
                {
                    FileName = $"{ClassName}Test.cs", TestCode = unit.NormalizeWhitespace().ToFullString()
                });
            }

            return(result.ToArray());
        }