public ModelTestClass Create(ModelClassInfo modelClassInfo, string testAssemblyBaseNamespace) { var ns = CreateNamespace(modelClassInfo.NamespaceDecl, testAssemblyBaseNamespace); var cd = InitializeClass(modelClassInfo.ClassName); cd = AppendSutField(cd, modelClassInfo.ClassName); cd = AppendSetUpMethod(cd, modelClassInfo.ClassName); cd = AppendConstructorTestMethod(cd, modelClassInfo.ClassName); ns = ns.AddMembers(cd); var fileContent = ns .NormalizeWhitespace() .ToFullString(); var testFileName = $"{modelClassInfo.ClassName}UnitTests.cs"; return(new ModelTestClass(testFileName, fileContent)); }
public FunctionResult <ModelClassInfo> TryCreatingFromFile(string filePath) { var fileContent = _fileSystem.File.ReadAllText(filePath); var tree = CSharpSyntaxTree.ParseText(fileContent); var root = tree.GetRoot(); var classDeclaration = root.DescendantNodes().OfType <ClassDeclarationSyntax>().FirstOrDefault(); if (classDeclaration == null) { return(FunctionResult.CreateFailure <ModelClassInfo>()); } var fullNamespace = root .DescendantNodes() .OfType <NamespaceDeclarationSyntax>().First() .Name .ToString(); var className = classDeclaration.Identifier.Text; var ctorDeclarations = root.DescendantNodes().OfType <ConstructorDeclarationSyntax>(); var ctors = ctorDeclarations.Select( ctorDecl => { var ctorParams = ctorDecl.DescendantNodes() .OfType <PredefinedTypeSyntax>() .Select(f => new Parameter(f.Keyword.ToString(), f.Keyword.ToString())) .ToList(); return(new Constructor(ctorParams)); }).ToList(); var classInfo = new ModelClassInfo(className, fullNamespace, ctors); return(FunctionResult.CreateSuccess(classInfo)); }