public void MutantPlacer_ShouldPlaceWithConditionalExpression(int id) { // 1 + 8; var originalNode = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression, SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1)), SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(8))); // 1 - 8; var mutatedNode = SyntaxFactory.BinaryExpression(SyntaxKind.SubtractExpression, SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1)), SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(8))); var mutants = new List <(Mutant, ExpressionSyntax)> { (new Mutant { Id = id, Mutation = new Mutation { ReplacementNode = mutatedNode } }, mutatedNode) }; var result = MutantPlacer.PlaceExpressionControlledMutations(originalNode, mutants); result.ToFullString() .ShouldBeSemantically(@$ "({CodeInjection.HelperNamespace}.MutantControl.IsActive({id})?1-8:1+8)"); var removedResult = MutantPlacer.RemoveMutant(result); removedResult.ToString().ShouldBeSemantically(originalNode.ToString()); }
/// <inheritdoc/> /// <remarks>Inject all pending mutations controlled with conditional operator(s).</remarks> protected override ExpressionSyntax InjectMutations(T sourceNode, ExpressionSyntax targetNode, MutationContext context) { var result = MutantPlacer.PlaceExpressionControlledMutations( targetNode, context.ExpressionLevelMutations.Select(m => (m.Id, (ExpressionSyntax)sourceNode.InjectMutation(m.Mutation)))) as T; context.ExpressionLevelMutations.Clear(); return(result); }