Exemple #1
0
        public void MutantFilters_ConstructorFilterShouldNotMatchMethod()
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        myInstance.Myctor(
            $""This is my interpolatedString {myVariable}."");
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf("is", StringComparison.OrdinalIgnoreCase), 2));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions(ignoredMethods: new [] { "M.ctor" });

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            filteredMutants.ShouldContain(mutant);
        }
Exemple #2
0
        public void MutantFilters_ShouldIgnoreSyntaxWithoutInvocations()
        {
            // Arrange
            var originalNode = SyntaxFactory.BinaryExpression(
                SyntaxKind.AddExpression,
                SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1)),
                SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(8)));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions(ignoredMethods: new[] { "Fact" });

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            filteredMutants.ShouldContain(mutant);
        }
        public void MutantFilters_DoesNotIgnoreOtherMutantsInFile()
        {
            // Arrange
            var source = @"
public class MutantFilters_DoNotIgnoreOtherMutantsInFile
{
    private void TestMethod()
    {
        Foo(true);
        Bar(""A Mutation"");
        Quux(42);
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var mutants = new[] { "true", @"""A Mutation""", "42" }.Select(GetOriginalNode).Select(node => new Mutant {
                Mutation = new Mutation {
                    OriginalNode = node
                }
            }).ToArray();
            var options = new StrykerOptions(ignoredMethods: new[] { "Bar" });
            var sut     = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(mutants, null, options);

            // Assert
            filteredMutants.ShouldContain(mutants[0]);    // Foo(true);
            filteredMutants.ShouldNotContain(mutants[1]); // Bar(""A Mutation"");
            filteredMutants.ShouldContain(mutants[2]);    // Quux(42);

            Microsoft.CodeAnalysis.SyntaxNode GetOriginalNode(string node) =>
            baseSyntaxTree.FindNode(new TextSpan(source.IndexOf(node, StringComparison.OrdinalIgnoreCase), node.Length));
        }
Exemple #4
0
        public void MutantFilters_ShouldNotApplyWithoutIgnoredMethod()
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        var t = Enumerable.Range(0, 9).Where(x => x < 5).ToList();
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf('<'), 1));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions();

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            filteredMutants.ShouldContain(mutant);
        }
        public void ShouldFilterStandaloneInvocation(string ignoredMethodName)
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        Dispose();
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf('D'), 1));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions(ignoredMethods: new[] { ignoredMethodName });

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            filteredMutants.ShouldNotContain(mutant);
        }
        public void ShouldFilterStatementAndBlockWithOnlyIgnoredMethods()
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        Dispose();
        Dispose();
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = (StatementSyntax)baseSyntaxTree.DescendantNodes().First(t => t is StatementSyntax and not BlockSyntax);

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions
            {
                IgnoredMethods = new IgnoreMethodsInput {
                    SuppliedInput = new[] { "Dispose" }
                }.Validate()
            };

            var blockMutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = (BlockSyntax)baseSyntaxTree.DescendantNodes().First(t => t is BlockSyntax),
                }
            };

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant, blockMutant }, null, options);

            // Assert
            filteredMutants.ShouldBeEmpty();
        }
        public void MutantFilter_ShouldIgnoreConstructor(string ignoredMethodName, bool shouldSkipMutant)
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        var t = new Foo
                    .MyType(""Param"");
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf("Param", StringComparison.OrdinalIgnoreCase), 5));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions
            {
                IgnoredMethods = new IgnoreMethodsInput {
                    SuppliedInput = new[] { ignoredMethodName }
                }.Validate()
            };

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            if (shouldSkipMutant)
            {
                filteredMutants.ShouldNotContain(mutant);
            }
            else
            {
                filteredMutants.ShouldContain(mutant);
            }
        }
        public void ShouldFilterInvocationWithQualifiedMemberName(string ignoredMethodName, bool shouldSkipMutant)
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        Bar // comment
            .Foo.Dispose();
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf("Dispose"), 1));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions
            {
                IgnoredMethods = new IgnoreMethodsInput {
                    SuppliedInput = new[] { ignoredMethodName }
                }.Validate()
            };

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            if (shouldSkipMutant)
            {
                filteredMutants.ShouldNotContain(mutant);
            }
            else
            {
                filteredMutants.ShouldContain(mutant);
            }
        }
        public void MutantFilter_ChainedMethodsCalls(string ignoredMethodName, bool shouldSkipMutant)
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        var t = Enumerable.Range(0, 9).Where(x => x < 5).ToList();
    }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = baseSyntaxTree.FindNode(new TextSpan(source.IndexOf('<'), 1));

            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            var options = new StrykerOptions
            {
                IgnoredMethods = new IgnoreMethodsInput {
                    SuppliedInput = new[] { ignoredMethodName }
                }.Validate()
            };

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant }, null, options);

            // Assert
            if (shouldSkipMutant)
            {
                filteredMutants.ShouldNotContain(mutant);
            }
            else
            {
                filteredMutants.ShouldContain(mutant);
            }
        }
        public static void ShouldHaveName()
        {
            var target = new IgnoredMethodMutantFilter() as IMutantFilter;

            target.DisplayName.ShouldBe("method filter");
        }
        public void ShouldFilterStatementAndBlockWithNonIgnoredMethods()
        {
            // Arrange
            var source         = @"
public class IgnoredMethodMutantFilter_NestedMethodCalls
{
    private void TestMethod()
    {
        Dispose();
        for(;;)
            TestMethod();
        x = x+2;
   }
}";
            var baseSyntaxTree = CSharpSyntaxTree.ParseText(source).GetRoot();
            var originalNode   = (StatementSyntax)baseSyntaxTree.DescendantNodes().First(t => t is StatementSyntax and not BlockSyntax);
            // this mutant is call to Dispose and should be ignored
            var mutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            // this is an arbitrary statement mutation that should not be filtered
            originalNode = (StatementSyntax)baseSyntaxTree.DescendantNodes().Where(t => t is StatementSyntax and not BlockSyntax).ElementAt(3);

            var statementMutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = originalNode,
                }
            };

            // this is a block mutations that contains non ignored methods it should not be filtered
            var blockMutant = new Mutant
            {
                Mutation = new Mutation
                {
                    OriginalNode = (BlockSyntax)baseSyntaxTree.DescendantNodes().First(t => t is BlockSyntax),
                }
            };

            var options = new StrykerOptions
            {
                IgnoredMethods = new IgnoreMethodsInput {
                    SuppliedInput = new[] { "Dispose" }
                }.Validate()
            };

            var sut = new IgnoredMethodMutantFilter();

            // Act
            var filteredMutants = sut.FilterMutants(new[] { mutant, blockMutant, statementMutant }, null, options);

            // Assert
            filteredMutants.ShouldNotContain(mutant);
            filteredMutants.ShouldContain(blockMutant);
            filteredMutants.ShouldContain(statementMutant);
        }