Пример #1
0
        private RegexMutation QuantifierRemoval(QuantifierNode node, RegexNode root)
        {
            var       replacementNode = node.ChildNodes.FirstOrDefault();
            var       span            = node.GetSpan();
            int       length;
            RegexNode target;

            if (node.Parent is LazyNode)
            {
                target = node.Parent;
                length = span.Length + 1;
            }
            else
            {
                target = node;
                length = span.Length;
            }

            return(new RegexMutation
            {
                OriginalNode = target,
                ReplacementNode = replacementNode,
                DisplayName = "Regex quantifier removal mutation",
                Description = $"Quantifier \"{root.ToString().Substring(span.Start, length)}\" was removed at offset {span.Start}.",
                ReplacementPattern = root.ReplaceNode(target, replacementNode).ToString()
            });
        }
Пример #2
0
        private RegexMutation QuantityVariation(QuantifierNOrMoreNode node, RegexNode root, int from)
        {
            var replacementNode = new QuantifierNOrMoreNode(from, node.ChildNodes.FirstOrDefault());

            return(new RegexMutation
            {
                OriginalNode = node,
                ReplacementNode = replacementNode,
                DisplayName = "Regex greedy quantifier quantity mutation",
                Description = $"Quantifier \"{node}\" was replaced with \"{replacementNode}\" at offset {node.GetSpan().Start}.",
                ReplacementPattern = root.ReplaceNode(node, replacementNode).ToString()
            });
        }
Пример #3
0
        public override IEnumerable <RegexMutation> ApplyMutations(LookaroundGroupNode node, RegexNode root)
        {
            var replacementNode = new LookaroundGroupNode(node.Lookahead, !node.Possitive, node.ChildNodes);

            yield return(new RegexMutation
            {
                OriginalNode = node,
                ReplacementNode = replacementNode,
                DisplayName = "Regex greedy quantifier quantity mutation",
                Description = $"Quantifier \"{node}\" was replaced with \"{replacementNode}\" at offset {node.GetSpan().Start}.",
                ReplacementPattern = root.ReplaceNode(node, replacementNode).ToString()
            });
        }
        private RegexMutation CharacterClassNegation(CharacterClassNode node, RegexNode root)
        {
            var span            = node.GetSpan();
            var replacementNode = node.Subtraction == null ? new CharacterClassNode(node.CharacterSet, !node.Negated) : new CharacterClassNode(node.CharacterSet, node.Subtraction, !node.Negated);

            return(new RegexMutation
            {
                OriginalNode = node,
                ReplacementNode = replacementNode,
                DisplayName = "Regex character class negation mutation",
                Description = $"Character class \"{node}\" was replaced with \"{replacementNode}\" at offset {span.Start}.",
                ReplacementPattern = root.ReplaceNode(node, replacementNode).ToString()
            });
        }
        private RegexMutation CharacterClassShorthandNegation(CharacterClassShorthandNode node, RegexNode root)
        {
            var negatedShorthandCharacter = char.IsLower(node.Shorthand) ? char.ToUpper(node.Shorthand) : char.ToLower(node.Shorthand);
            var replacementNode           = new CharacterClassShorthandNode(negatedShorthandCharacter);
            var span = node.GetSpan();

            return(new RegexMutation
            {
                OriginalNode = node,
                ReplacementNode = replacementNode,
                DisplayName = "Regex character class shorthand negation mutation",
                Description = $"Character class shorthand \"{node}\" was replaced with \"{replacementNode}\" at offset {span.Start}.",
                ReplacementPattern = root.ReplaceNode(node, replacementNode).ToString()
            });
        }