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() }); }
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() }); }
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() }); }