示例#1
0
        protected override ExpressionSyntax GetNewExpression(ExpressionSyntax expression, FluentAssertionsDiagnosticProperties properties)
        {
            if (properties.VisitorName == nameof(DictionaryShouldContainPairAnalyzer.ShouldContainKeyAndContainValueSyntaxVisitor))
            {
                var renameKeyArguments   = NodeReplacement.RenameAndExtractArguments("ContainKey", "Contain");
                var removeValueArguments = NodeReplacement.RemoveAndExtractArguments("ContainValue");
                var newExpression        = GetNewExpression(expression, NodeReplacement.RemoveMethodBefore("ContainValue"), renameKeyArguments, removeValueArguments);

                var newArguments = MergeContainKeyAndContainValueArguments(renameKeyArguments.Arguments, removeValueArguments.Arguments);

                return(GetNewExpression(newExpression, NodeReplacement.WithArguments("Contain", newArguments)));
            }
            else if (properties.VisitorName == nameof(DictionaryShouldContainPairAnalyzer.ShouldContainValueAndContainKeySyntaxVisitor))
            {
                var removeKeyArguments   = NodeReplacement.RemoveAndExtractArguments("ContainKey");
                var renameValueArguments = NodeReplacement.RenameAndExtractArguments("ContainValue", "Contain");
                var newExpression        = GetNewExpression(expression, NodeReplacement.RemoveMethodBefore("ContainKey"), removeKeyArguments, renameValueArguments);

                var newArguments = MergeContainKeyAndContainValueArguments(removeKeyArguments.Arguments, renameValueArguments.Arguments);

                return(GetNewExpression(newExpression, NodeReplacement.WithArguments("Contain", newArguments)));
            }
            else
            {
                throw new InvalidOperationException($"Invalid visitor name - {properties.VisitorName}");
            }
        }
示例#2
0
        protected override ExpressionSyntax GetNewExpression(ExpressionSyntax expression, FluentAssertionsDiagnosticProperties properties)
        {
            if (properties.VisitorName == nameof(NumericShouldBeInRangeAnalyzer.BeGreaterOrEqualToAndBeLessOrEqualToSyntaxVisitor))
            {
                var removeLess    = NodeReplacement.RemoveAndExtractArguments("BeLessOrEqualTo");
                var newExpression = GetNewExpression(expression, removeLess);

                var renameGreater = NodeReplacement.RenameAndExtractArguments("BeGreaterOrEqualTo", "BeInRange");
                newExpression = GetNewExpression(newExpression, renameGreater);

                var arguments = renameGreater.Arguments.InsertRange(1, removeLess.Arguments);

                return(GetNewExpression(newExpression, NodeReplacement.WithArguments("BeInRange", arguments)));
            }
            else if (properties.VisitorName == nameof(NumericShouldBeInRangeAnalyzer.BeLessOrEqualToAndBeGreaterOrEqualToSyntaxVisitor))
            {
                var removeGreater = NodeReplacement.RemoveAndExtractArguments("BeGreaterOrEqualTo");
                var newExpression = GetNewExpression(expression, removeGreater);

                var renameLess = NodeReplacement.RenameAndExtractArguments("BeLessOrEqualTo", "BeInRange");
                newExpression = GetNewExpression(newExpression, renameLess);

                var arguments = removeGreater.Arguments.InsertRange(1, renameLess.Arguments);

                return(GetNewExpression(newExpression, NodeReplacement.WithArguments("BeInRange", arguments)));
            }
            throw new System.InvalidOperationException($"Invalid visitor name - {properties.VisitorName}");
        }
示例#3
0
        private ExpressionSyntax ReplaceWithMessage(ExpressionSyntax expression, string whichOrAnd, string renameMethod, string prefix = "", string postfix = "")
        {
            var replacements = new[]
            {
                NodeReplacement.Remove(whichOrAnd),
                NodeReplacement.Remove("Message"),
                NodeReplacement.RemoveOccurrence("Should", occurrence: 2)
            };
            var newExpression = GetNewExpression(expression, replacements);
            var rename        = NodeReplacement.RenameAndExtractArguments(renameMethod, "WithMessage");

            newExpression = GetNewExpression(newExpression, rename);

            ArgumentSyntax newArgument = null;

            switch (rename.Arguments[0].Expression)
            {
            case IdentifierNameSyntax identifier:
                newArgument = SF.Argument(SF.ParseExpression($"$\"{prefix}{{{identifier.Identifier.Text}}}{postfix}\""));
                break;

            case LiteralExpressionSyntax literal:
                newArgument = SF.Argument(SF.ParseExpression($"\"{prefix}{literal.Token.ValueText}{postfix}\""));
                break;
            }

            var replacement = NodeReplacement.WithArguments("WithMessage", rename.Arguments.Replace(rename.Arguments[0], newArgument));

            return(GetNewExpression(newExpression, replacement));
        }