예제 #1
0
        public async Task ReplacesSetupMethodInClass()
        {
            var document  = DocumentProvider.CreateDocumentFromFile(TestClassWithEmptyConstructor);
            var root      = document.GetSyntaxRootAsync().Result;
            var testClass = root.DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>().First();

            _target = new DocumentBuilder(_memberFinder.Object, _fieldFinder.Object, document, testClass);

            var newSetupMethod =
                SyntaxNodeProvider.GetSyntaxNodeFromFile <ConstructorDeclarationSyntax>(Constructor, "ClassUnderTestTests");

            var existingSetupMethod = root.DescendantNodes().OfType <ConstructorDeclarationSyntax>().First();

            _memberFinder.Setup(_ =>
                                _.FindSimilarNode(It.IsAny <SyntaxList <MemberDeclarationSyntax> >(),
                                                  It.Is <SyntaxNode>(s => s == newSetupMethod)))
            .Returns(existingSetupMethod);

            var actual = await _target.WithSetupMethod(newSetupMethod)
                         .BuildAsync(new CancellationToken());

            var actualRoot = await actual.GetSyntaxRootAsync();

            var actualMethods = actualRoot.DescendantNodes().OfType <ConstructorDeclarationSyntax>().ToList();

            Assert.Single((IEnumerable)actualMethods);
            Assert.Equal(newSetupMethod.GetText().ToString(), actualMethods.First().GetText().ToString());
        }
예제 #2
0
        public async Task RewritesDefaultConstructor(string filePath)
        {
            // Arrange
            var filePathClassUnderTest = "files.ClassUnderTest.txt";
            var filePaths = new[] { filePath, filePathClassUnderTest };
            var documents = DocumentProvider.CreateCompilationAndReturnDocuments(filePaths);

            var documentWithTestClass = documents[filePath];
            var root = await documentWithTestClass.GetSyntaxRootAsync();

            var testClass = root.DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>().First();

            var documentWithClassUnderTest = documents[filePathClassUnderTest];
            var classUnderTest             = SyntaxNodeProvider.GetSyntaxNodeFromDocument <ClassDeclarationSyntax>(documentWithClassUnderTest, "ClassUnderTest");
            var semanticModel = await documentWithClassUnderTest.GetSemanticModelAsync();

            _classUnderTestFinder.Setup(_ => _.GetAsync(It.IsAny <Solution>(), It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(new ClassUnderTest(classUnderTest, semanticModel));

            // Act
            var actual = await _target.RegenerateSetup(documentWithTestClass, testClass, new CancellationToken());

            // Assert
            var actualText = await actual.GetTextAsync();

            _testOutput.WriteLine(actualText.ToString().Replace(";", ";\n"));

            var expected = await DocumentProvider.CreateDocumentFromFile("files.TestClass_WithFinalSetupConstructor.txt").GetTextAsync();

            Assert.Equal(expected.ToString().RemoveWhitespace(), actualText.ToString().RemoveWhitespace());
        }
        public async Task SetsFields(string testClassFilePath)
        {
            // Arrange
            var document  = DocumentProvider.CreateDocumentFromFile(testClassFilePath);
            var root      = document.GetSyntaxRootAsync().Result;
            var testClass = root.DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>().First();

            _target = new DocumentBuilder(_memberFinder.Object, _fieldFinder, document, testClass);

            var newFieldDeclarations =
                SyntaxNodeProvider.GetAllSyntaxNodesFromFile <FieldDeclarationSyntax>(FieldDeclarations).ToList();

            var expectedFieldDeclarations =
                SyntaxNodeProvider.GetAllSyntaxNodesFromFile <FieldDeclarationSyntax>(TestClassWithAllFields).ToList();
            var expected = GetCollectionTextAsString(expectedFieldDeclarations);

            // Act
            var actual = await _target.WithFields(newFieldDeclarations)
                         .BuildAsync(new CancellationToken());

            // Assert
            var actualRoot = await actual.GetSyntaxRootAsync();

            var actualFields = GetCollectionTextAsString(actualRoot.DescendantNodes().OfType <FieldDeclarationSyntax>());

            _testOutput.WriteLine(actualFields);

            Assert.Equal(expected, actualFields);
        }
예제 #4
0
        public void Returns_CorrectName_For_Parameter(string filePath, string parameterName, string expected)
        {
            var parameterSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <ParameterSyntax>(filePath, parameterName);

            var actual = _target.GetFromParameter(parameterSyntax);

            Assert.Equal(expected, actual);
        }
예제 #5
0
        public void GeneratesFieldNameWithUnderscoreAndLowerCase(string filePath, string parameterType, string expected)
        {
            var parameterSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <ParameterSyntax>(filePath, parameterType);

            var actual = _target.GetFromParameter(parameterSyntax);

            Assert.Equal(expected, actual);
        }
예제 #6
0
        public void Returns_SimilarClassSyntaxNode_IfExists(string filePath, string filePathCompared, string constructorOrMethodName, bool expected)
        {
            var memberSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <MemberDeclarationSyntax>(filePath, constructorOrMethodName);
            var classSyntax  = SyntaxNodeProvider.GetSyntaxNodeFromFile <ClassDeclarationSyntax>(filePathCompared, "TestClass");

            var actual = _target.FindSimilarNode(classSyntax.Members, memberSyntax);

            Assert.Equal(expected, actual != null);
        }
예제 #7
0
        public void CanFindSimilarField_When_FieldExistsWithSameType(string searchInFile)
        {
            var fieldSyntax = FieldDeclarationProvider.GetFieldDeclarationFromFile(FileContainingFieldToUse, FieldNameToUse);
            var classSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <ClassDeclarationSyntax>(searchInFile, ClassNameToUse);

            var actual = _target.FindSimilarNode(classSyntax.Members, fieldSyntax);

            Assert.NotNull(actual);
        }
        public void Returns_FieldDeclarationsWithCorrectName_ForEach_Parameter(string filePath, string parameterName, string expected)
        {
            var parameterSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <ParameterSyntax>(filePath, parameterName);
            var syntaxGenerator = new SyntaxGeneratorProvider().GetSyntaxGenerator();

            var actual = _target.GetGenericFieldDeclaration(parameterSyntax, "Mock", syntaxGenerator);

            var actualTextWithoutSpaces   = actual.GetText().ToString().Replace(" ", "");
            var expectedTextWithoutSpaces = expected.Replace(" ", "");

            Assert.Equal(expectedTextWithoutSpaces, actualTextWithoutSpaces);
        }
        public void ReturnsConstructorWithBody()
        {
            var filePath        = "files.ConstructorGenerator_DocumentWithOneClassAndVariables.txt";
            var source          = TextFileReader.ReadFile(filePath);
            var methodBody      = SyntaxNodeProvider.GetAllSyntaxNodesFromFile <LocalDeclarationStatementSyntax>(filePath);
            var syntaxGenerator = new SyntaxGeneratorProvider().GetSyntaxGenerator(source);
            var className       = "ClassA";

            var actual = _target.Constructor(className, methodBody, syntaxGenerator);

            Assert.Single(actual.DescendantNodes().OfType <LocalDeclarationStatementSyntax>());
        }
        public async Task Adds_Usings_For_All_Parameters(string filePath, string parameterName, string expectedNamespaces)
        {
            var source   = TextFileReader.ReadFile(filePath);
            var document = DocumentProvider.CreateDocument(source);

            var parameterSyntax = SyntaxNodeProvider.GetSyntaxNodeFromDocument <ParameterSyntax>(document, parameterName);
            var syntaxGenerator = new SyntaxGeneratorProvider().GetSyntaxGenerator();

            var semanticModel = await document.GetSemanticModelAsync();

            var usingDirectives = _target.UsingDirectives(semanticModel.Compilation, new[] { parameterSyntax }, new List <string>(), syntaxGenerator);

            Assert.Equal(expectedNamespaces, usingDirectives.First().Name.ToString());
        }
        public void ReturnsAllConstructorParameters()
        {
            var textFilePath           = "files.Class_WithConstructorWithTwoParameters.txt";
            var classDeclarationSyntax = SyntaxNodeProvider.GetSyntaxNodeFromFile <ClassDeclarationSyntax>(textFilePath, "TestClass");

            var actual = _target.GetParametersOfConstructor(classDeclarationSyntax).ToList();

            Assert.Equal(2, actual.Count);

            var firstParameter = actual.First();

            Assert.Equal("someType", firstParameter.Identifier.Text);
            Assert.Equal("ISomeType", firstParameter.Type.ToString());

            var secondParameter = actual.Skip(1).First();

            Assert.Equal("someOtherType", secondParameter.Identifier.Text);
            Assert.Equal("ISomeOtherType", secondParameter.Type.ToString());
        }
예제 #12
0
        public async Task SetsConstructorAndFields(string testClassFilePath)
        {
            // Arrange
            var document  = DocumentProvider.CreateDocumentFromFile(testClassFilePath);
            var root      = document.GetSyntaxRootAsync().Result;
            var testClass = root.DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>().First();

            _target = new DocumentBuilder(_memberFinder, _fieldFinder, document, testClass);

            var newFieldDeclarations =
                SyntaxNodeProvider.GetAllSyntaxNodesFromFile <FieldDeclarationSyntax>(FieldDeclarations).ToList();

            var expectedFieldDeclarations =
                SyntaxNodeProvider.GetAllSyntaxNodesFromFile <FieldDeclarationSyntax>(TestClassWithConstructorAndFields)
                .ToList();
            var expectedFields = GetCollectionTextAsString(expectedFieldDeclarations);

            var newSetupMethod =
                SyntaxNodeProvider.GetSyntaxNodeFromFile <ConstructorDeclarationSyntax>(Constructor, "ClassUnderTestTests");

            // Act
            var actual = await _target.WithSetupMethod(newSetupMethod)
                         .WithFields(newFieldDeclarations)
                         .BuildAsync(new CancellationToken());

            // Assert
            var actualRoot = await actual.GetSyntaxRootAsync();

            _testOutput.WriteLine(actualRoot.GetText().ToString());

            var actualFields = GetCollectionTextAsString(actualRoot.DescendantNodes().OfType <FieldDeclarationSyntax>());

            Assert.Equal(expectedFields, actualFields);

            var actualMethods = actualRoot.DescendantNodes().OfType <ConstructorDeclarationSyntax>().ToList();

            Assert.Single((IEnumerable)actualMethods);
            Assert.Equal(newSetupMethod.GetText().ToString(), actualMethods.First().GetText().ToString());
        }