public LocalVariableDeclarationMutator(SyntaxNode classRootNode, MutantCreator mutantCreator, SemanticModel semanticModel, RandomTypeGenerator randomTypeGenerator) { _classRootNode = classRootNode; _mutantCreator = mutantCreator; _semanticModel = semanticModel; _randomTypeGenerator = randomTypeGenerator; }
public AssignmentExprMutator(SyntaxNode classRootNode, MutantCreator mutantCreator, SemanticModel semanticModel, RandomTypeGenerator randomTypeGenerator) { _classRootNode = classRootNode; _mutantCreator = mutantCreator; _semanticModel = semanticModel; _randomTypeGenerator = randomTypeGenerator; }
private List <GeneratedMutant> GenerateMutantsForProject( Compilation projectAssembly, SemanticModel projectSemanticModel, List <string> options, Workspace workspace, List <Class> projectClasses, Solution solution, string projectOutputFilePath) { var generatedMutants = new List <GeneratedMutant>(); foreach (var syntaxTree in projectAssembly.SyntaxTrees) { var root = syntaxTree.GetRoot() as CompilationUnitSyntax; var namespaces = root.DescendantNodes().OfType <NamespaceDeclarationSyntax>().ToList(); foreach (NamespaceDeclarationSyntax ns in namespaces) { var namespaceClasses = ns.DescendantNodes().OfType <ClassDeclarationSyntax>().ToList(); var namespaceTreeRoot = ns.SyntaxTree.GetRoot(); var name = ns.Name.NormalizeWhitespace().ToFullString(); if (!name.Contains("DbObject")) { if (namespaceClasses.Count != 0) { Usings.AddRange(namespaceTreeRoot.DescendantNodes() .OfType <UsingDirectiveSyntax>().ToList()); var selfUsing = CreateUsingDirective(name); selfUsing = selfUsing.WithUsingKeyword( selfUsing.UsingKeyword.WithTrailingTrivia( SyntaxFactory.Whitespace(" "))); Usings.Add(selfUsing); foreach (ClassDeclarationSyntax cls in namespaceClasses) { var classMethods = cls.DescendantNodes().OfType <MethodDeclarationSyntax>().ToList(); if (classMethods.Count != 0) { var className = cls.Identifier.Value.ToString(); var mutantCreator = new MutantCreator(className, cls); var typeResolver = new RandomTypeGenerator(projectClasses); //mutate boundary operators if (options.Contains("1")) { mutantCreator.MutatorType = "BOM"; var boundaryOpMutator = new BoundaryOpMutator (cls, mutantCreator); boundaryOpMutator.Visit(cls); } //nagate relational and equality operators if (options.Contains("2")) { mutantCreator.MutatorType = "REOM"; var relationalAndEqOpMutator = new RelationalAndEqualityOpMutator (cls, mutantCreator); relationalAndEqOpMutator.Visit(cls); } //mutate non basic conditionals if (options.Contains("3")) { //replace complex boolean expressions with true or false mutantCreator.MutatorType = "RNBCM"; var conditionaleMutator = new RemoveNonBasicConditionalsMutator (cls, mutantCreator); conditionaleMutator.Visit(cls); } //mutate math operators if (options.Contains("4")) { mutantCreator.MutatorType = "MOM"; var mathOperatorMutator = new MathOperatorsMutator (cls, mutantCreator, projectSemanticModel); mathOperatorMutator.Visit(cls); } //mutate assignment expressions if (options.Contains("5")) { //replace an assignment expression right part with the //default value for the desired type mutantCreator.MutatorType = "AEM"; var assignmentExprMutator = new AssignmentExprMutator (cls, mutantCreator, projectSemanticModel, typeResolver); assignmentExprMutator.Visit(cls); } //mutate return statements if (options.Contains("6")) { //replace an return statement //value with a random generated value for that type mutantCreator.MutatorType = "REM"; var returnStatementMutator = new ReturnExpressionMutator (cls, mutantCreator, projectSemanticModel, typeResolver); returnStatementMutator.Visit(cls); } //mutate void method calls if (options.Contains("7")) { //remove void mthod calls statements mutantCreator.MutatorType = "VMCM"; var voidMethodCallMutator = new VoidMethodCallMutator (cls, mutantCreator, projectSemanticModel); voidMethodCallMutator.Visit(cls); } if (options.Contains("8") && !options.Contains("5")) { //deletes all class's members assignments (global variables assignments) mutantCreator.MutatorType = "CMAD"; var classFields = namespaceClasses.ElementAt(0) .DescendantNodes().OfType <FieldDeclarationSyntax>().ToList(); var classFieldsIdentifiers = new List <string>(); foreach (FieldDeclarationSyntax field in classFields) { classFieldsIdentifiers.Add( field.Declaration.Variables.First().Identifier.ToString()); } var classMembersAssignmentsDeletion = new ClassMemberAssignDel (cls, mutantCreator, classFieldsIdentifiers); classMembersAssignmentsDeletion.Visit(cls); } //mutate local variable declaration with initializer statements if (options.Contains("9")) { mutantCreator.MutatorType = "LVDM"; var voidMethodCallMutator = new LocalVariableDeclarationMutator (cls, mutantCreator, projectSemanticModel, typeResolver); voidMethodCallMutator.Visit(cls); } generatedMutants.AddRange(mutantCreator.GetMutatedClasses()); } } } } //else //{ // MessageBox.Show(string.Format("Ignored namespace: {0}", name)); //} } } return(generatedMutants); }